简体   繁体   English

使用PhoneStateListener在Marshmallow中空入队号

[英]Null incoming number in Marshmallow using PhoneStateListener

I'm trying for call blocker and added below permission in manifest. 我正在尝试使用呼叫拦截器并在清单中添加以下权限。

 <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" />

My code for receiver is: 我的接收器代码是:

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);
        }
    }

Code for comparing number: 比较数字的代码:

  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);
      }
}

I'm getting null incoming number and error as: 我得到null传入的数字和错误:

java.lang.SecurityException: Neither user 10561 nor current process has android.permission.CALL_PHONE. java.lang.SecurityException:用户10561和当前进程都没有android.permission.CALL_PHONE。

Mobile shows only one permission as Phone and that I have given manually. 移动设备仅显示一个电话权限,我手动提供。 Then why error and not getting incoming number? 那么为什么错误并没有得到传入号码? Please guide. 请指导。

Request Permissions at Run Time 在运行时请求权限

If the device is running Android 6.0 or higher, and your app's target SDK is 23 or higher: The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. 如果设备运行的是Android 6.0或更高版本,并且您的应用的目标SDK为23或更高:应用必须列出清单中的权限,并且必须在应用运行时请求它所需的每个危险权限。 The user can grant or deny each permission, and the app can continue to run with limited capabilities even if the user denies a permission request. 用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用程序也可以继续以有限的功能运行。

https://developer.android.com/training/permissions/requesting.html https://developer.android.com/training/permissions/requesting.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM