別のアクティビティから受信機を登録解除するのに問題がありました。ここにあります:
起動中のアクティビティ A で BroadcastReceiver を起動/登録します。
アクティビティ A:
public class ActivityA extends Activity {
private PowerButtonReceiver mPowerButtonReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (getPowerButtonReceiver() == null)
{
mPowerButtonReceiver(new PowerButtonReceiver());
registerReceiver(mPowerButtonReceiver, new IntentFilter("android.intent.action.SCREEN_ON"));
}
}
public void unregister() {
try {
unregisterReceiver(mPowerButtonReceiver);
} catch (NullPointerException e) {
e.printStackTrace();
}
if (mPowerButtonReceiver == null) {
Log.i(TAG,"unregistered PowerButtonReceiver!");
}
}
次に、レシーバーの onReceive() メソッド内でアクティビティ B を開始します。この後、アクティビティ B の onCreate() メソッドに足を踏み入れ、自分の作業を行い、onCreate() の最後で BroadcastReceiver の登録を解除します。
アクティビティ B: (--> android:launchMode="singleTop")
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
[...do my stuff...]
//un-register PowerButtonReceiver --> call in Activity A
MainActivity m = new MainActivity();
m.getParent();
m.unregister();
}
私の最後の行は unregister() の呼び出しを開始しますが、Receiver は null であり、参照を取得していないようです。また、Receiver は登録解除されず、まだリッスンしています。私のエラーが参照/呼び出しを行うことにあると確信しています。しかし、私はそれを正しく行う方法がわかりません:/
ここで何が欠けていますか?誰かが私を助けることができますか?