如何解决? “Java SecurityException:uid 11222 无权访问设备标识符”

问题描述 投票:0回答:1

错误消息 java.lang.SecurityException: getMeidForSlot: The uid 11222 does not meet the requests to access deviceidentifiers 表明应用程序没有必要的权限来访问给定 UID(User ID)11222。此限制可能是由于 Android 权限发生变化,某些敏感信息访问可能需要应用程序不具备的特定权限。

我已经使用了这个代码:

private Map<String, String> getSimInfo() {
    Map<String, String> simInfo = new HashMap<>();

    try {
        SubscriptionManager subsManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        List<SubscriptionInfo> subsList = subsManager.getActiveSubscriptionInfoList();

        if (subsList != null) {
            for (SubscriptionInfo subsInfo : subsList) {
                String iccid = subsInfo.getIccId();
                if (iccid != null) {
                    simInfo.put("ICCID" + subsInfo.getSimSlotIndex(), iccid);
                }
            }
        }

        String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
        simInfo.put("AndroidID", androidId != null ? androidId : "N/A");
        simInfo.put("MEID","N/A");
        simInfo.put("IMEI","N/A");
        
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String meid = telephonyManager.getSimSerialNumber();
        simInfo.put("MEID", meid != null ? meid : "N/A");
        if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY_GSM)) {
            try {
                String imei = telephonyManager.getImei();
                Log.d("IMEI DATA", imei);
                simInfo.put("IMEI", imei != null ? imei : "N/A");
            } catch (SecurityException e) {
             handleException("IMEI access not permitted", e);
            }
        }
    } catch (SecurityException e) {
        handleException("IMEI access not permitted", e);
    } catch (Exception e) {
        handleException("An error occurred", e);
    }
    return simInfo;
}

应用程序权限AndroidManifest:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER" />
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
E/SecurityException Error(29502): Security Exception: IMEI access not permitted
E/SecurityException Error(29502): java.lang.SecurityException: getMeidForSlot: The uid 11222 does not meet the requirements to access device identifiers.
E/SecurityException Error(29502):   at android.os.Parcel.createExceptionOrNull(Parcel.java:3023)
E/SecurityException Error(29502):   at android.os.Parcel.createException(Parcel.java:3007)
E/SecurityException Error(29502):   at android.os.Parcel.readException(Parcel.java:2990)
E/SecurityException Error(29502):   at android.os.Parcel.readException(Parcel.java:2932)
E/SecurityException Error(29502):   at com.android.internal.telephony.ITelephony$Stub$Proxy.getMeidForSlot(ITelephony.java:10794)
E/SecurityException Error(29502):   at android.telephony.TelephonyManager.getMeid(TelephonyManager.java:2898)
E/SecurityException Error(29502):   at android.telephony.TelephonyManager.getMeid(TelephonyManager.java:2855)
E/SecurityException Error(29502):   at com.example.sim_iccid_demo.MainActivity.getIccidList(MainActivity.kt:50)
E/SecurityException Error(29502):   at com.example.sim_iccid_demo.MainActivity.configureFlutterEngine$lambda-0(MainActivity.kt:24)
E/SecurityException Error(29502):   at com.example.sim_iccid_demo.MainActivity.$r8$lambda$8Tzl3un6utopCfe_BwLm26cMOFo(Unknown Source:0)
E/SecurityException Error(29502):   at com.example.sim_iccid_demo.MainActivity$$ExternalSyntheticLambda0.onMethodCall(Unknown Source:2)
E/SecurityException Error(29502):   at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
E/SecurityException Error(29502):   at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/SecurityException Error(29502):   at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
E/SecurityException Error(29502):   at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/SecurityException Error(29502):   at android.os.Handler.handleCallback(Handler.java:942)
E/SecurityException Error(29502):   at android.os.Handler.dispatchMessage(Handler.java:99)
E/SecurityException Error(29502):   at android.os.Looper.loopOnce(Looper.java:226)
E/SecurityException Error(29502):   at android.os.Looper.loop(Looper.java:313)
E/SecurityException Error(29502):   at android.app.ActivityThread.main(ActivityThread.java:8757)
E/SecurityException Error(29502):   at java.lang.reflect.Method.invoke(Native Method)
E/SecurityException Error(29502):   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
E/SecurityException Error(29502):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

I'm encountering a `java.lang.SecurityException: getMeidForSlot: The uid 11222 does not meet the requirements to access device identifiers` error in my Java application. I'm working on sim and device info.

代码堆栈指出 MainActivity 类中的 getIccidList 方法内发生故障,特别是 TelephonyManager 类的 getMeid 或 getMeidForSlot 方法内,该类负责处理与电话相关的功能。

android flutter telephonymanager securityexception
1个回答
0
投票

看这里:

https://developer.android.com/training/articles/user-data-ids

他们更改了 android IMEI 和 UUID 方法。您应该使用作为跟踪器的 Android ID 来获取营销信息。即使是 MAC 地址也不应该被使用。由于安全设置可以使用户可识别,因此没有确定的方法来建立一对一连接。

© www.soinside.com 2019 - 2024. All rights reserved.