微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 自动关闭chrome自定义选项卡

我有一个用于打开手机浏览器的应用程序,用户将被重定向到我的webapp,在某个用户操作之后,webapp会使用intent过滤器重定向回应用程序
<application>     
<activity
                android:name="com.xyz.sdk.someActivity"
                android:allowTaskreparenting="true"
                android:configChanges="keyboardHidden|orientation|keyboard|screenSize"
                android:launchMode="singleTask"
                android:noHistory="true"
                android:theme="@android:style/Theme.NoTitleBar">
                <intent-filter>
                    <data android:scheme="someString-${applicationId}" />
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.broWSABLE" />
                </intent-filter>
            </activity>
 </application>

最近我迁移到使用Chrome自定义标签而不是浏览器(由于安全问题,Webview不是一个选项)

不幸的是,当在Chrome自定义标签重定向回应用时,Chrome自定义标签不会自动关闭.即使我可以通过日志验证应用程序已收到响应,自定义选项卡仍保持打开并保持在最顶层,因此用户无法看到应用程序上发生的更新,直到他关闭应用程序.

我发现一个解决方法是在启动我的自定义选项卡时设置NEW_TASK标志,但这使我的应用程序和自定义选项卡显示为两个单独的应用程序,这是我首先离开浏览器的全部原因.

总结:我有App A,它打开一个自定义选项卡,在自定义选项卡中打开的webapp使用intent过滤器重定向回App A,但vustom选项卡不会关闭并保持在顶部,直到用户手动关闭它.

我已经尝试为自定义选项卡意图设置NO_HISTORY标志但它没有任何区别.

自定义标签代码

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
                         .setShowTitle(true)
                         .setToolbarColor(getToolBarColor())
                         .setStartAnimations(this,android.R.anim.slide_in_left,android.R.anim.slide_out_right)
                         .setExitAnimations(this,android.R.anim.slide_out_right)
                         .build();
                 customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                 customTabsIntent.launchUrl(this,Uri.parse(url));
                 customTabsIntent.launchUrl(this,Uri.parse(url));

UPDATE
我已经意识到如果意图过滤器重定向回到另一个应用程序,则自定义选项卡成功关闭(前提是它是一个单一活动,没有历史记录设置为true)
但就我而言,我们需要重定向调用自定义选项卡的同一活动.

解决方法

我也面临同样的问题,但就我而言,它现在正在发挥作用.

我使用FLAG_ACTIVITY_NO_HISTORY和FLAG_ACTIVITY_CLEAR_TOP启动了自定义标签.

customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

而我的活动的launchMode是“singletop”.

<activity
    android:name=".someActivity"
    android:theme="@style/SomeTheme"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:noHistory="true"
    android:launchMode="singletop" >
    <intent-filter>
        <data android:scheme="intent" />
        <data android:scheme="myFile" />
        <data android:scheme="myScheme" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.broWSABLE" />
    </intent-filter>
</activity>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐