簡體   English   中英

廣播接收器“接收”方法沒有被調用嗎?

[英]Broadcast Receiver “on recieve” method not been called?

我有三個活動
在活動A中,我注冊了廣播接收器,然后從那里進入活動B,然后進入活動C。
最后是活動c的onBackPressed ,我發送廣播,但未調用onReceive

我的第一個活動

    private MyBroadCastReceiver myRecevier = new MyBroadCastReceiver();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Submit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent frag=new Intent(MainActivity.this,Activity2.class);
                //frag.putExtra("Limit", foo);
                startActivity(frag);
                //  }
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        //Register the activity to the broadcast receiver
        registerReceiver(myRecevier, new IntentFilter(MyBroadCastReceiver.ACTION));
    }

    @Override
    protected void onPause() {
        super.onPause();
        //Unregister the activity from the broadcast receiver. Good practice ;)
        unregisterReceiver(myRecevier);
    }

    public class MyBroadCastReceiver extends BroadcastReceiver{

        public static final String ACTION = "com.uberrueco.mybroadcastreceiver.receivers";
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("MyBroadCastReceiver", "received");
            Toast.makeText(context,"Received "+intent.getStringExtra("editText"), Toast.LENGTH_LONG).show();

        }
    }
}

第二項活動只不過是一項活動3

第三活動

    public class Activity3 extends Activity  {
    EditText etReceivedBroadcast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity3);
        etReceivedBroadcast = (EditText) findViewById(R.id.etReceivedBroadcast);
    }
    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        Intent intent = new Intent(this, MyIntentService.class);
        intent.putExtra("editText", etReceivedBroadcast.getText().toString());
        startService(intent);
    }
}

最后是我的IntentService

    public class MyIntentService extends IntentService{

    public MyIntentService(){
        super("MyIntentService");
    }

    public MyIntentService(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        Log.d("MyIntentService", "handling intent...");

        //Intent created for broadcasting
        Intent intentBroadCast = new Intent();

        //Filter the broadcast to the action desired
        intentBroadCast.setAction(MyBroadCastReceiver.ACTION); 
        intentBroadCast.putExtra("editText", intent.getStringExtra("editText"));
        //Send the broadcast :D
        sendBroadcast(intentBroadCast);
    }
}

您正在MainActivity onPause中調用unregisterReceiver 因此,您沒有收到廣播。

將注冊移到MainActivity的onCreate ,將其注銷到MainActivity的onDestroy

如果您的onHandleIntent()被調用,那么您應該嘗試一下。

    Intent intentBroadCast = new Intent(MyBroadCastReceiver.ACTION);

    intentBroadCast.putExtra("editText", intent.getStringExtra("editText"));
    //Send the broadcast :D
    sendBroadcast(intentBroadCast);

進行如下代碼所示的更改

private MyBroadCastReceiver myRecevier = new MyBroadCastReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

   //Register the activity to the broadcast receiver
   this.registerReceiver(myRecevier, new IntentFilter(MyBroadCastReceiver.ACTION));

    Submit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent frag=new Intent(MainActivity.this,Activity2.class);
            //frag.putExtra("Limit", foo);
            startActivity(frag);
            //  }
        }
    });
}

@Override
protected void onResume() {
    super.onResume();


}

@Override
protected void onDestroy() {
    super.onDestroy();
    //Unregister the activity from the broadcast receiver. Good practice ;)
    this.unregisterReceiver(myRecevier);
}
@Override
protected void onPause() {
    super.onPause();
    //Unregister the activity from the broadcast receiver. Good practice ;)
    unregisterReceiver(myRecevier);
}



public class MyBroadCastReceiver extends BroadcastReceiver{

    public static final String ACTION = "com.uberrueco.mybroadcastreceiver.receivers";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("MyBroadCastReceiver", "received");
        Toast.makeText(context,"Received "+intent.getStringExtra("editText"), Toast.LENGTH_LONG).show();

    }
}
}

您需要像這樣使用this.unregisterReceiver()this.registerReceiver()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM