Android 11/12版本使用Intent Chooser打开UPI支付应用失效求助
Android 11/12 无法弹出支付应用Intent Chooser的解决办法
Android 11及以上版本引入了软件包可见性限制,默认情况下应用无法发现未在声明中指定的第三方应用,这就是支付应用选择器在高版本系统中不显示的核心原因。以下是具体解决步骤:
在
AndroidManifest.xml中添加<queries>标签,声明需要访问的支付应用相关信息:- 按支付Intent的Action和Scheme声明(推荐,适配多数支付应用):
<queries> <!-- 适配UPI类支付应用的通用Scheme --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="upi" /> </intent> <!-- 如果你的支付用了自定义Action,也需添加 --> <intent> <action android:name="你的自定义支付Action" /> </intent> </queries> - 按具体应用包名声明(适合明确知道目标支付应用的场景):
<queries> <package android:name="com.google.android.apps.nbu.paisa.user" /> <!-- Google Pay --> <package android:name="com.phonepe.app" /> <!-- PhonePe --> <package android:name="in.org.npci.upiapp" /> <!-- BHIM UPI --> <!-- 添加其他需要支持的支付应用包名 --> </queries>
- 按支付Intent的Action和Scheme声明(推荐,适配多数支付应用):
检查Intent构造逻辑,确保参数正确并调用
createChooser:// 以UPI支付为例构造Intent Intent paymentIntent = new Intent(Intent.ACTION_VIEW); paymentIntent.setData(Uri.parse("upi://pay?pa=收款方UPI&pn=收款方名称&am=金额")); // 创建选择器 Intent chooser = Intent.createChooser(paymentIntent, "选择支付应用"); // 确认有可处理的应用再启动 if (paymentIntent.resolveActivity(getPackageManager()) != null) { startActivity(chooser); }避免滥用
QUERY_ALL_PACKAGES权限:这个权限可以绕过软件包可见性限制,但属于敏感权限,Google Play审核时需要提供合理的使用理由,优先使用<queries>精确声明更稳妥。
内容的提问来源于stack exchange,提问作者nihal kapoor
相关产品推荐
相关产品推荐

