Vik*_*nin 10 android intentfilter android-intent chrome-custom-tabs
该应用程序具有活动以显示特定网站的内容,例如"example.com".因此,为了在app中显示"example.com/product/123"的内容,我有意图过滤:
<activity
android:name=".LinkInterceptorActivity">
<intent-filter android:priority="999">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.example.com"
android:scheme="http" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
但在某些情况下,我必须在浏览器中显示此内容,因此我决定使用chrome自定义选项卡,以使其更快,并将用户留在应用程序中.我尝试使用intent builder在自定义选项卡中显示url:
new CustomTabsIntent.Builder().build().launchUrl(activity, url);
但它向我显示了"使用...完成操作"对话框,其中我看到了我的应用程序和设备上的所有浏览器.如果我选择我的应用程序,它会跳转到循环并再次显示对话框,但如果我选择chrome它会按预期工作.
那么问题是如何为Chrome自定义标签创建显式Intent?
Mat*_*ini 10
你可以使用setPackage:
String PACKAGE_NAME = "com.android.chrome";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.intent.setData(uri);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(customTabsIntent.intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resolveInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
if (TextUtils.equals(packageName, PACKAGE_NAME))
customTabsIntent.intent.setPackage(PACKAGE_NAME);
}
customTabsIntent.launchUrl(this, uri);
Run Code Online (Sandbox Code Playgroud)
我使用过@Mattia Maestrini的答案,但我认为有些人可能需要改变
我已在Nexus 5(6.0.1)中安装了最新的Chrome(2016年8月8日更新)
但是我没有把Chrome Package"com.android.chrome"放到resolveInfoList中,我必须做更改,然后它在我的手机上工作正常
packageManager.queryIntentActivities(customTabsIntent.intent, PackageManager.MATCH_DEFAULT_ONLY);
Run Code Online (Sandbox Code Playgroud)
上面的查询没有给我Chrome的包名
String PACKAGE_NAME = "com.android.chrome";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.intent.setData(Uri.parse(url));
PackageManager packageManager = getPackageManager();
List<ApplicationInfo> resolveInfoList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo applicationInfo : resolveInfoList) {
String packageName = applicationInfo.packageName;
if (TextUtils.equals(packageName, PACKAGE_NAME)) {
customTabsIntent.intent.setPackage(PACKAGE_NAME);
break;
}
}
customTabsIntent.launchUrl(this, Uri.parse(url));
Run Code Online (Sandbox Code Playgroud)
我已经测试了上面的代码,它在我的手机上工作正常
| 归档时间: |
|
| 查看次数: |
2476 次 |
| 最近记录: |