2

Im always getting an error of Java.Lang.SecurityException: getLine1NumberForDisplay: Neither user 10710 nor current process has android.permission.READ_SMS. Even if I already Added the READ_SMS in AndroidManifest.xml

MyCode:

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

Thanks in Advance and Good Day :D

Dan Howell
  • 42
  • 3
jake talledo
  • 610
  • 11
  • 24

1 Answers1

3

This is a really simple runtime permission request example.

I would highly recommend reading the Xamarin blog post and the Android doc linked below as you should show the user "why" you are requesting permission before the system dialog shows up.

[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");
    }
}

enter image description here

Ref: Requesting Runtime Permissions in Android Marshmallow

Ref: Requesting Permissions at Run Time

SushiHangover
  • 73,120
  • 10
  • 106
  • 165
  • Thanks SushiHangover although I wasnt able to get the SIM number but my Sms sending without user interaction works using your runtime Permission sample thank you very much. – jake talledo Jul 20 '16 at 08:42