为什么在手机处于睡眠模式时,传播接收器的传播接收器在Lollipop上不起作用



我的目标是即使手机处于睡眠模式。但是,我在Lollipop上遇到了一些奇怪的行为。

问题:

当电话按模式站立时(不使用> 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()之外。当然,这一切都应该在服务内部工作。这可能会有所帮助:在铃声期间更改铃声

最新更新