Android跳转到应用商店的APP详情页面工具类(检测Google Play跳转网页详情)

完整代码:

/**
 * 跳转到本机应用市场
 */
object MarketTools {

    const val HUAWEI_BRAND = "HUAWEI";//HUAWEI_PACKAGE_NAME
    const val HONOR_BRAND = "HONOR";//HUAWEI_PACKAGE_NAME
    const val OPPO_BRAND = "OPPO";//OPPO_PACKAGE_NAME
    const val MEIZU_BRAND = "MEIZU";//MEIZU_PACKAGE_NAME
    const val VIVO_BRAND = "VIVO";//VIVO_PACKAGE_NAME
    const val XIAOMI_BRAND = "XIAOMI";//XIAOMI_PACKAGE_NAME
    const val LENOVO_BRAND = "LENOVO";//LIANXIANG_PACKAGE_NAME //Lenovo
    const val ZTE_BRAND = "ZTE";//ZTE_PACKAGE_NAME
    const val XIAOLAJIAO_BRAND = "XIAOLAJIAO";//ZHUOYI_PACKAGE_NAME
    const val QH360_BRAND = "360";//QH360_PACKAGE_NAME
    const val NIUBIA_BRAND = "NUBIA";//NIUBIA_PACKAGE_NAME
    const val ONE_PLUS_BRAND = "ONEPLUS";//OPPO_PACKAGE_NAME
    const val MEITU_BRAND = "MEITU";//MEITU_PACKAGE_NAME
    const val SONY_BRAND = "SONY";//GOOGLE_PACKAGE_NAME
    const val GOOGLE_BRAND = "GOOGLE";//GOOGLE_PACKAGE_NAME
    const val HTC_BRAND = "HTC";//未知应用商店包名
    const val ZUK_BRAND = "ZUK";//未知应用商店包名


    const val OPPO_PACKAGE_NAME = "com.oppo.market";//oppo
    const val VIVO_PACKAGE_NAME = "com.bbk.appstore";//vivo
    const val HUAWEI_PACKAGE_NAME = "com.huawei.appmarket";//华为
    const val QH360_PACKAGE_NAME = "com.qihoo.appstore";//360
    const val XIAOMI_PACKAGE_NAME = "com.xiaomi.market";//小米
    const val MEIZU_PACKAGE_NAME = "com.meizu.mstore";//,魅族
    const val LIANXIANG_PACKAGE_NAME = "com.lenovo.leos.appstore";//联想
    const val ZTE_PACKAGE_NAME = "zte.com.market";//zte
    const val ZHUOYI_PACKAGE_NAME = "com.zhuoyi.market";//卓易
    const val GOOGLE_PACKAGE_NAME = "com.android.vending";//google
    const val NIUBIA_PACKAGE_NAME = "com.nubia.neostore";//努比亚
    const val MEITU_PACKAGE_NAME = "com.android.mobile.appstore";//美图
    const val BAIDU_PACKAGE_NAME = "com.baidu.appsearch";//baidu
    const val TENCENT_PACKAGE_NAME = "com.tencent.android.qqdownloader";//应用宝
    const val PPZHUSHOU_PACKAGE_NAME = "com.pp.assistant";//pp助手
    const val ANZHI_PACKAGE_NAME = "com.goapk.market";//安智市场
    const val WANDOUJIA_PACKAGE_NAME = "com.wandoujia.phonenix2";//豌豆荚
    const val SUONI_PACKAGE_NAME = "com.android.vending";//索尼

    private const val schemaUrl = "market://details?id="

    const val SCHEMA_URL_DINGDING = "com.alibaba.android.rimet"

    /**
     * 跳转到Google Play
     */
    fun startGooglePlay(mContext: Context, mPackageName : String) : Boolean {
        //检测谷歌Play是否在手机上安装,如果安装,则跳转
        val isExit:Boolean = isCheckMarket(GOOGLE_PACKAGE_NAME, mContext);
        if (isExit) {
            //跳转Google Play
            startMarket(mContext, mPackageName, GOOGLE_PACKAGE_NAME);
            return true;
        }
//        ToastUtils.showLong("Please install Google Play.")
        val intent: Intent = Intent(Intent.ACTION_VIEW)
        intent.data = Uri.parse("https://play.google.com/store/apps/details?id=" + mPackageName)
        mContext.startActivity(intent)
        return false
    }

    /***
     * 不指定包名
     * @param mContext
     */
    fun startMarket(mContext: Context) {
        val mPackageName = mContext.packageName;//得到包名
        startMarket(mContext, mPackageName)
    }

    /**
     * 指定包名
     *
     * @param mContext
     * @param mPackageName
     */
    fun startMarket(mContext : Context , mPackageName : String ) : Boolean {
        try {
            //获得手机厂商
            val deviceBrand = getDeviceBrand()
            //根据厂商获取对应市场的包名
            val brandName: String = deviceBrand.toUpperCase();//大写
            if (TextUtils.isEmpty(brandName)) {
                Log.e("MarketTools", "没有读取到手机厂商~~");
                return false;
            }
            val marketPackageName: String = getBrandName(brandName);
            if (marketPackageName.isEmpty()) {
                //手机不再列表里面,去尝试寻找
                //检测百度和应用宝是否在手机上安装,如果安装,则跳转到这两个市场的其中一个
                val isExit1:Boolean = isCheckMarket(BAIDU_PACKAGE_NAME, mContext);
                if (isExit1) {
                    //跳转百度商场
                    startMarket(mContext, mPackageName, BAIDU_PACKAGE_NAME);
                    return true;
                }
                val isExit2: Boolean = isCheckMarket(TENCENT_PACKAGE_NAME, mContext);
                if (isExit2) {
                    //跳转应用宝
                    startMarket(mContext, mPackageName, TENCENT_PACKAGE_NAME);
                    return true;
                }
            }
            startMarket(mContext, mPackageName, marketPackageName);
            return true;
        } catch (anf: ActivityNotFoundException ) {
            Log.e("MarketTools", "要跳转的应用市场不存在!");
        } catch (e: Exception ) {
            Log.e("MarketTools", "其他错误:" + e.message);
        }
        return false;
    }

    /***
     * 指定包名,指定市场
     * @param mContext
     * @param mPackageName
     * @param marketPackageName
     */
    fun startMarket(mContext : Context , mPackageName : String , marketPackageName: String ) {
        try {
            openMarket(mContext, mPackageName, marketPackageName);
        } catch (anf: ActivityNotFoundException ) {
            Log.e("MarketTools", "要跳转的应用市场不存在!");
        } catch (e: Exception ) {
            Log.e("MarketTools", "其他错误:" + e.message);
        }
    }

    /***
     * 打开应用市场
     * @param mContext
     * @param mPackageName
     * @param marketPackageName
     */
    fun openMarket(mContext : Context , mPackageName : String , marketPackageName: String ) {
        try {
            val  uri: Uri = Uri.parse(schemaUrl + mPackageName)
            val  mIntent = Intent(Intent.ACTION_VIEW, uri)
            mIntent.setPackage(marketPackageName);
            mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mContext.startActivity(mIntent);
        } catch (anf: ActivityNotFoundException) {
            Log.e("MarketTools", "要跳转的应用市场不存在!");
        } catch (e: Exception ) {
            Log.e("MarketTools", "其他错误:" + e.message);
        }
    }

    /***
     * 检测是否存在应用市场
     * @param mContext
     * @param mPackageName
     * @return
     */
    fun  isCheckMarket(mPackageName: String, mContext: Context) : Boolean{
        return isInstalled(mPackageName, mContext)
    }

    /****
     * 检查APP是否安装成功
     * @param packageName
     * @param context
     * @return
     */
    fun isInstalled(@NonNull mPackageName: String, mContext: Context): Boolean {
        if (mPackageName.isEmpty()) {
            return false
        }
        val packageInfo: PackageInfo? = try {
            mContext.packageManager.getPackageInfo(mPackageName, 0)
        } catch (e: PackageManager.NameNotFoundException) {
            null
        }

        return packageInfo!= null
    }


    fun getBrandName(brandName: String): String {
        when (brandName) {
            HUAWEI_BRAND -> {
                //华为
                return HUAWEI_PACKAGE_NAME;
            }
            OPPO_BRAND -> {
                //oppo
                return OPPO_PACKAGE_NAME;
            }
            VIVO_BRAND -> {
                //vivo
                return VIVO_PACKAGE_NAME;
            }
            XIAOMI_BRAND -> {
                //小米
                return XIAOMI_PACKAGE_NAME;
            }
            LENOVO_BRAND -> {
                //联想
                return LIANXIANG_PACKAGE_NAME;
            }
            QH360_BRAND -> {
                //360
                return QH360_PACKAGE_NAME;
            }
            MEIZU_BRAND -> {
                //魅族
                return MEIZU_PACKAGE_NAME;
            }
            HONOR_BRAND -> {
                //华为
                return HUAWEI_PACKAGE_NAME;
            }
            XIAOLAJIAO_BRAND -> {
                //小辣椒
                return ZHUOYI_PACKAGE_NAME;
            }
            ZTE_BRAND -> {
                //zte
                return ZTE_PACKAGE_NAME;
            }
            NIUBIA_BRAND -> {
                //努比亚
                return NIUBIA_PACKAGE_NAME;
            }
            ONE_PLUS_BRAND -> {
                //OnePlus
                return OPPO_PACKAGE_NAME;
            }
            MEITU_BRAND -> {
                //美图
                return MEITU_PACKAGE_NAME;
            }
            SONY_BRAND -> {
                //索尼
                return GOOGLE_PACKAGE_NAME;
            }
            GOOGLE_BRAND -> {
                //google
                return GOOGLE_PACKAGE_NAME;
            }
            else -> return ""
        }
    }


    /**
     * 获取手机厂商
     */
    private fun getDeviceBrand(): String {
        return if (Build.BRAND == null)  ""  else Build.BRAND
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心上学事上练

感谢您的支持,让我们一起成长

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值