換到新的公司有一段日子盾饮,最近有個(gè)新需求,優(yōu)先跳到OS的應(yīng)用市場(chǎng)的詳情頁(yè)戏阅,引導(dǎo)用戶進(jìn)行評(píng)價(jià)昼弟。
這里囊括了大部分的國(guó)內(nèi)市場(chǎng),如果沒有(有可能是包名更新了)奕筐,最終采用原始的方式舱痘,讓用戶選擇变骡。
(fixed:修復(fù)某些老手機(jī)會(huì)因?yàn)檎也坏饺魏问袌?chǎng)而報(bào)錯(cuò))
/**
* Created by K.W. on 2018/6/11.
*/
public class AppMarketUtils {
//小米應(yīng)用商店
public static final String PACKAGE_MI_MARKET = "com.xiaomi.market";
public static final String MI_MARKET_PAGE = "com.xiaomi.market.ui.AppDetailActivity";
//魅族應(yīng)用商店
public static final String PACKAGE_MEIZU_MARKET = "com.meizu.mstore";
public static final String MEIZU_MARKET_PAGE = "com.meizu.flyme.appcenter.activitys.AppMainActivity";
//VIVO應(yīng)用商店
public static final String PACKAGE_VIVO_MARKET = "com.bbk.appstore";
public static final String VIVO_MARKET_PAGE = "com.bbk.appstore.ui.AppStoreTabActivity";
//OPPO應(yīng)用商店
public static final String PACKAGE_OPPO_MARKET = "com.oppo.market";
public static final String OPPO_MARKET_PAGE = "a.a.a.aoz";
//華為應(yīng)用商店
public static final String PACKAGE_HUAWEI_MARKET = "com.huawei.appmarket";
public static final String HUAWEI_MARKET_PAGE = "com.huawei.appmarket.service.externalapi.view.ThirdApiActivity";
//ZTE應(yīng)用商店
public static final String PACKAGE_ZTE_MARKET = "zte.com.market";
public static final String ZTE_MARKET_PAGE = "zte.com.market.view.zte.drain.ZtDrainTrafficActivity";
//360手機(jī)助手
public static final String PACKAGE_360_MARKET = "com.qihoo.appstore";
public static final String PACKAGE_360_PAGE = "com.qihoo.appstore.distribute.SearchDistributionActivity";
//酷市場(chǎng) -- 酷安網(wǎng)
public static final String PACKAGE_COOL_MARKET = "com.coolapk.market";
public static final String COOL_MARKET_PAGE = "com.coolapk.market.activity.AppViewActivity";
//應(yīng)用寶
public static final String PACKAGE_TENCENT_MARKET = "com.tencent.android.qqdownloader";
public static final String TENCENT_MARKET_PAGE = "com.tencent.pangu.link.LinkProxyActivity";
//PP助手
public static final String PACKAGE_ALI_MARKET = "com.pp.assistant";
public static final String ALI_MARKET_PAGE = "com.pp.assistant.activity.MainActivity";
//豌豆莢
public static final String PACKAGE_WANDOUJIA_MARKET = "com.wandoujia.phoenix2";
// 低版本可能是 com.wandoujia.jupiter.activity.DetailActivity
public static final String WANDOUJIA_MARKET_PAGE = "com.pp.assistant.activity.PPMainActivity";
//UCWEB
public static final String PACKAGE_UCWEB_MARKET = "com.UCMobile";
public static final String UCWEB_MARKET_PAGE = "com.pp.assistant.activity.PPMainActivity";
// 彈起評(píng)價(jià)彈窗
public static void showDialog(final Context context) {
new IntentUtils.Builder(context)
.to(MarketAlertActivity.class)
.anim(R.anim.stay, R.anim.stay)
.build().start();
}
// 進(jìn)入應(yīng)用市場(chǎng)詳情頁(yè)
public static void gotoMarket(Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + AppUtils.getPackageName(context)));
String[] keys = getKeys(context);
if (keys != null) {
intent.setClassName(keys[0], keys[1]);
}
//修復(fù)某些老手機(jī)會(huì)因?yàn)檎也坏饺魏问袌?chǎng)而報(bào)錯(cuò)
if (AppUtils.isIntentAvailable(context, intent)) {
context.startActivity(intent);
} else {
ToastUitls.show(context, context.getString(R.string.no_market));
}
}
private static String[] getKeys(Context context) {
String[] keys = new String[2];
if (AppUtils.isPackageExist(context, PACKAGE_MI_MARKET)) {
keys[0] = PACKAGE_MI_MARKET;
keys[1] = MI_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_VIVO_MARKET)) {
keys[0] = PACKAGE_VIVO_MARKET;
keys[1] = VIVO_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_OPPO_MARKET)) {
keys[0] = PACKAGE_OPPO_MARKET;
keys[1] = OPPO_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_HUAWEI_MARKET)) {
keys[0] = PACKAGE_HUAWEI_MARKET;
keys[1] = HUAWEI_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_ZTE_MARKET)) {
keys[0] = PACKAGE_ZTE_MARKET;
keys[1] = ZTE_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_COOL_MARKET)) {
keys[0] = PACKAGE_COOL_MARKET;
keys[1] = COOL_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_360_MARKET)) {
keys[0] = PACKAGE_360_MARKET;
keys[1] = PACKAGE_360_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_MEIZU_MARKET)) {
keys[0] = PACKAGE_MEIZU_MARKET;
keys[1] = MEIZU_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_TENCENT_MARKET)) {
keys[0] = PACKAGE_TENCENT_MARKET;
keys[1] = TENCENT_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_ALI_MARKET)) {
keys[0] = PACKAGE_ALI_MARKET;
keys[1] = ALI_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_WANDOUJIA_MARKET)) {
keys[0] = PACKAGE_WANDOUJIA_MARKET;
keys[1] = WANDOUJIA_MARKET_PAGE;
} else if (AppUtils.isPackageExist(context, PACKAGE_UCWEB_MARKET)) {
keys[0] = PACKAGE_UCWEB_MARKET;
keys[1] = UCWEB_MARKET_PAGE;
}
if (TextUtils.isEmpty(keys[0])) {
return null;
} else {
return keys;
}
}
}
AppUtils 相關(guān)方法:
/**
* 獲取app包名
*
* @return 返回包名
*/
public static String getPackageName(Context context) {
try {
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(context.getPackageName(),
0);
return info.packageName;
} catch (NameNotFoundException e) {
return null;
}
}
/**
* @param context
* @param packageName
* @return
* @Title isPackageExist
* @Description .判斷package是否存在
* @date 2013年12月31日 上午9:49:59
*/
public static boolean isPackageExist(Context context, String packageName) {
PackageManager manager = context.getPackageManager();
Intent intent = new Intent().setPackage(packageName);
List<ResolveInfo> infos = manager.queryIntentActivities(intent,
PackageManager.GET_INTENT_FILTERS);
if (infos == null || infos.size() < 1) {
return false;
} else {
return true;
}
}
/**
* 檢測(cè) 響應(yīng)某個(gè)Intent的Activity 是否存在
* @param context
* @param intent
* @return
*/
@SuppressLint("WrongConstant")
public static boolean isIntentAvailable(Context context, Intent intent) {
final PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.GET_ACTIVITIES);
return list.size() > 0;
}
PS: 如果沒有在相應(yīng)的市場(chǎng)上線,需要相應(yīng)屏蔽一些IF判斷芭逝,如果該市場(chǎng)沒有這個(gè)APP塌碌,一般會(huì)進(jìn)入空白頁(yè)。