在我的项目中,我有一个场景可以拨打电话并在2次通话后触发事件,但在android 6或7中,即使我已经获得phone_state
权限,它也无法正常工作。
public void onReceive(Context context, Intent intent) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(className));
//String state = intent.getStringExtra(TelephonyManager.EXTRA_PHONE_NUMBER);
if (intent. getAction (). equals (Intent. ACTION_NEW_OUTGOING_CALL))
{
checkOutgoingCallCounter(shPreference,context);
}
}
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
答案 0 :(得分:1)
READ_PHONE_STATE
是一个必须在运行时请求的“危险”权限。用于检查您是否拥有权限的API位于ContextCompat
,但请求权限的API位于ActivityCompat
,因此您需要Activity
来请求权限。 BroadcastReceiver
无法请求它。 (在我的头脑中,我不认为你的BroadcastReceiver
甚至会在获得许可之前被调用。如果是,你可以从那里开始一项活动。)