如何知道我的Android广播接收器是否被登记

问题描述:

我使用了与SD卡的事件,如安装/卸载操作的广播接收器。如何知道我的Android广播接收器是否被登记

现在情况是我的接收器不工作。我的应用程序只有一个BroadcastReceiver没有GUI,没有活动,没有布局。所以现在我想调试代码,所以我想在安装应用程序时打印一条消息。所以我正在寻找像服务和活动所具有的onCreate()这样的方法。我已阅读广播接收器的正式文件在这里

http://developer.android.com/reference/android/content/BroadcastReceiver.html

我无法找到这样的方法。那么如何才能知道我的android BroadcastReceiver是否已注册。我必须使用哪种方法获取信息,无论我的android BroadcastReceiver是否已注册。有没有其他的方式可以让我的muot接收器注册,并在帐篷不工作。

这里是我的AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.broadcastreceiversdcardinsertionremoval" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver 
      android:name="SDCardStateChangeListener" 
      android:enabled="true" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> 
       <action android:name="android.intent.action.MEDIA_REMOVED" /> 
       <action android:name="android.intent.action.MEDIA_EJECT" /> 
       <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> 

       <data android:scheme="file" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

和我SDCardStateChangeListener.java延伸广播接收器

package com.example.broadcastreceiversdcardinsertionremoval; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class SDCardStateChangeListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equalsIgnoreCase(Intent.ACTION_MEDIA_REMOVED) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_UNMOUNTED) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_BAD_REMOVAL) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_EJECT)) { 

      Log.d("action", "Sd Card Event"); 

     } 
    } 

} 

在这种情况下,你都没有明确注册接收器,你是宣布它在清单中,不需要注册再来一次。清单中有一个匹配的接收器过滤器的所有组件都会被调用(Package服务会跟踪这些东西)。在这种情况下,将会实例化类SDCardStateChangeListener的一个对象,并调用它的onReceive()方法。

你可以把一个断点或日志消息作为第一个语句里面onRecieve()方法,看它是否被行使或不行。

+0

爵士意味着你想说如果我希望我的BroadcastReceiver是动态的,那么只有我们会注册它。 – 2013-04-27 11:34:20

+0

@Nikhil你通过调用Context的registerReceiver()方法来注册,你可以通过'unregisterReceiver()'方法取消注册上下文。另一方面,在清单中声明的​​接收者在安装应用程序时默认放置在系统的注册表中,这些无法在移动中未注册。 – 2013-04-27 11:40:54

+0

所以,先生是真实的说,他们默认情况下登记时声明在清单。 – 2013-04-27 11:42:36

如果你有android:exported="false"你将永远不会收到来自你自己的应用发送任何广播。