Android Wear에서 데이터를 수집하기 위해 Android 앱을 개발 중입니다. A WearableListenerService
은 핸드 헬드 장치에서 Data API를 통해 시계에서 데이터를 수신하는 데 사용됩니다.크래시/강제 종료 후에 DATA_CHANGED 데이터 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>
이 리스너가 응용 프로그램 충돌/정지 후 삭제되지 않습니다 보인다. 이 문제를 해결할 수있는 해결 방법이 있습니까?
대단하다! 나는 코드를'Application.onCreate()'에 넣었고 그것은 마치 매력처럼 작동했다! 고마워. –