首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xamarin窗体获取调用持续时间

Xamarin窗体获取调用持续时间
EN

Stack Overflow用户
提问于 2019-06-07 20:09:38
回答 1查看 715关注 0票数 0

我有一个xamarin.forms应用程序,它将打开拨号时,我试图实现的标签clicks.What是

  1. 用户单击Label-->拨号程序(ios中的电话应用程序)打开
  2. 用户呼叫并结束-->返回应用程序

我可以在点击标签时打开拨号器。

我可以在我的应用程序中获取通话时长吗?在从XF应用程序移动到dialer.Please guide时,是否有其他解决方法,如计算空闲状态时间

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 19:35:39

安卓部件

我使用了Xamarin essential来移动到拨号器。

获取上一次被叫号码时长的* :

已在名为拨号程序的安卓文件夹中创建了一个依赖项

代码语言:javascript
复制
[assembly: Dependency(typeof(Dialer))]
namespace DialerDemo.Droid
{
    class Dialer : ICallerDialer
    {
        public string GetCallLogs()
        {
            string queryFilter = String.Format("{0}={1}", CallLog.Calls.Type, (int)CallType.Outgoing);
            string querySorter = String.Format("{0} desc ", CallLog.Calls.Date);
            ICursor queryData1 = Android.App.Application.Context.ContentResolver.Query(CallLog.Calls.ContentUri, null, queryFilter ,null, querySorter);
            int number = queryData1.GetColumnIndex(CallLog.Calls.Number);
            int duration1 = queryData1.GetColumnIndex(CallLog.Calls.Duration);
            if (queryData1.MoveToFirst() == true)
            {
                String phNumber = queryData1.GetString(number);
                String callDuration = queryData1.GetString(duration1);

                return callDuration;
            }
            return string.Empty;
        }
    }
}

在我的共享代码中创建了接口。

代码语言:javascript
复制
namespace DialerDemo
{
    public interface ICallerDialer
    {
        string GetCallLogs(); 
    }
} 

为了在安卓系统中获取通话时长,在我的MainPage.xaml.cs中,我这样调用它。

代码语言:javascript
复制
 var duration = DependencyService.Get<ICallerDialer>().GetCallLogs();

ios Part

在Appdelegate类中,我添加了苹果电话API代码。

代码语言:javascript
复制
public CTCallCenter c { get; set; }

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();
    LoadApplication(new App());

    c = new CTCallCenter();

    c.CallEventHandler = delegate (CTCall call)
    {

        if (call.CallState == call.StateIncoming)
        {                                

        }
        else if (call.CallState == call.StateDialing)
        {

        }
        else if (call.CallState == call.StateConnected)
        {
            try
            {
                MessagingCenter.Send<Object>(new Object(), "CallConnected");
            }
            catch (Exception ex)
            {
            }
        }
        else if (call.CallState == call.StateDisconnected)
        {

         try {                     
                MessagingCenter.Send<Object>(new Object(), "CallEnded");

             }
             catch( Exception ex)
             {
             }
        }
    };

    return base.FinishedLaunching(app, options);
}

对于ios,我根据消息中心的值计算时间差,并在我的共享代码中获得呼叫持续时间,如下所示。

代码语言:javascript
复制
 try
            {

                PhoneDialer.Open(number);           
                MessagingCenter.Subscribe<Object>(this, "CallConnected", (sender) => {
                     CallStartTime = DateTime.Parse(DateTime.Now.ToString("hh:mm:ss"));
                });
                MessagingCenter.Subscribe<Object>(this, "CallEnded", (sender) => {
                CallEndTime = DateTime.Parse(DateTime.Now.ToString("hh:mm:ss"));
                CallDuration = CallEndTime - CallStartTime;
                });


            }
            catch (FeatureNotSupportedException ex)
            {
                // Phone Dialer is not supported on this device.  
            }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56494059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档