【问题标题】:Neither user 10085 nor current process has android.permission.READ_PHONE_STATE用户 10085 和当前进程都没有 android.permission.READ_PHONE_STATE
【发布时间】:2019-12-21 19:08:37
【问题描述】:

我已经更新了目标 sdk 版本 27,并且我已在 READ_PHONE_STATE.manifest 中给予许可,但我的应用程序在 utils.java 上仍然崩溃

 deviceId = TelephonyMgr.getDeviceId(); 

在这条线上,我还要求运行时许可,但问题还是一样

private void RequestMultiplePermission() {

        // Creating String Array with Permissions.
        ActivityCompat.requestPermissions(LoginActivity.this, new String[]
                {
                        CALL_PHONE,
                        READ_PHONE_STATE
                }, RequestPermissionCode);

    }
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {

            case RequestPermissionCode:

                if (grantResults.length > 0) {

                    boolean GetCallPermission = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                    boolean GetReadphoneper = grantResults[1] == PackageManager.PERMISSION_GRANTED;

                    if (GetCallPermission && GetReadphoneper) {

                        Toast.makeText(LoginActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();
                    }
                    else {
                        ///Toast.makeText(Login.this,"Permission Granted",Toast.LENGTH_LONG).show();
                    }
                }
                break;
        }
    }

在这一行中它会崩溃 deviceId = TelephonyMgr.getDeviceId();

public static String getUniqueDeviceId(Context context) {
        String deviceId;
        // 1 compute IMEI
        final TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {

        }
        deviceId = TelephonyMgr.getDeviceId(); // Requires // READ_PHONE_STATE
        if (deviceId == null) {
            // 2 android ID - unreliable
            deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        }
        if (deviceId == null) {
            Random r = new Random();
            deviceId = String.valueOf((r.nextInt() + r.nextInt()));
        }

        e(deviceId);
        return deviceId;
    }

【问题讨论】:

  • permission in manifest 还不够。您还需要运行时权限
  • 我已经给出了运行 ActivityCompat.requestPermissions(LoginActivity.this, new String[] { CALL_PHONE, READ_PHONE_STATE }, RequestPermissionCode);时间许可也。 @VladyslavMatviienko
  • 好的,当你尝试这样做时deviceId = TelephonyMgr.getDeviceId()
  • 在我的 Utils.java 文件中@VladyslavMatviienko
  • 没有人知道你的Utils.java 是什么。只有在获得权限后才能调用它。这就是为什么我在你打电话时问它

标签: android


【解决方案1】:

用这个解决了::

 deviceId = Settings.Secure.getString(context.getContentResolver(),
                InstanceID.getInstance(context).getId());

【讨论】:

  • 这里的InstanceID是什么?
  • 不在包类中。找不到
  • 你是否在你的 gradle 中实现了以下功能???-- "com.google.android.gms:play-services"
  • 我的应用地图。当然,我必须有
  • @olajide InstanceID 是 Firebase 的一部分:firebase.google.com/support/privacy/manage-iids
猜你喜欢
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多