我正在使用tizen sdk从samsung-gear站点进行穿戴,以便与三星gear 2设备通信提供商android应用程序。我可以向gear发送通知,一旦我在gear 2上运行消费者应用程序,我也可以在手表和我的android手机之间传输数据。
我要做的是在android应用程序中检查手机是否与gear 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示例,比如他们在网站上提供的消费者/提供商应用程序,已经假定设备是成对的,因此它们展示了如何在手机和gear watch之间传输数据。不过,我正在寻找一些简单的问题,比如询问手机是否与齿轮装置配对,这应该是传输数据的先决条件,我相信这是由三星齿轮管理器(samsung gear manager)现在自动完成的。
注意:对于示例提供者/使用者应用程序,可以使用其中的代码检查是否有可用的连接。但是只有当我从gear设备手动启动消费者应用程序时,数据传输连接才启用,否则它的行为就像gear设备没有配对一样,即使它是配对的。

最佳答案

我相信这不是现在最流行的话题,所以我会把我的答案贴出来,尽管我怀疑是否有人会需要它,如果不是完美的话,这是我使用可用文档实现目标的最接近的方式。
我还应该提到this幻灯片也帮助我保持在正轨上。
在我的解决方案中,gear widget(consumer/.wgt)和主机端应用程序(provider/.apk)之间必须始终存在活动的双向连接,就像三星(hello accessory)提供的example application一样,至少在我想检查配对条件的时间内是这样。文件称之为:
Hello Gear是一个简单的应用程序,包括:
主机端应用程序(提供程序):helloaccessoryprovider.apk
可穿戴应用程序(消费者):helloaccessoryconsumer.wgt(Web应用程序)
请注意,双方都有一些xml配置,android需要特定的权限,这在Hello Gear文档中有详细说明。
这种双向通信由网络层上的Samsung附件框架(通过Samsung附件协议,SAP)提供,前提是双方实现相同的附件服务配置文件,同样,通过两端的XML文件(服务名称、通道ID等)进行配置。
android端将协议作为服务实现,扩展了SAAgent抽象类。然后gear端应用程序(.wgt)上的小部件可以调用saagent回调,提供者/使用者通信通过在xml配置文件中的预定义通道两端声明的对象来处理。
请注意,这个通信必须在两端初始化,在我的情况下,我必须在gear上打开一次widget应用程序(我相信应该有一种方法可以通过意图或通知来启动gear widget,但不知何故,我还找不到)。这里的started意味着saagent服务已经启动并绑定到一个活动,有资格接收回调并通过广播向应用程序的其余部分发送状态消息。比如主动连接的数量,或者gear socket和android应用程序之间的任何数据传输都可以这样做。
注意,如果您不需要在gear小部件和android应用程序之间传输数据,您可能只需要接受通知就可以了。从android应用程序向gear发送通知的唯一要求似乎是gear与手机配对并通过蓝牙连接。然后,您可以发送一个意图,如第6节中更详细的SASocket所述。你只需要得到许可:

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 "/>

下面是intent的示例代码,用于向gear发送通知:
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_项”
这可能是另一种检查与gear和手机的主动通信的方法,但不能保证会读取通知,而且我的案例确实要求保持gear通信是可选的,以便允许android应用程序继续其任务,即使存在与齿轮没有主动连接。
关于最初的问题,我问了一个检测设备是否配对的方法,我试着用android的蓝牙适配器的here方法列出配对的蓝牙设备,但它显示即使你的设备关闭了,你的设备也配对了,这还不足以满足我的需要,我确实做到了。不符合逻辑。但一旦你的设备被打开,这是真的。
我对以上的解决方案很满意,因为它已经满足了我的需要,所以我会接受我自己的答案。

10-02 00:25