原本以為應用評分是個很小的功能,但是一實現才發現真不是個小事。網上搜索資料沒有找到答案,在很多開發群里面詢問了很多人也沒有解決問題,最后分析log,反編譯看源碼才終於有了些眉目,好吧,上代碼:
1 try{ 2 Uri uri = Uri.parse("market://details?id="+getPackageName()); 3 Intent intent = new Intent(Intent.ACTION_VIEW,uri); 4 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 5 startActivity(intent); 6 }catch(ActivityNotFoundException e){ 7 Toast.makeText(context, "Couldn't launch the market !", Toast.LENGTH_SHORT).show(); 8 }
而且在測試時發現在有些奇葩的沒有安裝應用市場的手機上面會出現直接退出應用的bug,於是又對異常進行了處理,現在終於把問題完美解決啦~
在HTC手機上會默認跳轉到HTC商城,可以強制改變跳轉方法,讓應用跳轉到360市場,代碼如下:
Intent intent = new Intent(Intent.ACTION_VIEW);
//跳轉到360市場評分
ComponentName cn = new ComponentName("com.qihoo.appstore",
"com.qihoo.appstore.activities.SearchDistributionActivity");
intent.setComponent(cn);
intent.setData(Uri.parse("market://details?id=com.xiaoma.tuofu"));
startActivity(intent);
//判斷市場是否存在的方法
public static boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager();//獲取packagemanager
List< PackageInfo> pinfo = packageManager.getInstalledPackages(0);//獲取所有已安裝程序的包信息
List<String> pName = new ArrayList<String>();//用於存儲所有已安裝程序的包名
//從pinfo中將包名字逐一取出,壓入pName list中
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判斷pName中是否有目標程序的包名,有TRUE,沒有FALSE
}
//判斷360市場是否存在
if (GetUri.isAvilible(AppsActivity.this, "com.qihoo.appstore")) {
//市場存在
}else{
//市場不存在
}
/*********************************華麗的分割線********************************************/
public void test(View v) {
// 判斷360市場是否存在
if (isAvilible(My.this, "com.qihoo.appstore")) {
// 市場存在
Intent intent = new Intent(Intent.ACTION_VIEW);
// 跳轉到360市場評分
ComponentName cn = new ComponentName("com.qihoo.appstore",
"com.qihoo.appstore.activities.SearchDistributionActivity");
intent.setComponent(cn);
intent.setData(Uri
.parse("market://details?id=com.paopaobeauty.meinv"));
startActivity(intent);
} else {
// 市場不存在
Toast.makeText(getApplicationContext(), "請下載360手機助手", 0).show();
}
}
// 判斷市場是否存在的方法
public static boolean isAvilible(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();// 獲取packagemanager
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 獲取所有已安裝程序的包信息
List<String> pName = new ArrayList<String>();// 用於存儲所有已安裝程序的包名
// 從pinfo中將包名字逐一取出,壓入pName list中
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);// 判斷pName中是否有目標程序的包名,有TRUE,沒有FALSE
}