美文网首页
Android之获取手机UUID

Android之获取手机UUID

作者: xiesen | 来源:发表于2019-07-16 14:42 被阅读0次

获取权限

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

相关文章

网友评论

      本文标题:Android之获取手机UUID

      本文链接:https://www.haomeiwen.com/subject/gjvzkctx.html