0

別のアクティビティから受信機を登録解除するのに問題がありました。ここにあります:

起動中のアクティビティ 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 は登録解除されず、まだリッスンしています。私のエラーが参照/呼び出しを行うことにあると確信しています。しかし、私はそれを正しく行う方法がわかりません:/

ここで何が欠けていますか?誰かが私を助けることができますか?

4

3 に答える 3

1

私はこのようなことを成功裏に試しました。これが役立つかどうかを確認してください。
HEADSETTESTACTIVITY.JAVA
`public class HeadsettestActivity extends Activity { /** アクティビティが最初に作成されたときに呼び出されます。*/ ヘッドセットコネクタレシーバー r;

static HeadsettestActivity activity;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    activity=this;
    Log.d("Inside activity ", "before broadcast reciever registered");
    r = new Headsetconnectorreciever();
    registerReceiver(r, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
    Log.d("Inside activity ", "after broadcast reciever registered");
}
public  void unregister() {
    try {
        if(r!=null){
            unregisterReceiver(r);
            Log.i("HeadsettestActivity","Inside unregister ");
        }
    } catch (NullPointerException e) {
        e.printStackTrace();
    }       
    if (r == null) {
        Log.i("HeadsettestActivity","unregistered PowerButtonReceiver!");
    }
}

}`

Headsetconnectorreciever
`パブリック クラス Headsetconnectorreciever extends BroadcastReceiver { private boolean headsetConnected = false;

@Override
public void onReceive(Context context, Intent intent) {
    Log.d("Inside broadcast reciever ", "Inside onrecieve");
    // TODO Auto-generated method stub
    if (intent.hasExtra("state")){
         Log.d("Inside broadcast reciever ", "hasstate");
           if (headsetConnected && intent.getIntExtra("state", 0) == 0){
            headsetConnected = false;
            Log.d("Inside broadcast reciever ", "disconnected");
           Toast.makeText(context, "Headset is disconnected", Toast.LENGTH_SHORT).show();

           }
           else if (!headsetConnected && intent.getIntExtra("state", 0) == 1){
               Log.d("Inside broadcast reciever ", "disconnected");
            headsetConnected = true;
            Intent intent2=new Intent(context, ActivityB.class);
            context.startActivity(intent2);

           }
    }
}

}`

そして最後に私のACTIVITY B

public class ActivityB extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Toast.makeText(getApplicationContext(), "Headset is connected", Toast.LENGTH_SHORT).show();
    HeadsettestActivity a = HeadsettestActivity.activity ;
    a.unregister();


}

}

コードは実際に機能しました。

于 2013-09-02T14:31:13.883 に答える