2014-10-28 3 views
2

수신자가 있습니다. 걸려온 전화, 발신 통화 등을 저장하는 세부 작업을 호출합니다. 이러한 모든 세부 사항은 sqlite DB로 전송됩니다. 내 활동이 실행되지 않으면 괜찮습니다.BroadcastReceiver에서 액티비티 또는 프래그먼트로 메시지를 보내는 방법

때때로 내 활동이 실행 중일 때 일부 수신 전화가옵니다. 수신기는 &을 실행하여 데이터를 DB에 저장합니다. UI는 DB의 변경을 모르기 때문에 새로 고쳐지지 않습니다.

여기 수신기에서 수동으로 활동이 새로 고침 화면을 실행하는 경우 알려야합니다. 안드로이드에서이 프로세스를 구현하는 방법.

나는이 부분

답변

1

당신은 활동 안에 브로드 캐스트 리시버를 만들 수 있습니다 약간 혼란 스러워요. onResume()에 등록하고 onPause()에서 등록을 취소합니다. 다른 수신기가 방송을 수신 할 때마다이 수신기에도 방송을 보내십시오. 액티비티가 진행중인 경우 (즉, 앞면) 방송이 수신됩니다. onReceive()에서 원하는대로하십시오.

예 :

BroadcastReceiver br = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      //Do stuff 
     } 
    }; 

이 또한 무시 방법 :

@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(br); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    registerReceiver(br, new IntentFilter("intent_filter"));//Use any string for IntentFilter you like 
} 

당신은 조각 내부의 방법을 만들어 activiy에서 조각을 업데이트하고 활동 안에 조각 개체에서 액세스 할 수 있습니다.

Intent intent = new Intent(action); 
LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(context); 
mgr.sendBroadcast(intent); 

http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

당신의 활동은 브로드 캐스트 리시버를 등록해야합니다 :

+0

샘플 코드를 알려주시겠습니까? 어떤 예도 환영합니다. 힌트를 가져 주셔서 감사합니다. 나는 목록 조각을 사용하고 있으며 통보 받아야합니다 – Naruto

+0

@Naruto 편집을 참조하십시오. – berserk

+0

여기, 내 수신기에서 어떤 작업을 수행 할 필요가 없습니까?, 그냥 코드를 추가해야합니다. 내 활동에 대해 안내하고 괜찮은 것을 시도해보십시오. – Naruto

3

당신은 (더 효율적이고 글로벌 브로드 캐스트를 사용하는 것보다 더 안전) 당신의 활동에 지역 방송을 보낼 LocalBroadcastManager을 사용할 수 있습니다 ONSTART와 중지시에 등록을 취소 : 중지시에

private BroadcastReceiver mBroadcastReceiver; 

mBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // do your thing 
    }  
}; 

LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(this); 
mgr.registerReceiver(mBroadcastReceiver, new IntentFilter(action)); 

:

,369을
mgr.unregisterReceiver(mBroadcastReceiver) 

이제 공식적인 안드로이드 방식입니다. Otto 또는 EventBus (https://github.com/greenrobot/EventBus)와 같은 이벤트/메시지 버스를 사용하는 것이 가장 좋습니다. 이를 사용하여 앱의 여러 구성 요소에서 메시지/이벤트를 브로드 캐스트 할 수 있습니다. 장점은 브로드 캐스트를 사용할 때처럼 컨텍스트에 액세스 할 필요가 없다는 것입니다. 더 빠르며 개발자가 객체 지향 프로그래밍을 강요합니다 (이벤트는 항상 객체이기 때문에). 이벤트 버스를 사용하기 시작하면 로컬 브로드 캐스트를 되돌아 보지 않고 앱 전반에서 사용되는 때로는 지저분한 관찰자/수신기 패턴을 대체하게됩니다.

+0

안녕하세요, 도움을 +1, 감사를 참조하십시오. 당신의 대답은 잘 돌아갔습니다. 정말 고맙습니다. 나는 당신이 어떤 대답을 가지고 있는지 알고 싶습니다. http://stackoverflow.com/questions/26449858/how-long-android-take-to-update-call-details-to-call-log – Naruto

+0

글쎄, 열등한 대답을 선호 하시는가? (아마 더 빠르기 때문에?) 나는 다음 질문을 전달할 것이다. –

+0

알았어, 시원하고 아프긴 질문을 게시하고 알려주세요. 감사 – Naruto

관련 문제