android – BroadcastReceiver onReceive()在动态注册时不调用

前端之家收集整理的这篇文章主要介绍了android – BroadcastReceiver onReceive()在动态注册时不调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当BroadcastReceiver在Manifest中注册调用函数“onReceive”,但如果动态注册则不调用.

有效的代码如下:

@H_403_4@public class EyeGesture extends BroadcastReceiver { //Eye Gesture private static IntentFilter eyeGestureIntent; private static Context eyeGestureContext; private static StringBuilder gestureInfo = null; private static BroadcastReceiver broadcastReceiver; // public void startEyeListening() { //Eye Gesture //} @Override public void onReceive(Context context,Intent intent) { // this = context; if (intent.getStringExtra("gesture").equals("WINK")) { Log.e("WINKED ",""); }else { Log.e("SOMETHING","is detected " + intent.getStringExtra("gesture")); } //Disable Camera Snapshot // abortBroadcast(); } public void stopEyeListening() { eyeGestureContext.unregisterReceiver(broadcastReceiver); eyeGestureIntent = null; eyeGestureContext = null; gestureInfo = null; } }

下面是清单文件

@H_403_4@<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.inno.inno.glassplugin" > <uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainFunct" android:icon="@drawable/ic_glass_logo" android:label="@string/title_activity_main_funct" > <intent-filter> <action android:name="com.google.android.glass.action.VOICE_TRIGGER" /> </intent-filter> <Meta-data android:name="com.google.android.glass.VoiceTrigger" android:resource="@xml/voice_trigger" /> </activity> <receiver android:name="com.inno.inno.glassplugin.EyeGesture"> <intent-filter> <action android:name="com.google.android.glass.action.EYE_GESTURE" /> </intent-filter> </receiver> </application> </manifest>

问题是动态注册时不会调用“onReceive”.我必须以动态的方式做到这一点.
下面是不工作代码代码.

@H_403_4@public class EyeGesture extends Activity { //Eye Gesture IntentFilter eyeGestureIntentFilter; Context eyeGestureContext; BroadcastReceiver broadcastReceiver; public EyeGesture(){ Log.e("CONSTRUCTOR ",""); eyeGestureContext = MainFunct.getCurrentContext(); eyeGestureIntentFilter = new IntentFilter("com.google.glass.action.EYE_GESTURE"); eyeGestureIntentFilter.setPriority(1000); startRunning(); } void startRunning(){ eyeGestureContext.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context,Intent intent) { Log.e("Received "," Something"); } },eyeGestureIntentFilter); } @Override public void onResume(){ super.onResume(); } @Override public void onPause(){ super.onPause(); unregisterReceiver(broadcastReceiver); } public void stopEyeListening() { eyeGestureContext.unregisterReceiver(broadcastReceiver); eyeGestureIntentFilter = null; eyeGestureContext = null; } }

另外,我不想从这个类扩展BroadcastReceiver.如果动态注册,为什么我没有收到任何内容.我还从Manifest中删除了以下行:

@H_403_4@<receiver android:name="com.inno.inno.glassplugin.EyeGesture"> <intent-filter> <action android:name="com.google.android.glass.action.EYE_GESTURE" /> </intent-filter> </receiver>

但仍然没有用.没有抛出错误或异常.
我究竟做错了什么?

解决方法

你使用明确的意图吗?似乎动态注册的广播接收器无法接收显式意图.隐含的意图工作.
供参考: http://streamingcon.blogspot.com/2014/04/dynamic-broadcastreceiver-registration.html

如果问题不是显式意图,但如果您使用LocalBroadcastManager进行sendBroadcast,那么请确保registerReceiver也被称为LocalBroadcastManager而不是Context

猜你在找的Android相关文章