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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...