в вашем коде выше есть две ошибки:
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