ACTION_USER_PRESENT BroadcastReceiverはマニフェストに登録することができませんか?

StackOverflow https://stackoverflow.com/questions/3601014

質問

私はのために、( ACTION_TIME_TICK に、複数の放送を見ます一例)は、明示的にContext.registerReceiver()を介して登録されている必要があり、マニフェストに登録することができません。私は意図 ACTION_USER_PRESENT の放送とのトラブルを抱えています。具体的には、Iエミュレータ上でテストし、自分のアプリケーションがエラーで強制閉鎖を維持します:

08-30 09:44:23.397: ERROR/AndroidRuntime(290): java.lang.RuntimeException: Unable to start receiver me.turnerha.RegisterListeners: java.lang.IllegalArgumentException: Receiver not registered: me.turnerha.RegisterListeners@43d05690

これは

によって引き起こされます
08-30 09:44:23.397: ERROR/AndroidRuntime(290): Caused by: java.lang.IllegalArgumentException: Receiver not registered: me.turnerha.RegisterListeners@43d05690
私のマニフェストはかなり単純です。

    <receiver android:name=".RegisterListeners">
        <intent-filter>
            <action android:name="android.intent.action.SCREEN_ON" />
        </intent-filter>
    </receiver>

任意の考え?私は基本的に自分のアプリケーションがインストールされた後、できるだけ早くとして起こされるReceiverを作成しようとしています。それが目覚めている最初の時間は、それはいくつかのリスナーを登録し、それが再び呼び出されることはありませんので、それは自分自身の登録を解除します。

(私は本当に:)目的は、セットアップの小さなビットを許可するように、アプリがインストールされた後、直ちに解雇があったことを望みます)
役に立ちましたか?

解決

正しい - ACTION_SCREEN_ONACTION_USER_PRESENTどちらもマニフェストに登録することができます。私はこの問題のドキュメントのバグを提出ています。

他のヒント

マニフェストファイルにACTION_USER_PRESENTを登録すると、常にトリガーされません。私はマニフェストファイルでACTION_USER_PRESENTを登録すれば、私のnexus4では、それは活動に登録するのに対し、すべての作業は罰金の作品はありません。

私は同じ問題を抱えていたし、私が(4.3と5.1でテスト)、それを修正しました。私はそれがOKで、限り、あなたはREAD_PHONE_STATE権限を持っているように、マニフェスト内の「android.intent.action.USER_PRESENT」を宣言することができました!私のミニアプリがON / OFF画面に反応して状態という放送受信機で構成され、連続音声認識を行い、バックグラウンドサービスを実行します。画面がオフになっている場合、認識がオフになっています。ここでは、コードは、楽しむ:MANIFESTをます:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <receiver android:name="classes.VoiceLaunchReceiver" >
            <intent-filter>                
                <action android:name="android.intent.action.USER_PRESENT" />    
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

BROADCAST RECEIVERます:

public class VoiceLaunchReceiver extends BroadcastReceiver {
    @Override  
    public void onReceive(Context ctx, Intent intent) {     
        Intent service = new Intent(ctx, VoiceLaunchService.class);
     //   service.putExtra(action, true);
        Log.i("joscsr","Incoming Voice Launch Broadcast...");  

        if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
            Log.i("joshcsr", "************\nCSR Resumed (BC)\n************");
            ctx.startService(service);
            }
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.i("joshcsr", "************\nCSR STOPPED by SCREEN (BC)\n************");
            ctx.stopService(service);  
            }
        }  
}
あなたが想像できるように、

は、私のUSER_PRESENT放送受信機は、どこにも登録されていません。私は私の受信機によって引き起こされた私のサービス、ののonCreateメソッドでACTION_SCREEN_OFFとONを登録します。

@Override
public void onCreate() {
    super.onCreate();
    //Register screen ON/OFF BroadCast
    launcher=new VoiceLaunchReceiver();
    IntentFilter i=new IntentFilter(Intent.ACTION_SCREEN_OFF);
    i.addAction(Intent.ACTION_SCREEN_ON);               
    registerReceiver(launcher,i);
    Log.d("joshcsr","VoiceLaunch Service CREATED"); 
    }

最後に、私、私のサービスのonDestroy()でオン/オフ画面の登録を解除します:

@Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(launcher);}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top