BroadcastReceiver 在我的 android 应用程序中不工作
BroadcastReceiver is not working in my android app
我有一个简单的 Android 应用程序,它包含一个 broadcastreceiver class 作为 MainActivity 中的内部 class。代码如下。
private class MyReceiver extends BroadcastReceiver {
private Intent receivedIntent;
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyTag","onReceive function....!!!!!");
receivedIntent = intent;
}
}
根据一些标准教程,我可以在清单文件中为接收器设置一个静态条目。
<receiver
android:name = ".MyReceiver"
android:enabled = "true">
<intent-filter>
<action android:name = "android.intent.action.ACTION_SCREEN_OFF"/>
<action android:name = "android.intent.action.ACTION_SCREEN_ON"/>
</intent-filter>
</receiver>
但在我将以下行放入 MainActivity 之前它不起作用。
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
DataWriteReceiver dataWriteReceiver = new DataWriteReceiver();
this.registerReceiver(dataWriteReceiver,filter);
即使在清单文件中输入后,我是否还需要执行 registerReceiver?感谢任何帮助。
但是在关闭我的应用程序时我遇到了另一个问题。
这是 ADM 显示的错误。
11-02 23:01:10.178: E/ActivityThread(11121): Activity com.sony.datamoduledesignproject.MainActivity has leaked IntentReceiver com.sony.datamoduledesignproject.MainActivity$DataWriteReceiver@2911ab22 that was originally registered here. Are you missing a call to unregisterReceiver()?
11-02 23:01:10.178: E/ActivityThread(11121): android.app.IntentReceiverLeaked: Activity com.sony.datamoduledesignproject.MainActivity has leaked IntentReceiver com.sony.datamoduledesignproject.MainActivity$DataWriteReceiver@2911ab22 that was originally registered here. Are you missing a call to unregisterReceiver()?
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:970)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:771)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:2014)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1994)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1988)
11-02 23:01:10.178: E/ActivityThread(11121): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:503)
11-02 23:01:10.178: E/ActivityThread(11121): at com.sony.datamoduledesignproject.MainActivity.intentGenerator(MainActivity.java:93)
11-02 23:01:10.178: E/ActivityThread(11121): at com.sony.datamoduledesignproject.MainActivity.onCreate(MainActivity.java:78)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.Activity.performCreate(Activity.java:6374)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2752)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2873)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.access0(ActivityThread.java:181)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482)
11-02 23:01:10.178: E/ActivityThread(11121): at android.os.Handler.dispatchMessage(Handler.java:102)
11-02 23:01:10.178: E/ActivityThread(11121): at android.os.Looper.loop(Looper.java:145)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.main(ActivityThread.java:6145)
11-02 23:01:10.178: E/ActivityThread(11121): at java.lang.reflect.Method.invoke(Native Method)
11-02 23:01:10.178: E/ActivityThread(11121): at java.lang.reflect.Method.invoke(Method.java:372)
11-02 23:01:10.178: E/ActivityThread(11121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
11-02 23:01:10.178: E/ActivityThread(11121): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
此处提到的 MainActivity 中的错误是在 registerReceiver() 调用中,如下所示,
DataWriteReceiver dataWriteReceiver = new DataWriteReceiver();
this.registerReceiver(dataWriteReceiver,filter);
总结是MainActivity泄露了IntentReceiver,我需要unregisterReceiver()吗?
请你帮帮我。
很多人问过这种问题,我刚才搜索过这种问题,但是 none 的答案显示我们这里 this.So 的官方答案
http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON
http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF
Remember:The Android official documentation will give you better basic understanding of the Android,not sometimes,but ALMOST everytime.
我有一个简单的 Android 应用程序,它包含一个 broadcastreceiver class 作为 MainActivity 中的内部 class。代码如下。
private class MyReceiver extends BroadcastReceiver {
private Intent receivedIntent;
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyTag","onReceive function....!!!!!");
receivedIntent = intent;
}
}
根据一些标准教程,我可以在清单文件中为接收器设置一个静态条目。
<receiver
android:name = ".MyReceiver"
android:enabled = "true">
<intent-filter>
<action android:name = "android.intent.action.ACTION_SCREEN_OFF"/>
<action android:name = "android.intent.action.ACTION_SCREEN_ON"/>
</intent-filter>
</receiver>
但在我将以下行放入 MainActivity 之前它不起作用。
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
DataWriteReceiver dataWriteReceiver = new DataWriteReceiver();
this.registerReceiver(dataWriteReceiver,filter);
即使在清单文件中输入后,我是否还需要执行 registerReceiver?感谢任何帮助。
但是在关闭我的应用程序时我遇到了另一个问题。 这是 ADM 显示的错误。
11-02 23:01:10.178: E/ActivityThread(11121): Activity com.sony.datamoduledesignproject.MainActivity has leaked IntentReceiver com.sony.datamoduledesignproject.MainActivity$DataWriteReceiver@2911ab22 that was originally registered here. Are you missing a call to unregisterReceiver()?
11-02 23:01:10.178: E/ActivityThread(11121): android.app.IntentReceiverLeaked: Activity com.sony.datamoduledesignproject.MainActivity has leaked IntentReceiver com.sony.datamoduledesignproject.MainActivity$DataWriteReceiver@2911ab22 that was originally registered here. Are you missing a call to unregisterReceiver()?
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:970)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:771)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:2014)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1994)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1988)
11-02 23:01:10.178: E/ActivityThread(11121): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:503)
11-02 23:01:10.178: E/ActivityThread(11121): at com.sony.datamoduledesignproject.MainActivity.intentGenerator(MainActivity.java:93)
11-02 23:01:10.178: E/ActivityThread(11121): at com.sony.datamoduledesignproject.MainActivity.onCreate(MainActivity.java:78)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.Activity.performCreate(Activity.java:6374)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2752)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2873)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.access0(ActivityThread.java:181)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482)
11-02 23:01:10.178: E/ActivityThread(11121): at android.os.Handler.dispatchMessage(Handler.java:102)
11-02 23:01:10.178: E/ActivityThread(11121): at android.os.Looper.loop(Looper.java:145)
11-02 23:01:10.178: E/ActivityThread(11121): at android.app.ActivityThread.main(ActivityThread.java:6145)
11-02 23:01:10.178: E/ActivityThread(11121): at java.lang.reflect.Method.invoke(Native Method)
11-02 23:01:10.178: E/ActivityThread(11121): at java.lang.reflect.Method.invoke(Method.java:372)
11-02 23:01:10.178: E/ActivityThread(11121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
11-02 23:01:10.178: E/ActivityThread(11121): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
此处提到的 MainActivity 中的错误是在 registerReceiver() 调用中,如下所示,
DataWriteReceiver dataWriteReceiver = new DataWriteReceiver();
this.registerReceiver(dataWriteReceiver,filter);
总结是MainActivity泄露了IntentReceiver,我需要unregisterReceiver()吗?
请你帮帮我。
很多人问过这种问题,我刚才搜索过这种问题,但是 none 的答案显示我们这里 this.So 的官方答案
http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON
http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF
Remember:The Android official documentation will give you better basic understanding of the Android,not sometimes,but ALMOST everytime.