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;  }

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  3. Android中不同应用间实现SharedPreferences数据共享
  4. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  5. Android(安卓)- Manifest 文件 详解
  6. Android之应用程序基础
  7. android 获取唯一标识
  8. android拍照与读取相册
  9. Android四大组件的理解

随机推荐

  1. android 五子棋之小白java
  2. Android(安卓)>> 19. AndroidViewModel
  3. Android(安卓)利用ScaleDrawable实现缩放
  4. LeadTools Android(安卓)入门教学――运
  5. android调用第三方地图(URI)
  6. Android美工坊--listview更改选中时item
  7. 移植goahead到android或其他嵌入式linux
  8. 关于android:scrollbarStyle属性
  9. View类
  10. Ubuntu上怎么安装Eclipse Android(安卓)