2011-08-18 4 views
1

나는 사용자에게 SMS를 통해 정보를 제공함으로써 작동하는 안드로이드 앱을 만들고 있습니다. 사용자는 APP에 하드 코딩 된 미리 결정된 번호로 SMS를 보낸 다음 응답을 수신합니다.안드로이드에서 BroadcastReciever를 동적으로 생성하기

이 acheive하기 위해, 나는 매니페스트 내 안드로이드에 브로드 캐스트 리시버를 사용하고

<receiver android:name=".SMSReciever"> 
     <intent-filter android:priority="2"> 
      <action android:name= 
       "android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

나는 새로운 클래스 SMSReciever를 만드는 경우 응답을 받았다 때, 다음, 나는 어떻게 든로 다시 정보를 전송하는 것 사용자가 화면에서 여는 활동. 앱을 더 대화식으로 만들 수 있도록 내 주요 활동에서이를 동적으로 수행 할 수 있습니까?

Context.registerReciever 메서드에 대해 알게되었지만받는 사람의 우선 순위를 어떻게 설명합니까? 리시버가 더 높은 우선 순위를 가지지 않으면 메시징 앱이 브로드 캐스트가 내 앱에 도달하는 것을 멈출 수 있습니다. 누군가가 이와 같은 해결책을 찾았습니까?

답변

4

내가 찾고있는 것을 얻기 위해 다음 코드를 사용했습니다.

IntentFilter fp = new IntentFilter(); 
fp.addAction("android.provider.Telephony.SMS_RECEIVED"); 
fp.setPriority(18); 

//--- when the sms is received --- 
registerReceiver(new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     //Processing for received broadcast happens here    
    } 
}, fp); 
0

com.example.intent.VERIFICATION_RECEIVED과 같은 사용자 지정 의도 동작을 사용하고이를 SMSReciever에서 브로드 캐스팅 한 다음 ActivityBroadcastReceiver으로 수신하면이 문제를 해결할 수 있습니다. 당신이 SMSReciever에서 SMS 처리를 유지할 수와 Activity는 SMS를 처리하는 방법에 대해 신경 쓸 필요가없는이 방법을 사용

IntentFilter filter = new IntentFilter(PageFragment.ACTION_LOADING_DONE); 
registerReceiver(new MyReceiver(), filter); 

.

+0

이 생각은 내 마음에 왔으며 다른 방법이 없다면 문제를 해결하기위한 나의 접근 방식입니다. :) – Rupin

1

본인은 직접 테스트하지 않았지만 Android 소스 코드를 통해 빠른 검색을 수행했습니다.

우선 순위가 분석되어 IntentFilter에 저장됩니다 (code 참조). 따라서 IntentFilter을 만들고 setPriority() 함수를 사용하여 브로드 캐스트 수신기의 우선 순위를 설정할 수 있습니다.

IntentFilter filter = new IntentFilter(...); 
filter.setPriority(receiverPriority);// <----- 
context.registerReceiver(filter, mBroadcastReceiver); 
관련 문제