【问题标题】:Xamarin Android 9.0 GetImei error Java.Lang.SecurityException: getImeiForSlot android.permission.READ_PHONE_STATEXamarin Android 9.0 GetImei 错误 Java.Lang.SecurityException: getImeiForSlot android.permission.READ_PHONE_STATE
【发布时间】:2019-07-10 08:54:18
【问题描述】:

我尝试为Android 9.0 API LVL 28 获取我的unique ID IMEI

当我尝试使用我的代码时出现此错误:

Java.Lang.SecurityException: getImeiForSlot: 用户 10154 和当前进程都没有 android.permission.READ_PHONE_STATE。

        public class DeviceInfo : IDeviceInfo
        {
            TelephonyManager telephonyManager;
            public DeviceInfo()
            {
                telephonyManager = 
     (TelephonyManager)Application.Context.GetSystemService(Context.TelephonyService);          
            }

            public string Id
            {
                get
                {
                    telephonyManager = (TelephonyManager)Application.Context.GetSystemService(Context.TelephonyService);
                    if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                        // TODO: Some phones has more than 1 SIM card or may not have a SIM card inserted at all
                        return telephonyManager.GetMeid(0);
                    else
    #pragma warning disable CS0618 // Type or member is obsolete
                        return telephonyManager.DeviceId;
    #pragma warning restore CS0618 // Type or member is obsolete
                }
            }

还有我的 androdManifest.xml

<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" /> 
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.VIBRATE" />

【问题讨论】:

  • 读取手机状态是一个危险的权限,你也需要在运行时请求它

标签: android xamarin telephonymanager android-9.0-pie imei


【解决方案1】:

你必须:

  • 在清单中声明应用程序需要READ_PHONE_STATE 权限。对于 Xamarin 项目:右键单击项目/属性/Android 清单/所需权限

  • 请用户授予权限,有关详细信息,请参阅应用权限指南中的Runtime requests

【讨论】:

  • 非常感谢!你知道为什么我的 PackageManager 没有 PERMISSION_GRANTED 吗?我正在尝试使用一些示例权限,但我不能称之为因为 Android.Content.PM.PackageManager 不知道这个权限...
  • Xamarin 将常量PackageManager.PERMISSION_GRANTED 转换为Android.Content.PM.Permission.Granted
猜你喜欢
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
相关资源
最近更新 更多