2016-06-13 6 views
4

現在、私はリッスンコールステートイベント用のブロードキャストレシーバーを持っています。私はAndroidManifest.xmlに放送受信機を登録しました。アンドロイドの別のブロードキャストレシーバーからのブロードキャストレシーバーの登録

<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

あなたは権限を与えましたが、あなたはtarget => API23を開発した場合、実行時にこの権限を要求しましたか? – Opiatefuchs

+0

@Opiatefuchs現在のtargetSdkVersionはアプリで22です。 – Rajesh

+0

OK、あなたはREAD_PHONE_STATEの許可を持っていますか? – Opiatefuchs

答えて

1

その他の回答は歓迎します。電話を再起動すると、私は動的にも、マニフェスト登録受信機であるREAD_PHONE_STATE放送受信機を登録しているとき、私は新しい放送受信機及びその放送受信機のonReceive()方法を作成することによって、それを解決した

が呼び出されます。

以下

はコードです:

のAndroidManifest.xml:

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

BroadcastReceiver:

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.getApplicationContext().registerReceiver(receiver, filter); 

代わりの

context.registerReceiver(receiver, filter); 

そうでなければ、例外次しまいます。

java.lang.RuntimeException: アンドロイド:受信機 com.ecosmob.contactpro.api.ServiceStarterを開始できません。コンテンツ。ReceiverCallNotAllowedException:BroadcastReceiver コンポーネントが意図

私はそれが他の人の役に立てば幸いを受け取るために登録することを許可されていません!

関連する問題