2017-12-19 12 views
0

잘 실행되는 SyncAdapter 인 응용 프로그램이 있습니다. SyncService은 시간당 한 번 실행됩니다.SyncAdapter에서 Activity로 sendBroadcast를 보낼 수 없습니다.

내 응용 프로그램의 주소는 DeviceControlActivity이며 syncResult과 같은 SyncAdaptor에서 메시지를 수신하고 싶습니다.

나는 그것을 시작하고 실행하기 위해 많은 노력을했지만 DeviceControlActivity에서 어떤 메시지도받을 수 없다. SyncAdapter. 내 DeviceControlActivity에서

내가 할 :

private LocalBroadcastManager mBroadcastManager; 

public SyncAdapter(Context context, boolean autoInitialize) { 
    super(context, autoInitialize); 


    mBroadcastManager = LocalBroadcastManager.getInstance(context); 
} 

@Override 
public void onPerformSync(
     Account account, 
     Bundle extras, 
     String authority, 
     ContentProviderClient provider, 
     SyncResult syncResult) { 

    Intent intent = new Intent(Constants.MESSAGE_SYNC); 
    mBroadcastManager.sendBroadcast(intent); 

나는 자신에게 DeviceControlActivity에서 메시지를 보낼 수 있으며 작동합니다

private BroadcastReceiver mSyncMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "Got it!"); 
    } 
}; 

@Override 
protected void onResume() { 
    super.onResume(); 
    // Receive feedback from syncManager 
    LocalBroadcastManager.getInstance(getApplication()).registerReceiver(mSyncMessageReceiver, 
      new IntentFilter(Constants.MESSAGE_SYNC)); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncMessageReceiver); 
} 

을 SyncAdapter, 나는있다.

나는 SyncService에서 메시지를받을 수 있지만 다른 방법을 사용 할 수 있습니다 예상대로

final int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE; 
mSyncMonitor = ContentResolver.addStatusChangeListener(mask, this); 

이 청취자는 동기화 활동을보고합니다.

하지만 LocalBroadcastManager를 사용하여 서비스와 활동간에 통신하고 싶지만 사용할 수 없습니다.

나는 이미 LocalBroadcastManager 문서에 따르면 How to use LocalBroadcastManager?

답변

1

같은 질문을 관련 체크 한이 클래스는 등록 및 프로세스 내 로컬 객체 에 텐트의 방송을 보낼 도우미입니다.

<service>이 다른 프로세스에서 실행되는 경우 위의 예제는 작동하지 않습니다.

AndroidManifest.xml

했다 :

<service 
      android:name=".sync.SyncService" 
      android:exported="true" 
      android:process=":sync"> 

Creating a Sync Adapter에서 제안하는 방법입니다. 우리가에 <service> 선언을 변경하는 경우

는 :

<service 
     android:name=".sync.SyncService" 
     android:exported="true"> 

android:process 속성을 제거의 SyncService 같은 프로세스에서 실행되고 LocalBroadcastManager 작동합니다.