我有一个用于识别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的更改吗?
答案 0 :(得分:-1)
在新版本的Android中,这被视为危险权限,并且需要运行时权限才能使用。这意味着您必须提示首次使用许可,并且您不能在清单中进行注册,必须在运行时进行注册。