2013-02-11 77 views
1
取消注册BroadcastReceiver

这可能是一个非常简单的问题,但我似乎从一天就挂断了这些。所以这里是问题:如何从活动

如何注销从AndroidManifest文件注册的Activity中的BroadcastReceiver? 下面是代码::

<receiver android:name=".PhoneCallReceiver"> 
     <intent-filter > 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

我熟悉的功能

公共无效unregisterReceiver(广播接收器接收器)

,但如果没有从该活动注册它抛出一个异常与

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.PHONE_STATE"); 
registerReceiver(mybroadcast, filter); 
+0

尝试从应用程序对象中注销。我认为清单中的收件人已注册到应用程序中。 – 2013-02-11 06:00:44

+0

@ GabeSechan - 我没有得到它...你能给我提供一些代码..? – 2013-02-11 06:01:57

+0

getApplication()。unregisterReceiver(receiver);应用程序对象还允许您注册接收器并取消注册。如果您通过清单注册接收方,它将注册到应用程序上下文中,而不是活动上下文。 – 2013-02-11 06:04:11

回答

4

T O禁止在manifest中定义一个receiver,使用以下:

PackageManager pm = context.getPackageManager(); 
ComponentName component = new ComponentName(context, PhoneCallReceiver.class) 
pm.setComponentEnabledSetting(component , PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP); 
+0

@ iTech-不需要提及我需要取消注册哪个动作接收者...例如:这里是'android.intent.action.PHONE_STATE'! – 2013-02-11 06:20:58

+0

您正在指定接收器类“PhoneCallReceiver.class”,它足以确定哪个接收器禁用 – iTech 2013-02-11 06:24:39

+0

优秀的代码..!作品完美! – 2013-02-11 06:52:36

0

尝试这种情况:

public void onResume() 
    { 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("android.intent.action.PHONE_STATE"); 
    registerReceiver(mybroadcast, filter); 

    } 

    public void onPause() 
    { 
    unregisterReceiver(mybroadcast); 
    } 
+0

如果我从AndroidManifest.xml注册它,我无法从Activity注册它! – 2013-02-11 06:53:43

+0

请查看http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/。 – user1744952 2013-02-11 07:07:00