如何检查Samsung Gear 2是否以编程方式与Android设备配对?

时间:2014-10-26 16:18:06

标签: android tizen-wearable-sdk samsung-mobile-sdk samsung-galaxy-gear

我正在使用来自samsung-gear网站的Tizen SDK for Wearable,以便与Samsung Gear 2设备通信提供商Android应用程序。我能够向装备发送通知,一旦我在装备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示例(例如他们在其网站上提供的comsumer / provider应用程序)已经假设设备已配对,因此它们展示了如何在手机和齿轮手表之间传输数据。然而,我正在寻找一些简单的东西,比如询问手机是否与齿轮装置配对,这应该是传输数据的先决条件,这是我现在相信的Samsung Gear Manager自动完成的。

注意:对于示例提供者/消费者应用程序的情况,可以使用其中的代码检查是否有任何连接可用。但是,只有当我从齿轮装置手动启动消费者应用程序时才启用数据传输连接,否则它就像齿轮装置即使是配对也没有配对。

1 个答案:

答案 0 :(得分:3)

我相信这不是最受欢迎的主题,所以我会发布我想出的答案,虽然我怀疑有人会需要它,但不是完美的,它是我能找到的最接近的方式目标使用可用的文档。

我还应该提到this幻灯片也帮助我保持正轨。

在我的解决方案中,齿轮小部件(使用者/ .wgt)和主机端应用程序(提供者/ .apk)之间必须存在活动的双向连接,如三星提供的example application(Hello)附件),至少在我想要检查配对条件的时候。文档将其称为:

  

Hello Gear是一个简单的应用程序,包括:

     
      
  • 主机端应用程序(提供程序):HelloAccessoryProvider.apk
  •   
  • 可穿戴侧应用程序(消费者):HelloAccessoryConsumer.wgt(Web app)
  •   

请注意,双方都有一些xml配置,Android需要特定权限,Hello Gear文档中对此进行了详细说明。

这种双向通信是由三星附件框架在网络层(通过三星附件协议,SAP)提供的,因为双方实现相同的附件服务配置文件,再次通过两端的xml文件配置(服务名称) ,频道ID等。)。

Architecture of the connection

Android端将协议实现为服务,扩展了SAAgent抽象类。然后,齿轮侧应用程序(.wgt)上的小部件可以调用SAAgent回调,并且通过xml配置文件中预定义通道上两端声明的SASocket对象处理提供者/消费者通信。

SAAgent workflow

请注意,此通信必须在两端进行初始化,在我的情况下,我必须在Gear上打开一次小部件应用程序(我相信应该有一种通过意图或通知启动齿轮小部件的方法,不知何故,但我还没找到)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 "/>

以下是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();
 }

在齿轮侧读取通知后,您可以接收意图操作以及一些可选参数:

  

意图行动:   &#34; com.samsung.accessory.intent.action.UPDATE_NOTIFICATION_ITEM&#34;

这可能是另一种检查与Gear和您的手机进行有效通信的方法,但无法保证通知将被读取且我的案例确实需要保持Gear通信可选,以便允许Android应用程序继续运行即使与Gear没有活动连接,也可以完成任务。

关于原始问题,我要求检测Gear是否配对的方法,我尝试使用Android的BluetoothAdapter的getBondedDevices()方法列出配对的蓝牙设备,但它显示您的Gear即使你的Gear关闭也会配对,这对我的需求来说还不够,我觉得它不符合逻辑。一旦你的设备重新开启,它就是真的。

我对上述解决方案感到满意,因为它足以满足我的需求,因此我会接受我自己的答案。