将 Intent 网址转换为 Android Intent

Posted

技术标签:

【中文标题】将 Intent 网址转换为 Android Intent【英文标题】:Convert intent web url to Android Intent 【发布时间】:2021-07-31 08:25:35 【问题描述】:

我目前在我的应用程序中集成了一个 webview (webview_flutter: 2.0.4) 用于支付流程。 不幸的是,在某些时候会启动以下网址:

intent://payment#Intent;action=ch.twint.action.TWINT_PAYMENT;scheme=twint;S.code=18223;S.startingOrigin=EXTERNAL_WEB_BROWSER;S.browser_fallback_url=;end

此 URL 应启动“twint”应用程序(瑞士支付解决方案) 不幸的是它不起作用,所以我试图重新创建相应的android意图(android_intent:2.0.0)但我不能。

谁能帮助我或任何其他解决方案的想法?

我也尝试过使用 url_launcher 扩展,但我认为这不是正确的解决方案。

【问题讨论】:

对我的问题有什么想法吗? 你的问题解决了吗? 你解决了吗?? 【参考方案1】:

我不知道你在使用flutter时是否可以执行原生kotlin/java代码,但这可以通过使用以下代码(取自https://***.com/a/35612860)来(原生)解决:

override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean 

        if (url.startsWith("intent://")) 
            val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
            return if (intent.resolveActivity(context.packageManager) != null) 
                context.startActivity(intent)
                true
             else 
                // handle error, e.g. open playstore
                true
            
        
        /* 
          Rest of override url handling
          ...
        */
    

在 Android API 30+ 上,intent.resolveActivity 将仅在您的 AndroidManifest.xml 中有以下条目时检测已安装的 twint 应用程序:

<queries>
    <intent>
        <action android:name="ch.twint.action.TWINT_PAYMENT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="twint" />
    </intent>
</queries>

【讨论】:

我会尽快尝试您的解决方案。在 Flutter 中可以有效地执行原生 android 代码。 嗨@alexdess,如果您安装了多个 twint 应用程序,此解决方案是否有效?比如CreditSuisse Twint、BVC Twint等。它会打开android原生弹窗来选择你要支付的应用吗?

以上是关于将 Intent 网址转换为 Android Intent的主要内容,如果未能解决你的问题,请参考以下文章

将 fileChooserParams 中的 mime 类型转换为 Intent.setType 的正确格式

Android O 上的 android.intent.action.SEND - URI 包含 file:// 网址而不是 content://

java中如何让byte[]与string类型转换后,保持不变

将列表列表转换为元组列表列表

android 常用的代码

android:怎样将Uri类型的图片数据转换成流