我的目标是始终检测来电,即使手机处于睡眠模式。但是,我在棒棒糖上遇到了一些奇怪的行为。
问题:
当手机处于待机模式(不使用超过 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);
}
}