BroadCastReceiverを登録できません
-
27-10-2019 - |
質問
Broadcastreceiverを登録することはできません。コードを実行しようとするたびに、ログキャットに「レシーバーを登録できない」を表示します。
これが私のレシーバーを登録している私のコードです:
public class Preferences extends PreferenceActivity {
private Button button;
ListPreference lp;
private Context context;
private long duration;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
context = this;
lp = (ListPreference) findPreference("autoduration");
final Intent intent = new Intent(context, BackService.class);
lp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
String newSelection = newValue.toString();
int index = lp.findIndexOfValue(newSelection);
stopService(intent);
if (index == 0) {
duration = 15000;
} else if (index == 1) {
duration = 12000;
} else if (index == 2) {
duration = 10000;
} else if (index == 3) {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver receiver = new ScreenReceiver();
registerReceiver(receiver, filter);
}
intent.putExtra("duration", duration);
startService(intent);
return true;
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
これが私のレシーバーです:
public class ScreenReceiver extends BroadcastReceiver {
public static boolean screenOn = true;
private static final String TAG = "ScreenReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOn = true;
Log.e(TAG, "I am receiver");
} else {
screenOn = false;
}
}
}
解決
登録コードは、Unregisterが発生する前に2回以上呼び出すことができます。それが問題ではないと確信していますか?
他のヒント
所属していません StackOverflow