我正在尝试在服务中创建Phone状态更改的侦听器。我的服务扩展了基本服务,所以没有IntentService或类似的东西。
Receiver是基本的if (this.props.wells.length === 0) {
return null
}
return (
<div id="map" ref="map">
{this.renderMarkers()}
</div>
)
,我这样注册:
BroadcastReceiver
但我的接收器IntentFilter filter = new IntentFilter();
filter.addAction(TelephoneManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(receiver, filter);
从未被调用过。我错过了什么?例如,如果我将过滤器操作更改为onReceive
,则每次关闭屏幕时都会收到Intent.ACTION_SCREEN_OFF
,因此我认为onReceive
可能存在一些问题。我想用它来监听来电,信号强度,小区ID变化和所有这些。我在清单中注册了IntentFilter
权限,所以这应该不是问题。我的设备是带有Android 6.0.1的Nexus 5X
有什么想法吗?
答案 0 :(得分:4)
从Android文档中,当您尝试使用危险权限时,您需要请求访问它。请参阅此处危险和正常权限之间的区别:Requesting Permissions - Normal and Dangerous Permissions。
有关如何申请权限的信息:Requesting Permissions at Run Time。
快速解决方法是将目标API降低到22(低于23),但这应该是一个临时解决方案。
关于信号强度,无法通过注册ACTION_PHONE_STATE_CHANGED
来获取信息。来自Android documentation的功能是:
广播意图操作,指示设备上的呼叫状态已更改。
因此,这仅对呼叫状态(振铃,挂断等)有效,而不是信号强度。这是有道理的,因为信号强度每秒会改变几次,每秒大量的事件会很快耗尽电池。
也许一个选项将是一个两级方法:当你的应用程序是前台时,在Activity内部使用PhoneStateListener,并在后台使用每隔几秒使用TelephonyManager.get * CellInfo()。另请参阅此问题:How to get cell service signal strength in Android?