如何检测android磨损设备何时断开连接?

时间:2017-04-11 22:58:31

标签: android wear-os

我有一个应用程序,可以使用WearableListenerServiceonPeerConnected / onPeerDisconnected来检测Android服装设备何时断开连接。

似乎这些已被弃用,所以我现在正在尝试使用onCapabilityChanged,但我无法调用此函数。我在我的清单中使用它来提供服务。有关这些功能的文档不是很好。

<intent-filter>
            <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
</intent-filter>

1 个答案:

答案 0 :(得分:3)

所以我终于开始工作了。它需要设置一些组合,但我会列出所有这些。

  1. Gradle。您需要确保移动版本和可穿戴版本具有相同的应用程序ID,相同的版本代码,相同的版本名称以及可能相同的播放服务版本。如果使用项目gradle文件来保存这些值并让每个模块引用这些值,则更容易处理。
  2. 在根build.gradle文件中有:

    ext {
        TARGET_SDK_VERSION = 25
        VERSION_CODE = 7
        VERSION_NAME = '2.0'
    
        COMPILE_SDK_VERSION = 25
        BUILD_TOOLS_VERSION = '25.0.2'
    
        APPLICATION_ID = "com.example.projectname"
    
        PLAY_SERVICES_WEARABLE =  'com.google.android.gms:play-services-wearable:9.4.0'
    }
    

    在每个模块build.gradle文件中,可以引用这些文件,如下所示:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion rootProject.ext.COMPILE_SDK_VERSION
        buildToolsVersion rootProject.ext.BUILD_TOOLS_VERSION
    
        defaultConfig {
            applicationId rootProject.ext.APPLICATION_ID
            minSdkVersion 20
            targetSdkVersion rootProject.ext.TARGET_SDK_VERSION
            versionCode rootProject.ext.VERSION_CODE
            versionName rootProject.ext.VERSION_NAME
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        provided 'com.google.android.wearable:wearable:2.0.1'
        compile 'com.google.android.support:wearable:2.0.1'
        compile rootProject.ext.PLAY_SERVICES_WEARABLE
    }
    
    1. 清单。随着对播放服务的新更新,WearableListenerService现在必须为每个要由android系统调用的覆盖函数定义intent-filter。对于onCapabilityChanged函数,intent过滤器应定义为:
    2.     <service
              android:name=".MyWearableListenerService"
              android:enabled="true"
              android:exported="true" >
              <intent-filter>
                  <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
                  <data android:scheme="wear" android:host="*"/>
              </intent-filter>
              <intent-filter>
                  <action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
                  <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
                  <data android:scheme="wear" android:host="*" android:pathPrefix="/PREF"/>
                  <data android:scheme="wear" android:host="*" android:pathPrefix="/start"/>
              </intent-filter>
          </service>
      

      intent-filter的{​​{1}}为onCapabilityChanged。除此之外,还需要告知intent-filter数据方案和主机。这可以简单地为com.google.android.gms.wearable.CAPABILITY_CHANGED。此intent-filter可以省略data android:scheme="wear" android:host="*"。请注意,pathPrefixcom.google.android.gms.wearable.DATA_CHANGED的intent-filter需要com.google.android.gms.wearable.MESSAGE_RECEIVED定义为能够在服务中调用各自的函数。

      1. 功能文件。为了启动pathPrefix功能,系统需要检测具有连接功能的设备。为此,我们必须在每个模块的xml文件中定义功能。
      2. 为此,在每个模块中,将名为onCapabilityChanged的文件保存在res / values目录中。该文件必须具有名为wear.xml的字符串数组,其中包含描述您希望模块向其他设备通告的功能的项目。以下是可穿戴模块中包含的android_wear_capabilities文件的示例。

        wear.xml

        首先,请务必注意,文件必须必须名为<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="android_wear_capabilities"> <item>verify_remote_wear_app</item> </string-array> </resources> 必须才能放在values目录中。其次,字符串数组必须命名为wear.xml。还要确保每个模块中的每个功能都具有唯一的名称。

        如果上述任何一项不正确,那么android_wear_capabilities功能将永远不会被调用,你将会沮丧地拔掉你的头发。

        现在,要实际判断设备是否已断开连接,请使用onCapabilityChanged功能:

        onCapabilityChanged

        此功能将告诉您设备何时连接或断开连接,假设一次只连接了1个设备。