在双卡中读取 Sim 号码 Phone Xamarin.Form

Reading Sim Number in Dual Sim Phone Xamarin.Form

我总是收到 Java.Lang.SecurityException 的错误:getLine1NumberForDisplay:用户 10710 和当前进程都没有 android.permission.READ_SMS。即使我已经在 AndroidManifest.xml

中添加了 READ_SMS

我的代码:

public string GetNumber()
{
    TelephonyManager telephonyManager = (TelephonyManager)GetSystemService(TelephonyService);
    return telephonyManager.Line1Number;
}

提前致谢,祝您愉快 :D

这是一个非常简单运行时权限请求示例。

我强烈建议阅读 Xamarin 博客 post 和下面链接的 Android 文档,因为您应该向用户显示 "why" 您在系统对话框出现之前请求权限。

[Activity(Label = "RunTimePermissions", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    const int PermissionSMSRequestCode = 99;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Main);

        Button button = FindViewById<Button>(Resource.Id.myButton);
        button.Click += delegate { 
            if ((int)Build.VERSION.SdkInt < 23) // Permissions accepted by the user during app install
                DoSomeWork();

            var permission = BaseContext.CheckSelfPermission(Manifest.Permission.ReadSms);
            if (permission == Android.Content.PM.Permission.Granted) // Did the user already grant permission?
                DoSomeWork();
            else // Ask the user to allow/deny permission request
                RequestPermissions(new string[] { Manifest.Permission.ReadSms }, PermissionSMSRequestCode);
        };
    }

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
    {
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PermissionSMSRequestCode)
        {
            if ((grantResults.Count() > 0) && (grantResults[0] == Android.Content.PM.Permission.Granted))
                DoSomeWork();
            else
                Log.Debug("PERM", "The user denied access!");
        }
    }

    protected void DoSomeWork()
    {
        Log.Debug("PERM", "We have permission, so do something with it");
    }
}

参考:Requesting Runtime Permissions in Android Marshmallow

参考:Requesting Permissions at Run Time