这类似于 MvvmCross 允许用户拨打电话的方式。
使用此模式时:
ViewModel 代码通过接口使用与平台无关的服务 - 例如:
public interface IMvxPhoneCallTask
{
void MakePhoneCall(string name, string number);
}
被消耗
protected void MakePhoneCall(string name, string number)
{
var task = this.GetService<IMvxPhoneCallTask>();
task.MakePhoneCall(name, number);
}
在https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.Core/ViewModels/BaseViewModel.cs
应用程序设置代码为接口注入平台特定的实现 - 例如:
RegisterServiceType<IMvxPhoneCallTask, MvxPhoneCallTask>();
在 WP7 - 这使用PhoneCallTask
- https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross/WindowsPhone/Platform/Tasks/MvxPhoneCallTask.cs
public class MvxPhoneCallTask : MvxWindowsPhoneTask, IMvxPhoneCallTask
{
#region IMvxPhoneCallTask Members
public void MakePhoneCall(string name, string number)
{
var pct = new PhoneCallTask {DisplayName = name, PhoneNumber = number};
DoWithInvalidOperationProtection(pct.Show);
}
#endregion
}
在 Droid 中 - 它使用ActionDial Intent
- https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross/Android/Platform/Tasks/MvxPhoneCallTask.cs
public class MvxPhoneCallTask : MvxAndroidTask, IMvxPhoneCallTask
{
#region IMvxPhoneCallTask Members
public void MakePhoneCall(string name, string number)
{
var phoneNumber = PhoneNumberUtils.FormatNumber(number);
var newIntent = new Intent(Intent.ActionDial, Uri.Parse("tel:" + phoneNumber));
StartActivity(newIntent);
}
#endregion
}
In Touch - 它只使用 Urls - https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross/Touch/Platform/Tasks/MvxPhoneCallTask .cs
public class MvxPhoneCallTask : MvxTouchTask, IMvxPhoneCallTask
{
#region IMvxPhoneCallTask Members
public void MakePhoneCall(string name, string number)
{
var url = new NSUrl("tel:" + number);
DoUrlOpen(url);
}
#endregion
}
在 mvvmcross 的 vnext 版本中,这种方法使用插件进一步形式化 - 请参阅http://slodge.blogspot.co.uk/2012/06/mvvm-mvvmcross-monodroid的“便携式”演示文稿中对这些方法的简要介绍-monotouch-wp7.html
例如,在 vNext 中,上面的电话代码包含在 PhoneCall 插件中 - https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/PhoneCall
您的任务的挑战之一可能是“任何”这个词 - 平台实现的差异可能会导致难以定义跨平台接口,该接口适用于 NFC、蓝牙等任何一个平台,更不用说所有平台了。他们。