通过数据

时间:2016-02-09 09:45:36

标签: android android-intent xamarin mvvmcross intentfilter

在原生Android应用中,您可以为清单文件中的活动定义intent-filter,当从网站或电子邮件访问特定链接(例如myprotocol://mysite.com/action/data)时,可以打开应用。

<intent-filter>
    <data android:scheme="myprotocol" android:host="mysite.com"/>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

当我尝试将其添加到MvvmCross应用程序中的AndroidManifest文件时,似乎只有视图被加载,而ViewModel没有链接到它。我似乎无法找到有关如何加载ViewModel和获取我的意图数据(网址的data部分)的任何信息。

以前有人这样做过吗?

1 个答案:

答案 0 :(得分:2)

我有一个应用程序可以响应扫描NFC标签,我也有类似的情况。

我的解决方案是在致电OnCreate后立即在base.OnCreate(bundle)覆盖中添加以下内容:

if (null == ViewModel)
{
    //This should only happen when the Intent is not an Mvx one. I.e. when having scanned
    //NFC tag. We need to load the ViewModel manually.
    var loaderService = Mvx.Resolve<IMvxViewModelLoader>();
    ViewModel = (ScanViewModel) loaderService.LoadViewModel(
        new MvxViewModelRequest(typeof (ScanViewModel), null, null, null), null);
}

正如评论所说,意图不是来自MvvmCross的意图。这意味着告诉MvvmCross要加载哪个ViewModel的包不存在。所以我要做的就是自己创建ViewModel。