0

我的目标是始终检测来电,即使手机处于睡眠模式。但是,我在棒棒糖上遇到了一些奇怪的行为。

问题:

当手机处于待机模式(不使用超过 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);
    }
}
4

1 回答 1

0

我认为你在你的onReceive()方法中做了很多事情。我会尝试搬到prefs = PreferenceManager.getDefaultSharedPreferences(context);外面去onReceive()。当然,这一切都应该在Service内部工作。这可能会有所帮助:在响铃期间更改铃声音量

于 2017-10-01T13:28:41.503 回答