7

なんらかの理由で onReceive メソッドが呼び出され
ない フィルターなどを適用していない

クラスは次のとおりです。

import java.util.ArrayList;
import java.util.Calendar;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import android.util.Log;

public class RegisterListener extends BroadcastReceiver {
private final int DELAY_TIME = 5;
private int m_seconds = 0;
private int m_minutes = 0;
private int m_hours   = 0;
static ArrayList<BroadcastReceiverListener> listeners = new ArrayList<BroadcastReceiverListener>();

@Override
public void onReceive(Context context, Intent intent) {

    Log.d("ScreenReceiver Action:",intent.getAction());

    Calendar c = Calendar.getInstance(); 
    m_seconds = c.get(Calendar.SECOND);
    m_minutes = c.get(Calendar.MINUTE);
    m_hours = c.get(Calendar.HOUR);

    for (BroadcastReceiverListener listener:listeners){
           listener.onReceive(m_hours, m_minutes, m_seconds);
        }
}


public static void addBroadcastReceiveListener (BroadcastReceiverListener listener){
    if(!listeners.contains(listener)){
        listeners.add(listener);
    }
}

public void removeBroadcastReceiveListener (BroadcastReceiverListener listener){
    if(listeners.contains(listener)){
        listeners.remove(listener);
    }
}

これがマニフェストの宣言です(アプリケーションの子)

<receiver android:name=".RegisterListener"></receiver>

編集: これは私が追加しようとしたフィルターです( onReceive() 内)

    IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
    BroadcastReceiver mReceiver = new RegisterListener();
    registerReceiver(mReceiver, filter);

エラーが発生します:

The method registerReceiver(BroadcastReceiver, IntentFilter) is undefined for the type RegisterListener
4

2 に答える 2

12

常にリッスンしたい場合は、次ACTION_USER_PRESENTを試してください。

<receiver android:name=".RegisterListener">
    <intent-filter>
        <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
</receiver>

説明

The method registerReceiver(BroadcastReceiver, IntentFilter) is undefined for the type RegisterListener

registerReceiver()たとえば、Context とともに使用する必要がありますcontext.registerReceiver(...)しかし:

これは私が追加しようとしたフィルターです( onReceive() 内)

受信者を登録するまで実行されないため、受信者を内部に登録することは意味がありません...したがって、それは決して起こりません。 次のように、このコードをアクティビティに入れることができます。onReceive()onReceive()onCreate()

IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
BroadcastReceiver mReceiver = new RegisterListener();
registerReceiver(mReceiver, filter);

これは、アプリが既に実行されてACTION_USER_PRESENT いる間のみリッスンします。

于 2013-03-29T16:05:57.967 に答える