Как совершать телефонные звонки с помощью форм Xamairn?

Я новичок в xamarin, и я хочу позвонить напрямую (не открывая номеронабиратель). Я пробовал использовать этот пример, но он не работает. Нажмите Пожалуйста, помогите

public class PhoneCall_Droid : IPhoneCall
{
    public void MakeQuickCall(string PhoneNumber)
    {
        try
        {
            var uri = Android.Net.Uri.Parse(string.Format("tel:{0}", PhoneNumber));
            var intent = new Intent(Intent.ActionCall, uri);
            Xamarin.Forms.Forms.Context.StartActivity(intent);
        }
        catch (Exception ex)
        {
            new AlertDialog.Builder(Android.App.Application.Context).SetPositiveButton("OK", (sender, args) =>
            {
                //User pressed OK
            })
            .SetMessage(ex.ToString())
            .SetTitle("Android Exception")
            .Show();
        }
    }        
}

person naye mtz    schedule 04.07.2019    source источник
comment
не работает, ничего полезного нам не сообщает. Это вылетает? Выкинуть исключение или ошибку? Вы использовали отладчик, чтобы убедиться, что ваш код действительно выполняется?   -  person Jason    schedule 05.07.2019
comment
да, я проверил код, но взял номер телефона, но не позвонил.   -  person naye mtz    schedule 05.07.2019


Ответы (1)


в вашем коде выше есть две ошибки:

1.Xamarin.Forms.Forms.Context не удалось получить правильный контекст.

вы можете определить статическую переменную в MainActiviy, например:

public static MainActivity Instance;
protected override void OnCreate(Bundle savedInstanceState)
   {
      TabLayoutResource = Resource.Layout.Tabbar;
      ToolbarResource = Resource.Layout.Toolbar;

      base.OnCreate(savedInstanceState);
      global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

      Instance = this;

      LoadApplication(new App());

    }

вы также можете использовать Плагин текущей активности, вы можете обратиться к Текущая активность

2. После Android6.0 вы должны запросить разрешения времени выполнения и официальный документ

вот простой пример:

[assembly: Xamarin.Forms.Dependency(typeof(PhoneCall_Droid))]
namespace App18.Droid
{
  class PhoneCall_Droid: IPhoneCall
   {
     public void MakeQuickCall(string PhoneNumber)
      {
        try
        {
            if(ActivityCompat.CheckSelfPermission(MainActivity.Instance, Android.Manifest.Permission.CallPhone) != Android.Content.PM.Permission.Granted ){

               ActivityCompat.RequestPermissions(MainActivity.Instance, new string[] {Android.Manifest.Permission.CallPhone }, 1);
                return;
            }
            else
            {
            var uri = Android.Net.Uri.Parse(string.Format("tel:{0}", PhoneNumber));
            var intent = new Intent(Intent.ActionCall, uri);
            MainActivity.Instance.StartActivity(intent);
            }
        }
        catch (Exception ex)
        {
            new AlertDialog.Builder(MainActivity.Instance).SetPositiveButton("OK", (sender, args) =>
            {
                //User pressed OK
            })
            .SetMessage(ex.ToString())
            .SetTitle("Android Exception")
            .Show();
        }
    }     
  }
}

и вы также можете использовать nugetpackage Plugin.Permissions для запроса разрешений времени выполнения (Permission.Location), обратитесь к Plugin.Permissions

наконец-то ты мог позвонить как

DependencyService.Get<IPhoneCall>().MakeQuickCall(phonenumber);
person Leo Zhu - MSFT    schedule 05.07.2019