2016-06-13 3 views
4

현재 브로드 캐스트 리시버는 수신 통화 상태 이벤트 용입니다. 나는 아래와 같이 AndroidManifest.xml에 방송 수신기를 등록했다.android의 다른 브로드 캐스트 수신기에서 브로드 캐스트 리시버를 등록하십시오.

<receiver android:name=".api.PhoneCallReceiver"> 
    <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

응용 프로그램이 호출 상태 이벤트를 듣고 난 내 응용 프로그램을 관리하고 CALL_STATE에 따라 등록되는이 방송 수신기를 시작합니다.

전화가 다시 시작될 때까지 문제가 없습니다. 전화를 다시 시작하면이 브로드 캐스트 수신기가 작동을 멈 춥니 다. 나는 듣고있는 수신기를 등록해야한다는 것을 안다. BOOT_COMPLETED 시스템 이벤트.

<receiver android:name=".api.PhoneCallReceiver"> 
    <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
    <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

나는 또한 BOOT_COMPLETED 시스템 이벤트를 가져 오기위한 권한을 준 : 아래 그림과 같이

는 내가 뭘 짓을하는 것입니다.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

하지만 어떻게 든 작동하지 않습니다. BOOT_COMPLETED 이벤트 만 청취하는 새 브로드 캐스트 수신기를 만들려고합니다.

수신 전화가 오면 내 전화 청취자 브로드 캐스트 수신기를 어떻게 시작할 수 있습니까?

어떻게 방송 수신기 내가 부팅 수신기에서 서비스를 시작할 수 있습니다 내가 그렇게 서비스를 기존 방송 수신기의 코드를 이동해야합니까 다른 방송 수신기

에서 등록 할 수 있습니다?

도움이 될 것입니다.

+0

권한을 부여 했으니 까, 그렇다면 타겟 => API23을 개발하면 런타임에이 권한을 요청 했습니까? – Opiatefuchs

+0

@Opiatefuchs 현재 targetSdkVersion은 앱의 경우 22입니다. – Rajesh

+0

좋습니다. READ_PHONE_STATE 권한이 있습니까? – Opiatefuchs

답변

1

기타 답변을 환영합니다.

나는 새로운 방송 수신기를 만들고 그것을 onReceive()라는 방법으로 풀어 냈다. 전화가 다시 시작될 때 방송 수신기가 호출 될 것이고 READ_PHONE_STATE 브로드 캐스트 수신기도 등록 된 수신기를 명시 적으로 등록한다.

의 AndroidManifest.xml : 아래

코드입니다

<receiver android:name=".api.ServiceStarter"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

브로드 캐스트 리시버 :

public class ServiceStarter extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.intent.action.PHONE_STATE"); 
     PhoneCallReceiver receiver = new PhoneCallReceiver(); 
     context.getApplicationContext().registerReceiver(receiver, filter); 
    } 
} 
당신은 사용하여 수신기를 등록해야

응용 프로그램 컨텍스트 아래 같은 :

그렇지 않으면 예외 다음 얻을 것이다 대신

context.registerReceiver(receiver, filter); 

context.getApplicationContext().registerReceiver(receiver, filter); 

:

java.lang.RuntimeException가 : 안드로이드 : 수신자에게 com.ecosmob.contactpro.api.ServiceStarter를 시작할 수 없습니다 .함유량.ReceiverCallNotAllowedException : BroadcastReceiver 구성 요소가 의도를 수신하도록 등록 할 수 없음

다른 사람들에게 도움이되기를 바랍니다.

관련 문제