在牛轧糖和更高版本上断开传入呼叫

时间:2018-12-06 13:35:26

标签: android

我有一个用于识别Android 5来电的代码。下面我提供了同样的代码段。

清单文件段-

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>

<receiver android:name=".receiver.CallReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

BroadcastReceiver的实现如下-

public class CallReceiver extends BroadcastReceiver {


    private static final String TAG = "CallReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {

        String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
        String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.i(TAG, "Inside onReceived : Phone state."+stateStr+" From : "+number);
}
}

这里的问题是,我尝试在Android 5上测试此代码,调用了onReceive,它可能会向我显示日志消息;但是如果我在Android 7上尝试使用相同的代码,那就没有运气了。我可以注意到没有调用onReceive。 我必须在此处实施任何特定于API的更改吗?

1 个答案:

答案 0 :(得分:-1)

在新版本的Android中,这被视为危险权限,并且需要运行时权限才能使用。这意味着您必须提示首次使用许可,并且您不能在清单中进行注册,必须在运行时进行注册。