Android跳轉(zhuǎn)到應(yīng)用商店詳情頁(yè)面(更全面)

換到新的公司有一段日子盾饮,最近有個(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è)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旬盯,一起剝皮案震驚了整個(gè)濱河市台妆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胖翰,老刑警劉巖接剩,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萨咳,居然都是意外死亡懊缺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門培他,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桐汤,“玉大人,你說(shuō)我怎么就攤上這事靶壮。” “怎么了员萍?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵腾降,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我碎绎,道長(zhǎng)螃壤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任筋帖,我火速辦了婚禮奸晴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘日麸。我一直安慰自己寄啼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布代箭。 她就那樣靜靜地躺著墩划,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗡综。 梳的紋絲不亂的頭發(fā)上乙帮,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音极景,去河邊找鬼察净。 笑死驾茴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的氢卡。 我是一名探鬼主播锈至,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼异吻!你這毒婦竟也來(lái)了裹赴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诀浪,失蹤者是張志新(化名)和其女友劉穎棋返,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雷猪,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睛竣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了求摇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片射沟。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖与境,靈堂內(nèi)的尸體忽然破棺而出验夯,到底是詐尸還是另有隱情,我是刑警寧澤摔刁,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布挥转,位于F島的核電站,受9級(jí)特大地震影響共屈,放射性物質(zhì)發(fā)生泄漏绑谣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一拗引、第九天 我趴在偏房一處隱蔽的房頂上張望借宵。 院中可真熱鬧,春花似錦矾削、人聲如沸壤玫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垦细。三九已至,卻和暖如春挡逼,著一層夾襖步出監(jiān)牢的瞬間括改,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘱能,地道東北人吝梅。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惹骂,于是被迫代替她去往敵國(guó)和親苏携。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • 穿過(guò)風(fēng)对粪,穿過(guò)云右冻,穿過(guò)這世間所有細(xì)小塵埃。時(shí)間停擺著拭,往事歸來(lái)纱扭。 我在江南的校園里看樹葉變黃飄落,然后再發(fā)出新芽儡遮,繁花...
    云游四海去閱讀 322評(píng)論 0 1
  • 晨曦
    旅行的膠卷閱讀 183評(píng)論 0 0
  • Dream你的夢(mèng)想是什么鄙币。你的近期唯一目標(biāo)是什么肃叶。 1、年薪24萬(wàn)@月入2萬(wàn) 2.2月17日過(guò)年之前先賺到5萬(wàn) 3...
    學(xué)霸教練李斌閱讀 366評(píng)論 0 0
  • 春現(xiàn)花萬(wàn)朵十嘿,獨(dú)處斷橋邊因惭。 不知為誰(shuí)開,寂寞無(wú)人語(yǔ)绩衷。
    低情商的瘋子閱讀 77評(píng)論 0 0