嗨,我面临一个非常简单的问题,但我不确定为什么?
我试图直接从 xamarin 表单应用程序呼叫,而不显示拨号器屏幕,用户将在屏幕中看到其联系人列表,单击一个按钮进行呼叫,并且它会在不显示拨号器屏幕的情况下直接拨打电话。
为了实现这一点,我使用了 DependencyServic,并将其用作我的基础https://www.c-sharpcorner.com/UploadFile/e4bad6/code-to-start-call-in-xamarin-forms/
唯一的区别是这是 PCL,我正在使用共享库
我在哪里遇到问题?
我的界面
public interface IPhoneCall
{
void MakeQuickCall(string PhoneNumber);
}
我对依赖服务的调用
private void makeCall_Clicked(object sender, EventArgs e)
{
try
{
DependencyService.Get<IPhoneCall>().MakeQuickCall("+xxxxxxxxx");
} catch(Exception ex)
{
DisplayAlert("Alert!!!", ex.Message, "ok");
}
}
Android 的 My Dependency 服务调用:
[assembly: Dependency(typeof(PhoneCall_Droid))]
namespace MakeCall.Droid
{
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();
}
}
}
}
此警报返回异常无法添加窗口 - 令牌空无效;您的活动正在运行吗?
我看过像这样的不同解决方案
Intent ActionCall 不以 xamarin 形式拨打电话
但我仍然无法解决这个问题,
我也在我的主要活动中尝试过这个
internal static MainActivity Instance { get; private set; }
然后在OnCreate方法中添加这一行
Instance = this;
并将我的 Android 依赖服务类方法更改为此
public void MakeQuickCall(string PhoneNumber)
{
var context = MainActivity.Instance;
try
{
new AlertDialog.Builder(context ).SetPositiveButton("OK", (sender, args) =>
{
//User pressed OK
})
.SetMessage(Android.Net.Uri.Parse(string.Format("tel:{0}", PhoneNumber)).ToString())
.SetTitle("Android Exception")
.Show();
Intent intent = new Intent(Intent.ActionCall, Android.Net.Uri.Parse(string.Format("tel:{0}", PhoneNumber)));
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();
}
}
并且通过执行此警报显示已拨电话号码,但它没有呼叫并且呼叫部分仍然显示无法添加窗口..,
我可以在我身边重现您的问题,如果您在 Android 6.0 之后请求运行时权限,您将解决您的问题。
首先,您可以在 MainActiviy 中定义一个静态变量:
public static MainActivity macvivity;
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
macvivity = this;
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
然后在调用之前请求权限:
public void MakeQuickCall(string PhoneNumber)
{
try
{
if (ActivityCompat.CheckSelfPermission(MainActivity.macvivity, Android.Manifest.Permission.CallPhone) != Android.Content.PM.Permission.Granted)
{
ActivityCompat.RequestPermissions(MainActivity.macvivity, 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);
Xamarin.Forms.Forms.Context.StartActivity(intent);
//MainActivity.macvivity.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();
}
}
如果我的回复对您有帮助,请记得将我的回复标记为回复,谢谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句