Java BroadcastReceiver手机状态更改在Sony Xperia Z5 Android 6.0上不起作用

Java BroadcastReceiver手机状态更改在Sony Xperia Z5 Android 6.0上不起作用,java,android,broadcastreceiver,android-6.0-marshmallow,sony-xperia,Java,Android,Broadcastreceiver,Android 6.0 Marshmallow,Sony Xperia,我一直在尝试运行一个应用程序,它可以监听电话和国家电话。 然而,它似乎没有做到这一点。它要么听,但要花很长时间才能听,要么根本不听 这一直困扰着我,因为除了索尼Xperia Z5,它在我测试过的所有设备上都能正常工作。 我已经添加了活动的必要权限和运行时权限。 主要目的是通过应用程序拨打电话。然后在手机上收听状态变化 广播接收机代码: public class OutgoingCallReceiver extends BroadcastReceiver { static CallPro

我一直在尝试运行一个应用程序,它可以监听电话和国家电话。 然而,它似乎没有做到这一点。它要么听,但要花很长时间才能听,要么根本不听

这一直困扰着我,因为除了索尼Xperia Z5,它在我测试过的所有设备上都能正常工作。 我已经添加了活动的必要权限和运行时权限。 主要目的是通过应用程序拨打电话。然后在手机上收听状态变化

广播接收机代码:

public class OutgoingCallReceiver extends BroadcastReceiver {

    static CallPromptView mCallPromptView;
    Context context;

    @Override
    public void onReceive(Context context, Intent intent) {
        this.context = context;
            TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
            if(!TextUtils.isEmpty(number)){
                setPrefPhoneNumber(number);
            }
        }
        else if(intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)){
            String number = getPrefPhoneNumber();
            if(tm.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK ||
                    tm.getCallState() == TelephonyManager.CALL_STATE_RINGING) {
                Log.d("STATE", "Phonestate : " + tm.getCallState());
            }else if(tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
                Log.d("STATE", "Phonestate idle");
                }
            }
        }
    }
}
AndroidManifest.xml:

    <!-- Phone call permissions -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <!-- GPS permissions -->
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
   <application
        android:allowBackup="true"
        android:fullBackupContent="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name=".ui.MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".receiver.OutgoingCallReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/google_maps_key" />
    </application>

    <!-- Window permissions -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


Sony Experia Z5有Android棉花糖,由于使用了此API,您必须在运行时进行一些权限检查。也许这就是原因…正如我所提到的。我添加了运行时权限等等。你在其他6.0设备上尝试过吗?这似乎相关,我在其他6.0设备上尝试过。工作出色:(但在索尼Xperia Z5上。它只是坏掉了。它也发生在我同事的手机上,他也有和我一样的手机