如何知道我的Android BroadcastReceiver是否已注册

如何知道我的Android BroadcastReceiver是否已注册,android,broadcastreceiver,android-sdcard,android-debug,Android,Broadcastreceiver,Android Sdcard,Android Debug,我正在使用BroadcastReceiver执行与sd卡事件(如装载/卸载)相关的操作 现在的情况是我的接收器坏了。我的应用程序只有一个广播接收器,没有GUI,没有活动,没有布局。现在我想调试代码,以便在安装应用程序时打印一条消息。因此,我正在寻找一种类似于onCreate()的方法,该方法支持服务和活动。我在这里读过广播电台的官方文件 我找不到这样的方法。那么,我如何知道我的android BroadcastReceiver是否已注册。无论我的android BroadcastReceive

我正在使用BroadcastReceiver执行与sd卡事件(如装载/卸载)相关的操作

现在的情况是我的接收器坏了。我的应用程序只有一个广播接收器,没有GUI,没有活动,没有布局。现在我想调试代码,以便在安装应用程序时打印一条消息。因此,我正在寻找一种类似于
onCreate()
的方法,该方法支持服务和活动。我在这里读过广播电台的官方文件

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

这是我的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
的对象,并调用其
onReceive()
方法


您只需将断点或日志消息作为第一条语句放入
onRecieve()
方法中,查看它是否被调用。

在这种情况下,您没有显式注册接收者,而是在清单中声明它,无需再次注册它。将调用清单中具有匹配接收器筛选器的所有组件(包服务跟踪这些内容)。在这种情况下,将实例化类
SDCardStateChangeListener
的对象,并调用其
onReceive()
方法


您只需将断点或日志消息作为第一条语句放在
onreceive()
方法中,查看是否调用它。

如果您有
android:exported=“false”
,您将永远不会收到从您自己的应用程序外部发送的任何广播。

如果您有
android:exported=“false”
您将永远不会收到从您自己的应用程序外部发送的任何广播。

先生的意思是您试图说,如果我希望我的广播接收器是动态的,那么只有我们才能注册它。@Nikhil您可以通过调用
上下文的
registerReceiver()
方法来注册它,您可以通过上下文的
unregisterReceiver()
方法取消注册。另一方面,在安装应用程序时,清单中声明的接收者默认放置在系统注册表中,这些接收者不能在运行中注销。那么,先生,在清单中声明时默认注册的接收者是真的吗?@Nikhil是,你可以这样说。所以我无法得到证明。先生的意思是,如果我希望我的广播接收器是动态的,那么只有我们才能注册它。@Nik如果你通过调用
上下文的
registerReceiver()
方法注册,你可以通过
unregisterReceiver()取消注册
上下文的方法。另一方面,在安装应用程序时,清单中声明的接收者默认放置在系统注册表中,这些接收者不能在运行中注销。那么,先生,如果说他们在清单中声明时默认注册,这是真的吗?@Nikhil是的,你可以这样说。因此,我无法得到证明。
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");

        }
    }

}