轉載請註明出處:https://blog.csdn.net/mythmayor/article/details/80279279
一、前言
一個比較常見的需求是,我們希望更多的人給我們千辛萬苦開發出來的應用進行打分、評價,那麼這時候我們可能希望在應用內部實現這樣的功能。本篇博客將清晰的告訴你如何實現這一功能。
二、實現功能的思路或步驟
1.首先我們肯定要知道自己的應用都上線到哪些平臺(應用商店)了。然後要根據這些已知平臺來進行過濾,過濾出在自己的設備上安裝了哪些。
2.將過濾出的這些應用商店展示給用戶,如果沒有安裝任何相關應用商店則提示用戶“暫無安裝相關應用商店”。
3.用戶點擊了某應用商店之後,則跳轉到該應用商店的APP詳情頁。
4.下面列出了比較核心的代碼,可進行參考。
/**
* 過濾出已經安裝的包名集合
*
* @param context
* @param pkgs 待過濾包名集合
* @return 已安裝的包名集合
*/
public ArrayList<String> getFilterInstallMarkets(Context context, ArrayList<String> pkgs) {
appInfos.clear();
ArrayList<String> appList = new ArrayList<String>();
if (context == null || pkgs == null || pkgs.size() == 0)
return appList;
PackageManager pm = context.getPackageManager();
List<PackageInfo> installedPkgs = pm.getInstalledPackages(0);
int li = installedPkgs.size();
int lj = pkgs.size();
for (int j = 0; j < lj; j++) {
for (int i = 0; i < li; i++) {
String installPkg = "";
String checkPkg = pkgs.get(j);
PackageInfo packageInfo = installedPkgs.get(i);
try {
installPkg = packageInfo.packageName;
} catch (Exception e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(installPkg))
continue;
if (installPkg.equals(checkPkg)) {
// 如果非系統應用,則添加至appList,這個會過濾掉系統的應用商店,如果不需要過濾就不用這個判斷
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
//將應用相關信息緩存起來,用於自定義彈出應用列表信息相關用
AppInfo appInfo = new AppInfo();
appInfo.setAppName(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
appInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(getPackageManager()));
appInfo.setPackageName(packageInfo.packageName);
appInfo.setVersionCode(packageInfo.versionCode);
appInfo.setVersionName(packageInfo.versionName);
appInfos.add(appInfo);
appList.add(installPkg);
}
break;
}
}
}
return appList;
}
//自定義的AppInfo
public class AppInfo {
private String appName;
private Drawable appIcon;
private String packageName;
private int versionCode;
private String versionName;
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public Drawable getAppIcon() {
return appIcon;
}
public void setAppIcon(Drawable appIcon) {
this.appIcon = appIcon;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public int getVersionCode() {
return versionCode;
}
public void setVersionCode(int versionCode) {
this.versionCode = versionCode;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
}
/**
* 跳轉到應用市場app詳情界面
*
* @param appPkg App的包名
* @param marketPkg 應用市場包名
*/
public void launchAppDetail(String appPkg, String marketPkg) {
try {
if (TextUtils.isEmpty(appPkg))
return;
Uri uri = Uri.parse("market://details?id=" + appPkg);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (!TextUtils.isEmpty(marketPkg))
intent.setPackage(marketPkg);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
三、常見的應用商店及其包名
com.tencent.android.qqdownloader //騰訊應用寶
com.qihoo.appstore //360手機助手
com.baidu.appsearch //百度手機助手
com.xiaomi.market //小米應用商店
com.huawei.appmarket //華爲應用商店
com.wandoujia.phoenix2 //豌豆莢
com.dragon.android.pandaspace //91手機助手
com.hiapk.marketpho //安智應用商店
com.yingyonghui.market //應用匯
com.tencent.qqpimsecure //QQ手機管家
com.mappn.gfan //機鋒應用市場
com.pp.assistant //PP手機助手
com.oppo.market //OPPO應用商店
cn.goapk.market //GO市場
zte.com.market //中興應用商店
com.yulong.android.coolmart //宇龍Coolpad應用商店
com.lenovo.leos.appstore //聯想應用商店
com.coolapk.market”); //cool市場
com.meizu.mstore”); //魅族應用商店
cn.ninegame.gamemanager //阿里九遊