xamarin.forms - 如何使用 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();
}
}
}
解决方案
上面的代码中有两个错误:
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());
}
您也可以使用当前活动插件,您可以参考当前活动
这是一个简单的例子:
[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);
推荐阅读
- r - 运行 GEE 后,系数表不显示两个自变量的结果
- apache - 致命错误无法分配 134217728 字节的共享内存段:mmap:无法分配内存 (12)
- firebase - Firestore 侦听器的异常
- java - 改进我的键盘输入 (KeyListener) Java
- excel-2016 - 在 excel 中比较两个日期会返回错误的结果
- javascript - 从输入中修复位置 JSON
- python - 输出没有得到字符串 + 整数
- android - 我可以用 Expo 编辑 android:launchMode="singleTask" 吗?(反应原生)
- python - 将字符串拆分为单词
- c++ - decltype 和模板的问题