我正在尝试阻止呼叫,并在清单中添加了以下权限。
<uses-permission-sdk-23 android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
我的接收器代码是:
public class PhoneCallStateListener extends PhoneStateListener {
public class PhoneCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences = context.getSharedPreferences("CallBlockingPreference", Context.MODE_PRIVATE);
boolean blockCalls=sharedPreferences.getBoolean("blockCall", false);
Toast.makeText(context, "Call block enabled", Toast.LENGTH_SHORT).show();
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context);
telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
比较数字的代码:
public PhoneCallStateListener(Context context) {
this.context = context;
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
preferences = context.getSharedPreferences(MYPREFS, Context.MODE_PRIVATE);
setdefault.add("");
editor = preferences.edit();
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
ArrayList<String> allBlockedNuber = new ArrayList<>();
retrievePref = preferences.getStringSet("listOfBlockedNumbers", setdefault);
allBlockedNuber.addAll(retrievePref);
System.out.println(allBlockedNuber.size());
System.out.println(incomingNumber);
}
}
我收到空输入号码和错误为:
java.lang.SecurityException:用户10561和当前进程都没有android.permission.CALL_PHONE。
移动版仅显示一个许可权,如电话,而我已手动授予。那么,为什么会出错却没有收到呼入号码?请指导。
最佳答案
在运行时请求权限
如果设备运行的是Android 6.0或更高版本,并且您的应用程序的目标SDK是23或更高版本:该应用程序必须在清单中列出权限,并且在运行该应用程序时,它必须请求所需的每个危险权限。用户可以授予或拒绝每个许可,即使用户拒绝许可请求,应用程序也可以继续以有限的功能运行。
https://developer.android.com/training/permissions/requesting.html