Android 启动和停止广播接收器

Android 启动和停止广播接收器,android,Android,我想从两个按钮启动和停止广播接收器。 我已经在两个按钮侦听器中为此编写了代码 代码如下:- 在startButton中,我编写了注册接收者的代码,如下所示 startCallBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub

我想从两个按钮启动和停止广播接收器。 我已经在两个按钮侦听器中为此编写了代码

代码如下:-

在startButton中,我编写了注册接收者的代码,如下所示

     startCallBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            startCallBtn.setVisibility(View.INVISIBLE);
            stopCallBtn.setVisibility(View.VISIBLE);


            //register call receiver.
            registerReceiver(callReceiver, new IntentFilter(
            "android.intent.action.CALL"));
           System.out.println("Registered Call Receiver Perfectly");
        }
    });
在一个停止按钮中,我将停止接收器的调用写为

   stopCallBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            stopCallBtn.setVisibility(View.INVISIBLE);
            startCallBtn.setVisibility(View.VISIBLE);
            stopService(new Intent(MainActivity.this, SpeakOut.class));
            FileOutputStream fos;

          //Unregister sms receivers
            unregisterReceiver(callReceiver);
            System.out.println("Unregistered Call Broadcast Receiver");
        }
    });

当新呼叫在清单中接收时,侦听器仍在呼叫

 <receiver android:name="your receiver name">

您可以将此代码用于
启用
禁用
广播接收器
。我希望这将对您有所帮助

public void enableBroadcastReceiver(View view)
{

    ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class);
    PackageManager pm = this.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
    Toast.makeText(this, "Enabled broadcast receiver", Toast.LENGTH_SHORT).show();
   }
   /**
    * This method disables the Broadcast receiver registered in the AndroidManifest file.
    * @param view
    */
   public void disableBroadcastReceiver(View view){
    ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class);
    PackageManager pm = this.getPackageManager();
        pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
    Toast.makeText(this, "Disabled broadcst receiver", Toast.LENGTH_SHORT).show();
   }   

确保您正在调用与您调用的
registerReceiver()
对象相同的
receiver
对象的
unregisterReceiver()
。如果在释放前为同一接收器创建新对象,则已注册的旧接收器对象不能再注销,因为您已为其分配了新内存块

例如,请执行以下操作:

MyBroadcastReceiver receiver = new MyBroadCastReceiver();
registerReceiver(receiver);
unregisterReceiver(receiver);

receiver = new MyBraodCastReceiver();

您是否将此接收器也放在Manifest.xml中?
MyBroadcastReceiver receiver = new MyBroadCastReceiver();
registerReceiver(receiver);
unregisterReceiver(receiver);

receiver = new MyBraodCastReceiver();