Java BroadcastReceiver手机状态更改在Sony Xperia Z5 Android 6.0上不起作用
我一直在尝试运行一个应用程序,它可以监听电话和国家电话。 然而,它似乎没有做到这一点。它要么听,但要花很长时间才能听,要么根本不听 这一直困扰着我,因为除了索尼Xperia Z5,它在我测试过的所有设备上都能正常工作。 我已经添加了活动的必要权限和运行时权限。 主要目的是通过应用程序拨打电话。然后在手机上收听状态变化 广播接收机代码: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
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上。它只是坏掉了。它也发生在我同事的手机上,他也有和我一样的手机