android – 如何检查Chrome是否支持Chrome自定义标签?

前端之家收集整理的这篇文章主要介绍了android – 如何检查Chrome是否支持Chrome自定义标签?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个活动,可以将外部网址加载到我的应用内的网页视图中.我想在可用时使用Chrome自定义标签,但我支持的设备可能没有支持它们的Chrome版本.

不支持CustomTabs的情况下,我想使用我的旧代码,但是当它们使用CustomTabsIntent.Builder()时.旧代码内容加载到Activity中包含的WebView中,我仍然可以在其中管理ActionBar.

我想写一个帮助方法,告诉我它是否支持,但我不知道如何.开发者页面上的信息非常简洁:
https://developer.chrome.com/multidevice/android/customtabs

它表示如果绑定成功,可以安全地使用自定义选项卡.有没有一种简单的绑定方法来测试它?

像这样我假设:

Intent serviceIntent = new Intent("android.support.customtabs.action.CustomTabsService");
serviceIntent.setPackage("com.android.chrome");
boolean customTabsSupported = bindService(serviceIntent,new CustomTabsServiceConnection() {
            @Override
            public void onCustomTabsServiceConnected(final ComponentName componentName,final CustomTabsClient customTabsClient) {}

            @Override
            public void onServiceDisconnected(final ComponentName name) {}
        },Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY);

if (customTabsSupported) {
    // is supported
}

解决方法

您可以使用PackageManager检查是否支持自定义选项卡,而不是绑定和解除绑定服务.
private static final String SERVICE_ACTION = "android.support.customtabs.action.CustomTabsService";
    private static final String CHROME_PACKAGE = "com.android.chrome";

    private static boolean isChromeCustomTabsSupported(@NonNull final Context context) {
        Intent serviceIntent = new Intent(SERVICE_ACTION);
        serviceIntent.setPackage(CHROME_PACKAGE);
        List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentServices(serviceIntent,0);
        return !(resolveInfos == null || resolveInfos.isEmpty());
    }

请注意,其他浏览器将来可能会支持自定义标签,因此您可能需要修改它以支持此案例.

猜你在找的Android相关文章