我正在开发一款Android应用来从Android Wear收集数据。手持设备中使用WearableListenerService
通过Data API从手表接收数据。
但是我注意到,如果手持设备中的应用程序被强行停止,可以通过“设置” - >应用程序或adb
在开发过程中,当可穿戴设备中的应用程序仍在运行时,即使手动重新启动,它也无法再次接收数据。
如果可穿戴设备没有运行应用程序,则不会发生这种情况。
要重新开始在掌上电脑中捕获数据,我必须停止Google Play Services
并重新启动我的应用。
我的WearableListenerService
:
public class WearableSensorListener extends WearableListenerService {
public static final String SENSOR_RESULT = "minimal_intent_service.result";
public static final String SENSOR_MESSAGE = "minimal_intent_service.message";
private static final String DATA_API_PATH = "/wearable-sensor";
// private GoogleApiClient googleApiClient;
private LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
Log.i(this.getClass().toString(), "Got data at " + System.currentTimeMillis());
for (DataEvent dataEvent : dataEvents) {
Log.i(this.getClass().toString(), "Got event: " + dataEvent.toString());
if (dataEvent.getType() == DataEvent.TYPE_CHANGED) {
String path = dataEvent.getDataItem().getUri().getPath();
if (path.equals(DATA_API_PATH)) {
DataMap dataMap = DataMapItem.fromDataItem(dataEvent.getDataItem()).getDataMap();
int type = dataMap.getInt("TYPE");
long time = dataMap.getLong("TIME");
float[] data = dataMap.getFloatArray("DATA");
String message = String.format(Locale.UK, "TYPE: %d, TIME: %d, DATA: %s",
type,
time,
Arrays.toString(data));
showSensorResult(message);
}
}
}
}
private void showSensorResult(String message) {
Intent intent = new Intent(SENSOR_RESULT);
if (message != null)
intent.putExtra(SENSOR_MESSAGE, message);
localBroadcastManager.sendBroadcast(intent);
}
}
掌上电脑中的 AndroidManifest.xml
:
<service
android:name=".WearableSensorListener"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.wearable.DATA_CHANGED"/>
<data android:host="*"
android:scheme="wear"
android:pathPrefix="/wearable-sensor"/>
</intent-filter>
</service>
在应用程序崩溃/停止后,似乎不会清除侦听器。有没有解决方法来解决这个问题?
答案 0 :(得分:1)
在应用程序崩溃/停止后,似乎不会清除监听器。
为什么要这样?您已通过清单注册该操作,并且未在任何地方注销。
您可以使用PackageManager. setComponentEnabledSetting() API从onDataChanged()
停用该组件。
设置包组件(活动,接收者,服务,提供者)的启用设置。此设置将覆盖可能已由其清单中的组件设置的任何已启用状态。