获取权限
Android M动态申请获取权限android.permission.READ_PHONE_STATE
分四步进行:
1、在Manifest文件中添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
2、要获取权限进行操作的Activity实现接口
要获取权限进行操作的Activity实现 ActivityCompat.OnRequestPermissionsResultCallback接口(这一步貌似不是必须):
public class MainActivity extends Activity
implements ActivityCompat.OnRequestPermissionsResultCallback {
3、动态申请权限并做处理
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
//检查是否有读取联系人权限
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
//无权限第二次打开App再次申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE);
} else {
//有权限了,对其进行操作
}
其中REQUEST_READ_PHONE_STATE 是自定义的类常量,可以像下面这样在activity中定义:
public final static int REQUEST_READ_PHONE_STATE = 1;
4、对权限申请结果做处理
重写onRequestPermissionsResult()方法,对权限申请结果做处理:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_READ_PHONE_STATE) {
SharedPreferences mPreferences = getSharedPreferences("AppConfig", Context.MODE_PRIVATE);
//将生成到的UUID保存起来
SharedPreferences.Editor mEditor = mPreferences.edit();
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//这里表示申请权限后被用户允许了
mEditor.putString("uuid", AppConfig.getUniqueID(MainActivity.this));
mEditor.commit();
} else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
//这里表示申请权限后被用户拒绝了
String string = mPreferences.getString("uuid", "111");
System.out.println(string+"++++++++++++++");
if(string == null || "111".equals(string)){
mEditor.putString("uuid", AppConfig.getUUID(MainActivity.this));
mEditor.commit();
}
} else {
System.out.println("++++++++++");
}
}
}
获取UUID
AppConfig.class
/**
* 得到全局唯一UUID,有权限时
* @param context NameActivity.this
* @return 返回UUID字符串
*/
public static String getUniqueID(Context context) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
}
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
return deviceUuid.toString();
}
/**
* 得到全局唯一UUID,无权限时通过UUID.randomUUID().toString()随机产生一个UUID
*/
public static String getUUID(Context context) {
return UUID.randomUUID().toString();
}
网友评论