我相信這不是最熱門的話題,所以我會張貼我想出來的答案,儘管我懷疑任何人都會需要它,而不是完美的,這是我用我最接近我的目標的方式可用的文檔。
我還應該提到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](https://i.stack.imgur.com/5u0WE.png)
的Android側實現協議作爲延伸的SAAgent抽象類服務。然後在齒輪側應用程序(。wgt)可以調用SAAgent回調函數,並且提供者/使用者通信通過SASocket兩端聲明的對象通過xml配置文件中的預定義通道處理。
![SAAgent workflow](https://i.stack.imgur.com/b7nyL.jpg)
請注意,這種溝通對兩端進行初始化,在我的情況,我不得不對齒輪一旦打開窗件應用程序(我認爲應該通過啓動齒輪部件的方式意圖或通知,但我還沒有找到)在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是關閉了,這不足以滿足我的需求,我不認爲它合乎邏輯。這是真的,但一旦你的設備重新打開。
我很滿意上述解決方案,因爲它足夠滿足我的需求,因此我會接受我自己的答案。