最近在项目中遇到了一个需求,那就是安卓客户端没有集成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;
}
}
}