【问题标题】:Open MvvmCross app via link with data通过数据链接打开 MvvmCross 应用程序
【发布时间】:2016-02-09 09:45:35
【问题描述】:

在原生 Android 应用中,您可以为 Manifest 文件中的活动定义 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 部分)。

以前有人做过吗?

【问题讨论】:

    标签: android android-intent xamarin mvvmcross intentfilter


    【解决方案1】:

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

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

    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);
    }
    

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

    【讨论】:

    • 感谢您指引我正确的方向。虽然当我尝试从 URL 意图过滤器转到我的视图时,MvvmCross 说:OnViewNewIntent called - but this is not fully handled wihtin MvvmCross currently.,它似乎并没有直接转到具有指定数据的活动。
    • 您是否在 Activity 上设置了任何 LaunchModes?我使用LaunchMode = LaunchMode.SingleTopClearTaskOnLaunch = true
    • 我设法通过在另一个活动中开始,然后转到正确的视图并传递数据来做到这一点。不过感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多