如何让TelephonyCallback.SignalStrengthsListener在熄屏状态下正常工作?
解决API 31中TelephonyCallback.SignalStrengthsListener熄屏失效的问题
补全必要权限:API 31及以上版本,除了在Manifest中声明
ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、READ_PHONE_STATE权限,必须通过运行时请求获取这些权限。部分设备还要求开启ACCESS_BACKGROUND_LOCATION权限——哪怕前台服务在运行,熄屏后系统仍可能判定应用处于后台,触发该权限检查。调整回调注册时机:别只在
onCreate里注册回调,建议移到前台服务的onStartCommand中完成,同时在服务销毁时务必注销回调,避免内存泄漏。示例代码:
private TelephonyManager telephonyManager; private TelephonyCallback telephonyCallback; @Override public int onStartCommand(Intent intent, int flags, int startId) { telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); telephonyCallback = new TelephonyCallback() { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); // 这里写信号强度变化的处理逻辑 } }; if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { telephonyManager.registerTelephonyCallback(getMainExecutor(), telephonyCallback); } return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); if (telephonyManager != null && telephonyCallback != null) { telephonyManager.unregisterTelephonyCallback(telephonyCallback); } }
突破厂商系统限制:国产ROM(小米、华为、OPPO等)常有额外后台管控,即便关闭电池优化、开了前台服务,仍可能限制SignalStrengthsListener的触发。需要在应用权限设置里开启「自启动」「后台弹出界面」,并把后台模式设为「无限制」。
规范WakeLock使用:确保WakeLock是
PARTIAL_WAKE_LOCK类型,服务运行期间保持锁定,不要提前释放。示例:
private PowerManager.WakeLock wakeLock; @Override public void onCreate() { super.onCreate(); PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::SignalStrengthLock"); wakeLock.acquire(); // 或指定超时时间,比如10分钟:10*60*1000L } @Override public void onDestroy() { super.onDestroy(); if (wakeLock != null && wakeLock.isHeld()) { wakeLock.release(); } }
- 用adb命令测试回调:可以通过adb模拟信号强度变化,快速验证回调是否正常工作:
adb shell dumpsys telephony.registry set signalstrength 99 31 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
内容的提问来源于stack exchange,提问作者PT007
相关产品推荐
相关产品推荐

