java.lang.SecurityException: getLine1NumberForDisplay: Neither user 10199 nor current process has an

报错:

java.lang.SecurityException: getLine1NumberForDisplay: 
Neither user 10199 nor current process has android.permission.READ_PHONE_STATE or android.permission.READ_SMS

一般这样的问题出现在android6以上

解决方案:

Android M动态申请获取权限android.permission.READ_PHONE_STATE

Android M对应用的授权策略做了变动,如果我们想调用getDeviceId()获取手机串码,只在Manifest里添加android.permission.READ_PHONE_STATE权限是不够的,如果不做权限的动态申请和处理,可能会报错误。

动态申请权限步骤:

1、androidmanifest.xml添加

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

2、要获取权限进行操作的Activity实现 ActivityCompat.OnRequestPermissionsResultCallback接口(这一步貌似不是必须)

public class MainActivity extends Activity
        implements ActivityCompat.OnRequestPermissionsResultCallback

3、动态申请权限代码

 public final static int REQUEST_READ_PHONE_STATE = 1;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);

            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE);
            } else {
                //TODO
            }

4、重写onRequestPermissionsResult()方法,对权限申请结果做处理

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case REQUEST_READ_PHONE_STATE:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    //TODO
                }
                break;

            default:
                break;
        }
    }

5、获取电话号码的方法处捕获异常

 /**
     * 获取电话号码
     */
    public String getNativePhoneNumber(){

        String NativePhoneNumber=null;
        try {
            NativePhoneNumber=telephonyManager.getLine1Number();
        }catch (Exception e){

        }

        return NativePhoneNumber;
    }

通过以上5步基本上可以解决问题了

本文摘自https://blog.csdn.net/fenggering/article/details/53432401,更多请参考原文

猜你喜欢

转载自blog.csdn.net/niuzaiwenjie/article/details/80771635