当手机处于睡眠模式时,为什么用于来电的广播接收器在棒棒糖上不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当手机处于睡眠模式时,为什么用于来电的广播接收器在棒棒糖上不起作用相关的知识,希望对你有一定的参考价值。
我的目标是始终检测来电,即使手机处于睡眠模式。但是,我在棒棒糖上遇到了一些奇怪的行为。
问题:
当手机处于待机模式(未使用> 10分钟)时,广播接收器的onReceive()方法不会被调用。
这适用于Kitkat,Marshmallow和Nougat。也许有人有同样的问题?
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<receiver android:name=".PhoneCallReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
接收器:
public class PhoneCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
prefs = PreferenceManager.getDefaultSharedPreferences(context);
if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
String nr = Utils.fixNumber(intent.getExtras().getString("android.intent.extra.PHONE_NUMBER"));
prefs.edit().putString("LastActiveNr", nr).apply();
} else {
String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
int state = 0;
if (TelephonyManager.EXTRA_STATE_IDLE.equals(stateStr)) {
state = TelephonyManager.CALL_STATE_IDLE;
prefs.edit().putInt("state", state).apply();
} else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(stateStr)) {
state = TelephonyManager.CALL_STATE_OFFHOOK;
prefs.edit().putInt("state", state).apply();
} else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
state = TelephonyManager.CALL_STATE_RINGING;
prefs.edit().putInt("state", state).apply();
String nr = Utils.fixNumber(intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER));
prefs.edit().putString("LastActiveNr", nr).apply();
}
onCallStateChanged(context);
}
}
答案
我认为你在你的onReceive()
方法中做了很多。我会尝试将prefs = PreferenceManager.getDefaultSharedPreferences(context);
移到onReceive()
之外。当然这一切都应该在Service内部工作。这可能会有所帮助:Changing ringer volume during ringing
以上是关于当手机处于睡眠模式时,为什么用于来电的广播接收器在棒棒糖上不起作用的主要内容,如果未能解决你的问题,请参考以下文章