gpt4 book ai didi

android - 电话状态改变了监听器从未被解雇

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

我正在尝试在服务中创建电话状态更改监听器。我的服务扩展了基本服务,因此没有 IntentService 或类似的东西。

Receiver 是基本的 BroadcastReceiver,我这样注册:

IntentFilter filter = new IntentFilter();
filter.addAction(TelephoneManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(receiver, filter);

但是我的接收器 onReceive 从未被调用。我错过了什么?例如,如果我将过滤器操作更改为 Intent.ACTION_SCREEN_OFF,每次关闭屏幕时我都会收到 onReceive,所以我认为我的 中可能存在一些问题意向过滤器。我想用它来监听来电、信号强度、小区 ID 变化等等。我已经在 list 中注册了 READ_PHONE_STATE 权限,所以这应该不是问题。我的设备是装有 Android 6.0.1 的 Nexus 5X

有什么想法吗?

最佳答案

根据 Android 文档,当您尝试使用危险权限时,您需要请求访问权限。在这里查看危险权限和正常权限之间的区别:Requesting Permissions - Normal and Dangerous Permissions .

有关如何请求权限的信息:Requesting Permissions at Run Time .

一个快速的解决方法是将您的目标 API 减少到 22(低于 23),但这应该是一个临时解决方案。

关于信号强度,无法通过注册ACTION_PHONE_STATE_CHANGED获取信息。来自 Android documentation功能是:

Broadcast intent action indicating that the call state on the device has changed.

因此,这仅对调用状态(振铃、挂断等)有效,对信号强度无效。这是有道理的,因为信号强度每秒会变化几次,而每秒发生的大量事件会很快耗尽电池电量。

也许一个选项是两级方法:当您的应用程序在前台时,从 Activity 内部使用 PhoneStateListener,而在后台时,每隔几秒使用一次 TelephonyManager.get*CellInfo()。另见这个问题:How to get cell service signal strength in Android?

关于android - 电话状态改变了监听器从未被解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132624/

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