如何从Xamarin形式的DependencyServic打开ActionCall活动?

问题描述 投票:0回答:1

嗨,我面临一个非常简单的问题,但我不确定为什么吗?

我正在尝试直接从xamarin表单应用程序拨打电话,而不显示dailer屏幕,用户将在屏幕上看到其联系人列表,单击一个按钮以进行呼叫,它将直接拨打电话而不显示拨号器屏幕。

为了实现这一点,我使用了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的我的依赖服务:

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

    }
}

此警报返回异常无法添加窗口-令牌null无效;您的活动正在运行吗?

我看起来像这样的不同解决方案

Intent ActionCall is not making phone call in xamarin forms

和这个https://forums.xamarin.com/discussion/129166/unable-to-add-window-token-null-is-not-for-an-application-alertbuilder

但是我仍然无法解决这个问题,

我也在主要活动]中尝试过

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();
            }
        }

并且通过执行此警报,显示了已拨出的电话号码,但它没有呼叫,并且通话部分仍显示了无法添加窗口..,

嗨,我面临一个非常简单的问题,但我不确定为什么吗?我试图直接从xamarin表单应用程序调用,而不显示dailer屏幕,用户将在屏幕上看到其联系人列表...

c# xamarin xamarin.forms xamarin.android
1个回答
0
投票

我可以在我的身边重现您的问题,如果您在Android 6.0之后请求runtime permissions,则将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.