安卓通过链接打开淘宝客户端

最近在项目中遇到了一个需求,那就是安卓客户端没有集成SDK,通过链接打开淘宝客户端。在网上搜索了很多,自己综合并总结了一下,记录下来。

思路:首先判断手机上是否安装有淘宝客户端。如果有就跳转淘宝,如果没有则跳转网页。

 if (checkPackage(mContext, "com.taobao.taobao")) {
         Intent intent = new Intent();
         intent.setAction("android.intent.action.VIEW");
         Uri uri = Uri.parse(YourUrlPath);// 你的商品地址
         intent.setData(uri);
//       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//此句代码决定是否在APP内打开淘宝
//       intent.setClassName("com.taobao.taobao", "com.taobao.tao.detail.activity.DetailActivity");//商品详情地址
//       intent.setClassName(“com.taobao.taobao”,”com.taobao.tao.shop.router.ShopUrlRouterActivity”);  //商铺地址    没测试过
         startActivity(intent);
  } else {
                               
  }
public static boolean checkPackage(Context context, String packageName) {
        if (packageName == null || "".equals(packageName))
            return false;
        try {
            context.getPackageManager().getApplicationInfo(packageName, PackageManager
                    .GET_UNINSTALLED_PACKAGES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }

    }

除此之外,项目中还会遇到在自己的APP中打开第三方的APP。方法如下:

/**
 * 打开本地第三方应用
 *
 * @param pkg 第三方应用的包名
 * @param cls 第三方应用的进入的第一个Activity
 */
private void openApp(String pkg, String cls) {
    ComponentName componet = new ComponentName(pkg, cls);
    Intent intent = new Intent();
    intent.setComponent(componet);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

获取第三方应用的包名和进入的第一个Activity的方法如下:

private void getPkgAndCls(){
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    PackageManager mPackageManager = this.getPackageManager();
    List<ResolveInfo> mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);
    //按包名排序
    Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));
    for(ResolveInfo res : mAllApps){
        //该应用的包名和主Activity
        String pkg = res.activityInfo.packageName;
        String cls = res.activityInfo.name;
        LogUtil.i("data===","===pkg===" +pkg  );
        LogUtil.i("data===","===cls===" + cls );
    }
}
public class ShopAppUtil {

    public static void openTaoBaoApp(Context context, String title, String url) {
        Log.i("data===", "===url===" + url);
        if (checkPackage(context, "com.taobao.taobao")) {
            if (url.startsWith("https://")) {
                url = url.replaceFirst("https://", "taobao://");
            }
            if (url.startsWith("http://")) {
                url = url.replaceFirst("http://", "taobao://");
            }
            if (url.startsWith("tbopen://")) {
                url = url.replaceFirst("tbopen://", "taobao://");
            }
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            Uri uri = Uri.parse(url);
            intent.setData(uri);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } else {
            openWebView(context, title, url);
        }
    }

    public static void openTianMaoApp(Context context, String title, String url) {
        if (checkPackage(context, "com.tmall.wireless")) {
            if (url.startsWith("https://")) {
                url = url.replaceFirst("https://", "tmall://");
            }
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            Uri uri = Uri.parse(url);
            intent.setData(uri);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } else {
            openWebView(context, title, url);
        }
    }

    public static void openJingDongApp(Context context, String title, String url) {
        if (checkPackage(context, "com.jingdong.app.mall")) {
            if (url.startsWith("https://")) {
                url = url.replaceFirst("https://", "jingdong://");
            }
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            Uri uri = Uri.parse(url);
            intent.setData(uri);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } else {
            openWebView(context, title, url);
        }
    }

    public static void openPinDuoDuoApp(Context context, String title, String url) {
        if (checkPackage(context, "com.xunmeng.pinduoduo")) {
            if (url.startsWith("https://mobile.yangkeduo.com/app.html?launch_url=")) {
                url = url.replaceFirst("https://mobile.yangkeduo.com/app.html?launch_url=", "pinduoduo://com.xunmeng.pinduoduo/");
            }
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            Uri uri = Uri.parse("pinduoduo://com.xunmeng.pinduoduo/" + url);
            intent.setData(uri);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } else {
            openSystemWeb(context, url);
        }

    }


    public static void openWebView(Context context, String title, String url) {
        if (url.startsWith("taobao://")) {
            url = url.replaceFirst("taobao://", "https://");
        }
        if (url.startsWith("tbopen://")) {
            url = url.replaceFirst("tbopen://", "https://");
        }
        if (url.startsWith("tmall://")) {
            url = url.replaceFirst("tmall://", "https://");
        }
        if (url.startsWith("yangkeduo://")) {
            url = url.replaceFirst("yangkeduo://", "https://");
        }
        if (url.startsWith("pinduoduo://")) {
            url = url.replaceFirst("pinduoduo://", "https://");
        }
//        Intent intent = new Intent(context, WebViewActivity.class);
//        intent.putExtra(WebViewActivity.KEY_TITLE, title);
//        intent.putExtra(WebViewActivity.KEY_URL, url);
//        context.startActivity(intent);
    }

    public static void openSystemWeb(Context context, String url) {
        try {
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            Uri content_url = Uri.parse(url);
            intent.setData(content_url);
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static boolean checkPackage(Context context, String packageName) {
        if (packageName == null || "".equals(packageName)) return false;
        try {
            context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }

    }


}

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值