现在的安卓手机权限访问,基本上都需要动态申请,否则就会报权限申请异常,网上也有很多优秀的开源项目:比如 RxPermission
可以自行去github看下哦,用法很简单。
问题来了
别人开源了优秀的项目给大家使用,拿过来用就得了,简单粗暴,干嘛还自己写呢?
答:第三方使用起来确实简单粗暴,但为了一个简单的实现,弄个第三方,感觉就是大材小用
上代码
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
public final static int REQUEST_READ_PHONE_STATE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//点击获取设备号
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getDeviceId(MainActivity.this);
}
});
}
@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
getDeviceId(this);
} else {
Toast.makeText(this, "权限已被用户拒绝", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
@SuppressLint("HardwareIds")
public static String getDeviceId(Context context) {
String deviceId = "";
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (null != tm) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE);
} else {
if (tm.getDeviceId() != null) {
deviceId = tm.getDeviceId();
} else {
deviceId = Settings.Secure.getString(context.getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);
}
}
Log.d("deviceId--->", deviceId);
}
return "";
}
}
效果图: