美文网首页
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