Android 跳转到华为钱包、小米钱包、Samsung Pay、OPPO钱包、魅族钱包主页面

本文分享了一种在金融项目中实现跳转至手机自带钱包APP首页的方法,通过获取华为钱包、小米钱包、SamsungPay等应用的包名及主页面全路径,提供了核心代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的一个金融项目中有一个跳转到手机自带的钱包APP的首页的需求,咋一看这还不简单,但是网上一搜资料特别少,连华为钱包、小米钱包、SamsungPay这些应用的包名都找不到,就更别说这些应用的主页面的全路径了。最终经过真机连通Android Studio 查看日志才获取这些关键信息,以下是实现的核心代码,请诸位参阅!

package com.yongbo.wallet;

import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final String PKG_HUAWEI_PAY = "com.huawei.wallet";
    private static final String PKG_XIAOMI_PAY = "com.mipay.wallet";
    private static final String PKG_SAMSUNG_PAY = "com.samsung.android.spay";
    private static final String PKG_OPPO_PAY = "com.coloros.wallet";
    private static final String PKG_MEIZU_PAY = "com.meizu.flyme.wallet";

    private static final String HOME_HUAWEI_PAY = "com.huawei.wallet.view.MainActivity";
    private static final String HOME_XIAOMI_PAY = "com.mipay.wallet.ui.MipayEntryActivity";
    private static final String HOME_SAMSUNG_PAY = "com.samsung.android.spay.ui.SpayMainActivity";
    //    private static final String HOME_OPPO_PAY = "com.nearme.wallet.main.WalletIndexActivity"; // 会报安全异常导致闪退
    private static final String HOME_OPPO_PAY = "com.nearme.wallet.SplashActivity";
    private static final String HOME_MEIZU_PAY = "com.meizu.flyme.wallet.activity.WalletTabActivity";

    private Button btn_wallet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_wallet = findViewById(R.id.btn_wallet);

        btn_wallet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isAvilible(MainActivity.this, PKG_HUAWEI_PAY)) {
                    jumpToWallet(PKG_HUAWEI_PAY, HOME_HUAWEI_PAY);
                } else if (isAvilible(MainActivity.this, PKG_XIAOMI_PAY)) {
                    jumpToWallet(PKG_XIAOMI_PAY, HOME_XIAOMI_PAY);
                } else if (isAvilible(MainActivity.this, PKG_SAMSUNG_PAY)) {
                    jumpToWallet(PKG_SAMSUNG_PAY, HOME_SAMSUNG_PAY);
                } else if (isAvilible(MainActivity.this, PKG_OPPO_PAY)) {
                    jumpToWallet(PKG_OPPO_PAY, HOME_OPPO_PAY);
                } else if (isAvilible(MainActivity.this, PKG_MEIZU_PAY)) {
                    jumpToWallet(PKG_MEIZU_PAY, HOME_MEIZU_PAY);
                } else {
                    showDialog();
                }
            }
        });

    }

    private void jumpToWallet(String packageName, String mainClassPath) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ComponentName componentName = new ComponentName(packageName, mainClassPath);
        intent.setComponent(componentName);
        startActivity(intent);
    }

    public void showDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("您的设备尚未安装钱包应用!");
        builder.setTitle("提示");
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.create().show();
    }

    /**
     * 检查手机上是否安装了指定的软件
     *
     * @param context
     * @param packageName:应用包名
     * @return
     */
    private boolean isAvilible(Context context, String packageName) {
        //获取packagemanager
        final PackageManager packageManager = context.getPackageManager();
        //获取所有已安装程序的包信息
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        //用于存储所有已安装程序的包名
        List<String> packageNames = new ArrayList<String>();
        //从pinfo中将包名字逐一取出,压入pName list中
        if (packageInfos != null) {
            for (int i = 0; i < packageInfos.size(); i++) {
                String packName = packageInfos.get(i).packageName;
                packageNames.add(packName);
            }
        }
        //判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
        return packageNames.contains(packageName);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值