如何在崩溃/强制停止后正确注册DATA_CHANGED数据 API 事件



我正在开发一个Android应用程序,从Android Wear收集数据。手持设备中使用WearableListenerService通过数据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>

似乎在应用程序崩溃/停止后不会清除侦听器。有什么解决方法可以解决这个问题吗?

似乎在应用程序崩溃/停止后不会清除侦听器。

为什么呢?您已通过清单注册该操作,并且未从任何位置取消注册。

您可以使用 PackageManager 禁用组件onDataChanged()。 setComponentEnabledSetting(( API。

为包组件(活动、接收方、服务、提供程序(设置启用设置。此设置将覆盖组件在其清单中可能已设置的任何启用状态。

相关内容

  • 没有找到相关文章

最新更新