2

我從samsung-gear網站使用Tizen SDK for Wearable,以便與Samsung Gear 2設備交流提供商android應用程序。我可以將通知發送到設備,一旦我在齒輪2上運行消費者應用程序,我也可以在手錶和我的Android手機之間傳輸數據。如何檢查Samsung Gear 2是否通過編程方式與Android設備配對?

我所試圖做的是在Android應用程序中查看,如果手機與齒輪配對2.作爲東西使用配套服務創建通信對象並調用像isPaired()?:

的方法一樣簡單
CommunicationObject commObject = new CommunicationObject(Communication parameters); 

// I am assuming some connection call like commObject.connect() should be invoked first 
// where I can check for it's result afterwards such as 

if(commObject.isPaired()) 
{ 
    // do something 
} 

我認爲他們在網站上提供的SDK例如comsumer/provider應用程序已經假定設備已配對,因此它們展示瞭如何在手機和手錶之間傳輸數據。然而,我正在尋求一些簡單的問題,如詢問電話是否與齒輪設備配對,這應該是傳輸數據的先決條件,我認爲這是由三星齒輪經理自動完成的。

注意:對於示例提供者/消費者應用程序的情況,可以使用其中的代碼檢查是否有任何連接可用。但是,只有當我從齒輪設備手動啓動消費者應用程序時才啓用數據傳輸連接,否則它就像齒輪設備即使它不是成對的。

回答

3

我相信這不是最熱門的話題,所以我會張貼我想出來的答案,儘管我懷疑任何人都會需要它,而不是完美的,這是我用我最接近我的目標的方式可用的文檔。

我還應該提到this幻燈片幫助我保持良好狀態。

在我的解決方案中,齒輪插件(consumer/.wgt)和主機端應用程序(provider/.apk)之間必須存在一個主動雙向連接,如Samsung(Hello Accessory)提供的example application所有的時間,至少在我想檢查配對條件的時候。文檔是指它作爲:

你好齒輪是一個簡單的應用程序,包括:

  • 主機端應用程序(提供者):HelloAccessoryProvider.apk
  • 耐磨端應用程序(消費者) :HelloAccessoryConsumer.wgt(網絡應用)

看得出來雙方都有一定的xml配置和Android WH需要特定的權限在Hello Gear文件中有詳細說明。

這種雙向通信是由三星附屬框架在網絡層(通過三星附屬協議,SAP)提供的,因爲雙方實施相同的附件服務配置文件,同樣通過兩端的xml文件配置(服務名稱,頻道ID等)。

Architecture of the connection

的Android側實現協議作爲延伸的SAAgent抽象類服務。然後在齒輪側應用程序(。wgt)可以調用SAAgent回調函數,並且提供者/使用者通信通過SASocket兩端聲明的對象通過xml配置文件中的預定義通道處理。

SAAgent workflow

請注意,這種溝通對兩端進行初始化,在我的情況,我不得不對齒輪一旦打開窗件應用程序(我認爲應該通過啓動齒輪部件的方式意圖或通知,但我還沒有找到)在Android應用程序啓動後,這裏開始意味着SAAgent服務已啓動並綁定到一個Activity,有資格接收回調並通過狀態消息發送到應用程序的其餘部分廣播。比如活動連接的數量,或者齒輪套接字和Android應用之間的任何數據傳輸都可以這樣完成。

請注意,如果您不需要在齒輪小部件和Android應用程序之間傳輸數據,那麼您可能會接受通知。從Android應用程序向Gear發送通知的唯一要求似乎是Gear與您的手機配對並通過藍牙連接。然後,你可以發送一個意圖是在第6節中更詳細解釋here所有你需要的應該是權限:

com.samsung.wmanager.ENABLE_NOTIFICATION 

,並在您ApplicationManifest.xml文件中的一些元數據定義在同一節解釋。

<meta-data 
android:name="master_app_packagename" 
android:value="com.example.gearMasterApp"/> 
<meta-data 
android:name="app_notification_maxbyte" 
android:value="300 "/> 

這裏是故意的示例代碼,以便將通知發送到齒輪:

public static final String ALERT_NOTIFICATION = 
「com.samsung.accessory.intent.action.ALERT_NOTIFICATION_ITEM」; 
public static final int NOTIFICATION_SOURCE_API_SECOND = 3; 
Bitmap bitmapImg; 
// Put data to Intent 
Intent myIntent = new Intent(ALERT_NOTIFICATION); 
myIntent.putExtra("NOTIFICATION_PACKAGE_NAME", 「com.example.gearApp」); 
myIntent.putExtra("NOTIFICATION_VERSION", NOTIFICATION_SOURCE_API_SECOND); 
myIntent.putExtra("NOTIFICATION_TIME", System.currentTimeMillis();); 
myIntent.putExtra("NOTIFICATION_MAIN_TEXT", 「Title Text」); 
myIntent.putExtra("NOTIFICATION_TEXT_MESSAGE", 」Body text); 
byte [] byteArray = convertResizeBitmapToByte(bitmapImg); 
myIntent.putExtra("NOTIFICATION_APP_ICON", byteArray); 
myIntent.putExtra("NOTIFICATION_LAUNCH_INTENT", 「com.example.gearMasterApp」); 
myIntent.putExtra("NOTIFICATION_LAUNCH_TOACC_INTENT", 「com.example.gearSideApp」); 
sendBroadcast(myIntent); 

public byte[] convertResizeBitmapToByte(Bitmap bitmap){ 
Bitmap scBitmap = Bitmap.createScaledBitmap(bitmap, 75, 75, false); 
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream(); 
scBitmap.compress(Bitmap.CompressFormat.PNG, 50, byteArrayStream); 

return byteArrayStream.toByteArray(); 
} 

一旦通知上讀齒輪側,就可以收到沿意圖動作一些可選參數:

意向行動: 「com.samsung.accessory.intent.action.UPDATE_NOTIFICATION_ITEM」

這可能是另一種方法來檢查與Gear和您的手機的活動通信,但不能保證通知將被讀取,並且我的情況下確實需要將Gear通信保持爲可選狀態以允許Android應用程序繼續即使沒有與Gear的活動連接,也是任務。

關於原始問題,我要求一種檢測Gear是否配對的方法,我嘗試使用Android的BluetoothAdapter的getBondedDevices()方法列出配對的藍牙設備,但它表明即使您的Gear是關閉了,這不足以滿足我的需求,我不認爲它合乎邏輯。這是真的,但一旦你的設備重新打開。

我很滿意上述解決方案,因爲它足夠滿足我的需求,因此我會接受我自己的答案。

相關問題