Je développe une application Android pour collecter des données à partir d'un Android Wear. Un WearableListenerService
est utilisé dans l'appareil portatif pour recevoir des données de la montre via l'API de données.Comment enregistrer correctement l'événement DATA_CHANGED Data API après un crash/arrêt forcé?
Mais j'ai remarqué que si l'application dans l'appareil de poche est arrêtée de force, soit depuis Paramètres -> Apps ou par adb
pendant le développement, alors que l'application dans wearable est toujours en cours d'exécution, elle ne pourra plus recevoir de données il est redémarré manuellement.
Cela ne se produira pas si le portable ne lance pas l'application.
Pour redémarrer la capture des données dans l'ordinateur de poche, je dois arrêter Google Play Services
et relancer mon application.
Mon 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
en poche:
<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>
Il semble que l'auditeur ne sera pas effacé après le crash application/arrêt. Y a-t-il une solution de contournement pour gérer cela?
Terrific! J'ai placé les codes dans 'Application.onCreate()' et cela a fonctionné comme un charme! Merci beaucoup. –