我有一个xamarin.forms应用程序,当单击标签时,它将打开拨号程序。我想要实现的是
单击标签时我可以打开拨号器。
我可以在应用程序中获取通话时间吗?可能吗?如果没有,还有其他变通方法,例如计算从XF应用程序移至拨号器时的空闲状态时间。请指导
答案 0 :(得分:0)
Android部件
我使用了Xamarin来进行拨号。
*用于获取最后通话号码的持续时间:
在名为 ICallerDialer
的Android文件夹中创建了依赖项[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;
}
}
}
在“我的共享代码”中创建了界面。
namespace DialerDemo
{
public interface ICallerDialer
{
string GetCallLogs();
}
}
在我的MainPage.xaml.cs中,我这样称呼它。
var duration = DependencyService.Get<ICallerDialer>().GetCallLogs();
iOS部件
在Appdelegate类中,我添加了苹果电话API代码。
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);
}
我根据消息传递中心的值计算了时差,并在共享代码中获得了通话时间。