标签:android-audiomanager android android-service broadcastreceiver
我在服务上有一个动态注册的BroadcastReceiver.它将AudioManager.RINGER_MODE_CHANGED_ACTION作为IntentFilter.每次启动服务时,我都会在onReceive()方法中获取日志消息.之后它正常工作.每次启动服务时我都不希望它接收一次.你能告诉我我在这里失踪了吗?
receiver=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Log.d("zil", "degisti");
}
};
IntentFilter filter=new IntentFilter(
AudioManager.RINGER_MODE_CHANGED_ACTION);
registerReceiver(receiver,filter);
解决方法:
您感兴趣的意图AudioManager.RINGER_MODE_CHANGED_ACTION是“粘性的”.这意味着系统始终保持发送的最后一个广播,并且每当注册了对该Intent感兴趣的BroadcastReceiver时,它立即接收它.这是一个非常有用的功能,但有时它不是你想要的;-)
我假设你只对实际的“改变”事件感兴趣.在这种情况下,您需要忽略“当前”事件并仅监听将来发生的任何事件.幸运的是,有一个解决方案:
在’onReceive()’中执行以下操作:
if (isInitialStickyBroadcast()) {
// Ignore this one as we aren't interested in the current state
} else {
Log.d("zil", "degisti");
// Do whatever you want to do with the event here
}
标签:android-audiomanager,android,android-service,broadcastreceiver 来源: https://codeday.me/bug/20190902/1787391.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。