Ceci est similaire à la façon dont MvvmCross permet aux utilisateurs de passer des appels téléphoniques.
Lorsque vous utilisez ce modèle:
Le code ViewModel consume une plate-forme de service indépendante via une interface - par exemple:
public interface IMvxPhoneCallTask
{
void MakePhoneCall(string name, string number);
}
consommée par
protected void MakePhoneCall(string name, string number)
{
var task = this.GetService<IMvxPhoneCallTask>();
task.MakePhoneCall(name, number);
}
dans https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.Core/ViewModels/BaseViewModel.cs
Le code d'installation de l'application injecte la plate-forme spécifique i XECUTION pour l'interface - par exemple:
RegisterServiceType<IMvxPhoneCallTask, MvxPhoneCallTask>();
Dans WP7 - celui-ci utilise le 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
}
Dans Droid - il utilise le 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 - il utilise juste 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
}
Dans la version vNext de mvvmcross, cette approche est en outre officialisé en utilisant des plugins - voir une brève introduction à ces derniers dans la présentation « aller portable » à http://slodge.blogspot.co.uk/2012/06/mvvm-mvvmcross-monodroid-monotouch-wp7.html
Par exemple, dans vNext l'appel téléphonique code ci-dessus est contenu dans le plugin PhoneCall - https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/PhoneCall
l'un des défis de votre tâche est peut-être le mot « tout » - les différences dans la mise en œuvre de la plate-forme pourrait rendre difficile à dé bien une interface multiplateforme qui fonctionne sur toutes les plates-formes pour l'un de NFC, Bluetooth, etc, et encore moins tous.