gpt4 book ai didi

android - BroadcastReceiver 每次启动服务时接收

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:04 31 4
gpt4 key购买 nike

我在 Service 上有一个动态注册的 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);

最佳答案

您感兴趣的 Intent 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 - BroadcastReceiver 每次启动服务时接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435509/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com