我尝试使用呼叫阻止程序,并在清单中添加了以下权限。
<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。
移动设备只显示一个权限作为电话,我手动提供。那么为什么错误并没有得到传入号码?请指导。
答案 0 :(得分:0)
在运行时请求权限
如果设备运行的是Android 6.0或更高版本,并且您应用的目标SDK为23或更高:应用必须列出清单中的权限,并且必须在应用时请求其所需的每个危险权限在跑。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用程序也可以继续以有限的功能运行。
https://developer.android.com/training/permissions/requesting.html