Articles of android broadcast

Broadcast Receiver类和registerReceiver方法

嗨,我想了解广播接收器,我经历了许多示例代码,但仍然有一些疑问。 我想知道何时必须扩展Broadcast Receiver类,何时应该使用registerReceiver()方法,何时应该为BroadcastReceiver创建对象。 在某些程序中,我遇到了正在使用的registerReceiver方法,但没有扩展Broadcast Receiver类。 我也想知道如何调用onReceive方法。 应该采用哪种方法? 这是registerReceiver方法: registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { …….. } } }, new IntentFilter(SENT)); 为BroadcastReceiver创建的对象: private BroadcastReceiver intentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { …………….. } };

用Greenrobot Eventbus替换广播接收器以触发基于事件的function和从服务到活动的数据传输是否合适?

我已经实现了一个服务,我处理状态更改(连接,断开连接,onServiceDiscoverd,onCharacteristicChange等)并通过gatt服务器从另一个设备接收数据。 我的问题是,使用Greenrobot Eventbus替换服务和活动之间的广播接收器能否有效地处理事件?

在Android 6.0上,Alarm Manager无法在后台运行

这是我的Activity代码, Long time = new GregorianCalendar().getTimeInMillis()+20000;//Setting alarm after 20 sec Intent intentAlarm = new Intent(“alarm”); intentAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intentAlarm.putExtra(“req_code”,10); PendingIntent pendingIntent = PendingIntent.getBroadcast(context,10, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); 这些是我在我的应用中拥有的所有权限, 这是我的BroadcastReceiver代码, @Override public void onReceive(Context context, Intent intent) { SharedPreferences sharedPreferences = context.getSharedPreferences( “mydata”, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean(“elligible”,true); editor.apply(); } 我在清单中注册了我的BroadcastReceiver […]

致命exception:android.app.RemoteServiceException:无法在android.os.Handler.dispatchMessage上传递广播

我在我的Android应用程序上使用广播消息(从io.socket我发送广播消息到我的活动页面)。 在某些设备上,三星SM-G950F和SM-A520F出现错误“ Fatal Exception: android.app.RemoteServiceException: can’t deliver broadcast ”。 我在Fabric crashlytics上遇到此错误,但我无法重现此问题。 这是我从Fabric获得的日志, Fatal Exception: android.app.RemoteServiceException: can’t deliver broadcast at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1813) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

Android广播接收器未接收意图

我有两个应用程序,我试图将一个意图从一个发送到另一个但是意图永远不会到达onReceive()但是这个问题只是一种方式。 第一个应用程序可以发送到第二个,但第二个不能发回信息。 我使用不同的意图动作从第二个发送到第一个,但否则它们是相同的。 为什么这可能不起作用的任何想法? 我已经尝试了所有我能想到的东西,并阅读了我在这里find的大部分post,但无济于事。 它没有崩溃,也没有给我任何迹象表明logcat中发生了什么,它什么也没做。 发送function private void sendFinishLog(String ID, String Cond) { Log.d(“me”, “send finish log”); Intent logIntent = new Intent(); logIntent.putExtra(“ID”, ID); logIntent.putExtra(“Cond”, Cond); logIntent.setAction(“com.me.intent.finishlog”); Log.d(“me”,”logIntent : ” + logIntent.toString() +logIntent.getExtras().toString()); sendBroadcast(logIntent); } 接受上课 public class LogReceiver extends BroadcastReceiver { public static ArrayList logData = new ArrayList(); private boolean found; static SimpleDateFormat […]

动态注册与BroadcastReceiver的静态注册

我们所有人都知道我们在两种types中注册BroadcastReceiver 1)Static Registration 2)Dynamic Registration 但我怀疑的是,当我们需要使用Static以及何时需要使用Dynamic ?

区分隐式广播接收器与清单中的显式广播接收器

根据Google提供的Android O迁移指南,大多数隐式广播意图不应在Manifest中注册(减去此处发现的一些例外情况),但显式广播意图保持不变。 我们希望将任何所需的广播从清单中移除。 但我们如何识别接收器是否隐含? 有一般规则吗? 以下是我们在清单中注册的广播示例。 我们应该只查看“action”标记,看看它是否列入白名单以便将其保留在清单中? 例如,“com.android.vending.INSTALL_REFERRER”意图未列入白名单。 我们应该在活动中注册吗? 如果是这样,它不会被解雇,因为当我们注册它时,应用程序已经安装? 当我试图理解广播接收器是隐式还是显式时,这让我感到困惑,因为我认为我只需要检查“动作”标签。

如何在Android中的服务类中实现BroadcastReceiver?

我需要在我创建的Service类中实现BroadcastReceiver: public class MyService extends Service 在这个类中,当用户按下实现sendBroadcas()的MyActivity类中的按钮时,我必须使用Thread – Sleep实现Simulation of Download。 我无法将Service类扩展为BroadcastReceiver,因为它已经扩展到Service。 任何人都可以帮我弄清楚如何实现这种机制? 谢谢

java.lang.SecurityException:Permission Denial:不允许仅在KitKat上发送广播android.intent.action.MEDIA_MOUNTED

我使用DownloadManager从我们的服务器上下载图像,我将文件放在externalFilesDir 。 我发送了广播意图,因为我不希望这些下载的图像出现在图库中。 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(“file://” + context.getExternalFilesDir(null)))); 我之前只在我的Galaxy S3 Jelly Bean 4.3上测试了这个并且它正在工作,但是当我在KitKat 4.4上测试它时它崩溃了应用程序。 有没有更好的方法可以不从DownloadManager下载的文件没有出现在电话库中? 堆栈跟踪 06-05 17:34:41.940: E/AndroidRuntime(15410): FATAL EXCEPTION: main 06-05 17:34:41.940: E/AndroidRuntime(15410): Process: com.walintukai.lfdate, PID: 15410 06-05 17:34:41.940: E/AndroidRuntime(15410): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=com.walintukai.lfdate (has extras) } in com.walintukai.lfdate.SocketIOService$1@42359f40 06-05 17:34:41.940: E/AndroidRuntime(15410): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:778) 06-05 17:34:41.940: E/AndroidRuntime(15410): at […]

如何停止占用麦克风

TL; DR:我的应用正在占用用户的麦克风。 当其他应用需要使用麦克风时,我可以自动将其关闭吗? 我有一个Android应用程序,有一些非常酷的麦克风function,类似于亚马逊Alexa,一直在后台服务。 问题是,我的应用程序占用了用户的麦克风,使其无法使用: 但是,这对我来说是一种糟糕的应用行为,我想尽力避免它。 当另一个应用程序请求使用麦克风时,是否可以通知我,以便我可以自动停止我的服务? PS:我正在使用Pocketsphinx库进行连续的背景语音识别。