标签:broadcastreceiver phone-state-listener android
我正在尝试在服务内部创建电话状态更改的侦听器.我的服务扩展了基本服务,因此没有IntentService或类似的东西.
接收器是基本的BroadcastReceiver,我这样注册:
IntentFilter filter = new IntentFilter();
filter.addAction(TelephoneManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(receiver, filter);
但是我的接收器onReceive从未被调用过.我想念什么?例如,如果我将过滤器操作更改为Intent.ACTION_SCREEN_OFF,则每次关闭屏幕时都会启动onReceive,因此我认为IntentFilter中可能存在一些问题.我想用它来监听来电,信号强度,小区ID变化以及所有这些东西.我已经在清单中注册了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?
标签:broadcastreceiver,phone-state-listener,android 来源: https://codeday.me/bug/20191026/1935151.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。