0

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> 

이 리스너가 응용 프로그램 충돌/정지 후 삭제되지 않습니다 보인다. 이 문제를 해결할 수있는 해결 방법이 있습니까?

답변

1

앱이 중단되거나 중지 된 후에 청취자가 삭제되지 않는 것 같습니다.

왜 그래야합니까? 매니페스트를 통해 해당 작업에 등록했으며 어디서나 등록 취소하지 않았습니다.

onDataChanged()에서 PackageManager. setComponentEnabledSetting() API로 구성 요소를 사용 중지 할 수 있습니다.

패키지 구성 요소 (활동, 수신자, 서비스, 공급자)에 대해 활성화 된 설정을 지정합니다. 이 설정은 매니페스트의 구성 요소에 의해 설정되었을 수있는 모든 활성화 된 상태를 재정의합니다.

+0

대단하다! 나는 코드를'Application.onCreate()'에 넣었고 그것은 마치 매력처럼 작동했다! 고마워. –

관련 문제