我的应用程序有一个带3个片段选项卡的操作栏。 在第二个片段中,我注册并取消注册BroadcastReceiver。 我在onPause注销接收器,并在onCreateView和onResume注册它。 getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 和 getActivity().unregisterReceiver(batteryInfoReceiver); 1)两次注册相同的接收者(在onCreateView和onResume中)是否可以?(是否无害?) 2)在onResume中注册接收器是否足够?
在我的项目中,我使用BroadcastReceiver作为长时间运行的线程的callback(例如,通知活动下载已完成,并从Worker Thread发送一些响应数据,以便活动可以向用户显示相应的消息。 )。 要使用BroadcastReceiver我必须小心地注册和注销广播接收器,每次我使用它时,还必须关心什么消息发送esspecialy当我使用这种方法更多不同的行动(如下载,使WebService调用等等..)。 也通过广播的意图发送自定义对象我还需要使对象Parcelable 。 与这种方法不同的是,我也看到了callback方法,它似乎比我使用的方法简单。 callback方法是简单的接口方法的实现,可以用来实现像应用程序消息传递中的BroadcastRecaiver一样的效果。 这种方法并不需要Parcelable实现来返回复杂的对象,它不使用像BroadcastReceiver这样的键。我认为不好的部分是,我需要检查callback对象的空值,然后再调用callback方法。并确保我正在UI线程上执行的代码,以便我可以更新UI没有错误。 好吧,我希望你明白我的意思是说:)。 现在的问题是你认为callback方法比单纯使用单一应用程序时的BroadcastReceiver方法更好(更轻,更干净,更快..)吗? (请注意,我不使用Android Service的后台工作..只是AsyncTask和Thread ) 谢谢!
我的应用程序中有一个服务和广播接收器,但是如何直接从广播接收器启动服务? 运用 startService(new Intent(this, MyService.class)); 在广播接收机不工作,有什么想法? 谢谢! 编辑: context.startService(..); 作品,我忘了上下文部分
我有一个经常被调用的BroadcastReceiver,我注意到有很多人使用 android: process =":remote" 在他们的接收器。 矿井是用来检查一些事情,如果条件匹配,然后激活一个警报。 我的问题是我应该使用我上面张贴在我的清单中的行吗? 如果是的话,这样做的好处是什么?
Facebook的Messenger,其优先级为2147483647 ,他们的android.provider.Telephony.SMS_RECEIVED广播接收器,在他们的清单中声明。 (很遗憾,我们不得不遵循文档的最高优先级为1000的标准,因为其他应用程序制定了自己的规则) 我明白,如果我的优先级也设置为2147483647高水平,那么我必须首先安装我的应用程序才能优先于任何“关系”。 没问题,我做了一个屏幕提醒用户哪些应用程序可能需要卸载,然后在我的应用程序正常运行后重新安装。 但是,这里的问题 – 一切工作正常,但只要手机重新启动,“信使”开始优先于我的应用程序。 我到处看看他们怎么可以做这个黑魔法。 他们如何做到这一点? 在我的应用程序首次安装后,如何获得重新启动后的优先级? 到目前为止唯一想到的是,当注册广播接收机时,包名是在启动时按字母顺序排列的。 COM。 f acebook> com。 s trikeforcezero 我正要尝试注册我的广播接收机android.intent.action.BOOT_COMPLETED但我有一种感觉,这将无法正常工作。 Messenger还有另一个“低价值的广播接收器” android.provider.Telephony.SMS_RECEIVED设置为-1
我基本上想做一个意图,并将其传递给我的BroadcastReceiver的onReceive()服务。 到目前为止,我总是使用View.getContext(),但在这里,我卡住了。 我怎样才能得到的上下文,所以我可以使用public Intent (Context packageContext, Class<?> cls) ?
我正在尝试开发一个应用程序,防止用户无需密码而到达指定的应用程序。 场景是… 用户点击“电子邮件”应用程序(例如) 我的应用检测到应用的启动 我的应用程序确认这是“电子邮件”应用程序 我的应用程序在顶部打开一个视图,要求input密码 用户input密码,如果正确,我的应用程序将消失,将“电子邮件”应用程序放在顶部 我可以做剩下的部分,只是第2部分令我感到困惑,而且经过多天阅读广播内容等,并试图在我的试验项目中听“android.intent.action.MAIN”等,我不能似乎检测到除我以外的应用程序启动。 谁能帮忙? 我是否以正确的方式去寻找新的应用程序,广播意图开始,还是应该阅读系统日志中的新意图,或在本地代码中做些什么? 任何指针都会有帮助,即使你不能完全回答,我也可以做更多的研究。 非常感谢。 伊恩
我有一个Android活动,需要抓住两个不同的广播。 我目前的做法是在活动中有一个单一的BroadcastReceiver ,并用它来捕获广播: public class MyActivity extends Activity { private MyActivity.BroadcastListener mBroadcastListener; private boolean mIsActivityPaused = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylayout); // Create the broadcast listener and register the filters mIsActivityPaused = false; mBroadcastListener = new BroadcastListener(); IntentFilter filter = new IntentFilter(); filter.addAction(Params.INTENT_REFRESH); filter.addAction(Params.INTENT_UPDATE); registerReceiver(mBroadcastListener, filter); } @Override protected void onResume() […]
在我的开发人员控制台中,人们不断报告我无法在任何手机上重现的错误。 有一个人留言说当他们试图打开我的电池服务的设置屏幕时,他得到了这个消息。 正如您从错误中可以看到的那样,接收方没有注册。 java.lang.RuntimeException: Unable to stop service .BatteryService@4616d688: java.lang.IllegalArgumentException: Receiver not registered: com.app.notifyme.BatteryService$BatteryNotifyReceiver@4616d9d0 at android.app.ActivityThread.handleStopService(ActivityThread.java:3164) at android.app.ActivityThread.access$3900(ActivityThread.java:129) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2173) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:143) at android.app.ActivityThread.main(ActivityThread.java:4701) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalArgumentException: Receiver not registered:com..BatteryService$BatteryNotifyReceiver@4616d9d0 at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:805) at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:859) at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331) at com.app.notifyme.BatteryService.onDestroy(BatteryService.java:128) at android.app.ActivityThread.handleStopService(ActivityThread.java:3150) 我注册在我的onCreate […]
我正在开发一个android广播接收器来检查互联网连接。 问题是我的广播接收器被调用了两次。 我希望它只在networking可用时才被调用。 如果不可用,我不需要通知。 这是广播接收机 public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { final ConnectivityManager connMgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr .getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo mobile = connMgr .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (wifi.isAvailable() || mobile.isAvailable()) { // Do something Log.d("Network Available ", "Flag No 1"); } […]