学而实习之 不亦乐乎

Android:App 打开淘宝商品

2024-04-23 20:21:19

一、准备工作

  • 首先需要知道店铺id或商品id
  • 淘宝app包名:com.taobao.taobao
  • 淘宝app展示店铺uri:taobao://shop.m.taobao.com/shop/shop_index.htm?shop_id=%1$s
  • 淘宝app展示商品uri:taobao://item.taobao.com/item.htm?id=%1$s
  • webView展示店铺uri:https://shop.m.taobao.com/shop/shop_index.htm?shop_id=%1$s
  • webView展示商品uri:https://item.taobao.com/item.htm?id=%1$

二、代码实现

基本思路是检测本地是否安装淘宝app,安装则打开淘宝app来显示商品,否则打开webView来显示。

public class TaoBaoHelper {

    /**
     * Check is installed package or not
     *
     * @param context context
     * @param pkgName package name
     * @return true:Installed;false:Not installed
     */
    public static boolean isPkgInstalled(Context context, String pkgName) {
        PackageInfo packageInfo;
        try {
            packageInfo = context.getPackageManager().getPackageInfo(pkgName, 0);
        } catch (PackageManager.NameNotFoundException e) {
            packageInfo = null;
            e.printStackTrace();
        }
        return packageInfo != null;
    }

    /**
     * @param activityOrFragment
     * @param taoBaoShopId       淘宝店铺id
     * @param taoBaoGoodsId      淘宝商品id
     * @param reqCode
     */
    private static void openTaobao(ComponentCallbacks activityOrFragment, String taoBaoShopId,
                                   String taoBaoGoodsId, int reqCode) {
        try {
            boolean shopEmpty = taoBaoShopId == null || TextUtils.isEmpty(taoBaoShopId);
            boolean goodsEmpty = taoBaoGoodsId == null && TextUtils.isEmpty(taoBaoGoodsId);
            if (shopEmpty && goodsEmpty) {
                return;
            }
            Context context = null;
            //Get context
            if (activityOrFragment instanceof AppCompatActivity) {
                context = (AppCompatActivity) activityOrFragment;
            } else if (activityOrFragment instanceof Fragment) {
                context = ((Fragment) activityOrFragment).getContext();
            } else if (activityOrFragment instanceof Fragment) {
                context = ((Fragment) activityOrFragment).getActivity();
            }
            if (isPkgInstalled(context, context.getString(R.string.taobao_package_name))) {
                // If Taobao app has Installed
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                String uriString;
                if (taoBaoShopId != null && !TextUtils.isEmpty(taoBaoShopId)) {
                    uriString = context.getString(R.string.taobao_app_shop, taoBaoShopId);
                } else {
                    uriString = context.getString(R.string.taobao_app_goods, taoBaoGoodsId);
                }
                Uri uri = Uri.parse(uriString);
                intent.setData(uri);
                if (context == null) {
                    return;
                }
                //跳转
                if (activityOrFragment instanceof AppCompatActivity) {
                    ((AppCompatActivity) activityOrFragment).startActivityForResult(intent, reqCode);
                } else if (activityOrFragment instanceof Fragment) {
                    ((Fragment) activityOrFragment).startActivityForResult(intent, reqCode);
                } else if (activityOrFragment instanceof Fragment) {
                    ((Fragment) activityOrFragment).startActivityForResult(intent, reqCode);
                }
            } else {
                // If Taobao app has not Installed
                String uriString;
                Intent intent = new Intent(context, WebViewActivity.class);
                if (taoBaoShopId != null && TextUtils.isEmpty(taoBaoShopId)) {
                    uriString = context.getString(R.string.taobao_web_shop, taoBaoShopId);
                } else {
                    uriString = context.getString(R.string.taobao_web_goods, taoBaoGoodsId);
                }
                intent.putExtra("tbLink", uriString);
                context.startActivity(intent);
            }
        }catch (Exception e){
            Toast.makeText(XcApplication.getsContext(),e.toString(),Toast.LENGTH_SHORT);
        }
    }

    /**
     * Shop
     *
     * @param activityOrFragment
     * @param taoBaoShopId
     * @param reqCode
     */
    public static void openShopInTaobao(ComponentCallbacks activityOrFragment,
                                        String taoBaoShopId, int reqCode) {
        openTaobao(activityOrFragment, taoBaoShopId, null, reqCode);
    }

    /**
     * Goods
     *
     * @param activityOrFragment
     * @param taoBaoGoodsId
     * @param reqCode
     */
    public static void openGoodsInTaobao(ComponentCallbacks activityOrFragment,
                                         String taoBaoGoodsId, int reqCode) {
        openTaobao(activityOrFragment, null, taoBaoGoodsId, reqCode);
    }
}