Android(安卓)根据 Url 跳转应用
16lz
2022-08-06
1. 获取到 url
2. 根据 url 类型做处理
schemes
在 Android ,我们可以定义特定的 schemes url. 然后通过代码:
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
只要有 app 在 AndroidManifest 中定义了相同的 schemes url ,就能直接跳转。
url
如果是普通的以 http,https,ftp 为开头的 url ,我们则可以直接
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
这个时候,系统会弹出多个选项让用户选择用哪个应用启动。但是如果我们想要直接启动对应的应用呢?
private static Intent handleHttpIntent(String url, String tag) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); ResolveInfo resolveInfo = getResolveInfo(intent, tag); if (null != resolveInfo) { try { intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); return intent; } catch (Exception e) { e.printStackTrace(); } } return null; } private static ResolveInfo getResolveInfo(Intent intent, String tag) { List resolveInfos = AppUtil.getApp() .getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resolveInfos) { //use the title or Remotely configured package name to find the target app if (resolveInfo.activityInfo.packageName.contains(tag)) { return resolveInfo; } } return null; }
这种情况,我们就只能获取所有能跳转的应用列表,通过我们远程配置的 tag 来获取指定跳转的应用了。
完整代码
/** * return the intent of start other apps by url intent * * @param url * url * @param tag * Used to pick the specified application among the candidates, * it should be the package name or the key word of the package name * * @return the intent of the specified app */ public static Intent getCallOtherAppsByUrlIntent(String url, String tag) { if (url.startsWith("https") || url.startsWith("http") || url.startsWith("ftp")) { return handleHttpIntent(url, tag); } else { try { return Intent.parseUri(url, Intent.URI_INTENT_SCHEME); } catch (URISyntaxException e) { e.printStackTrace(); } } return null; } private static Intent handleHttpIntent(String url, String tag) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); ResolveInfo resolveInfo = getResolveInfo(intent, tag); if (null != resolveInfo) { try { intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); return intent; } catch (Exception e) { e.printStackTrace(); } } return null; } private static ResolveInfo getResolveInfo(Intent intent, String tag) { List resolveInfos = AppUtil.getApp() .getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resolveInfos) { //use the title or Remotely configured package name to find the target app if (resolveInfo.activityInfo.packageName.contains(tag)) { return resolveInfo; } } return null; }
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
- Android中不同应用间实现SharedPreferences数据共享
- 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
- Android(安卓)- Manifest 文件 详解
- Android之应用程序基础
- android 获取唯一标识
- android拍照与读取相册
- Android四大组件的理解