首页 > 解决方案 > 无法在android 11中检索手机的SIM卡和IMEI号码

问题描述

我想从安卓手机中检索 SIM 和 IMEI 号码。在 android 9 或更低版本中,我可以正确检索它,但在更新版本中它会粉碎应用程序并且无法检索电话号码。我需要这个,因为要识别安装 opt 和我的应用程序的正确移动设备。我的源代码看起来像。

 TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    String simID = telephonyManager.getSimSerialNumber();
    String telNumber = telephonyManager.getSubscriberId();
    String IMEI = telephonyManager.getDeviceId();

我还添加了必要的权限,例如。

        if (ActivityCompat.checkSelfPermission(this, "android.permission.READ_PRIVILEGED_PHONE_STATE") != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_PRIVILEGED_PHONE_STATE"}, 111);

        return false;
        }

我还添加了 READ_PHONE_STATE 和 READ_PHONE_NUMBERS 权限。

标签: javaandroidkotlin

解决方案


在新设备中Device ID使用

String dev_id = Secure.getString(getContext().getContentResolver(),
                                                    Secure.ANDROID_ID);

推荐阅读