部分应用需要获取手机的号码,可以采用代码的方式来获取。
代码如下:
public String getNativePhoneNumber() { telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { // // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return null; } nativePhoneNumber = telephonyManager.getLine1Number(); if(nativePhoneNumber != null && nativePhoneNumber.length() != 0){ newNativePhoneNumber = nativePhoneNumber.substring(1,nativePhoneNumber.length()); } Log.d(TAG, "getNativePhoneNumber++++++++++++: " + nativePhoneNumber); return newNativePhoneNumber; }
需要在AndroidManifest中设置权限。并在代码中动态获取权限。
动态获取权限使用
rxpermissions2
动态获取
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.5' compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar'
获取的代码如下:
public void requestPermissions() { RxPermissions rxPermission = new RxPermissions(MainActivity.this); rxPermission .requestEach( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_SMS) .subscribe(new Consumer<Permission>() { @Override public void accept(Permission permission) throws Exception { if (permission.granted) { // 用户已经同意该权限 getNativePhoneNumber(); Log.d(TAG, permission.name + " is granted."); } else if (permission.shouldShowRequestPermissionRationale) { // 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框 Log.d(TAG, permission.name + " is denied. More info should be provided."); } else { // 用户拒绝了该权限,并且选中『不再询问』 Log.d(TAG, permission.name + " is denied."); } } }); }