You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API 30中intent.resolveActivity返回null UPI支付无法唤起已安装应用

问题根源
  • AndroidManifest.xml中queries标签配置错误:你实际发起支付用的Intent action是ACTION_VIEW,但你配置的查询action是android.intent.action.CHOOSER,和实际唤起UPI应用的Intent不匹配,Android 11及以上的包可见性机制会过滤掉所有UPI应用,导致查询结果为空。
  • 代码逻辑存在两处可优化点:一是原代码调用setData时直接传入String类型的url,未转换为Uri类型,会存在类型错误;二是用原始Intent调用resolveActivity的判断方式在高版本系统上可靠性低于先查询所有支持的应用列表。
修复步骤
  1. 修改AndroidManifest.xml中的queries配置:
<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="upi" />
    </intent>
</queries>
  1. 调整支付唤起逻辑:
String url = "upi://pay?pa=fcbizpayg@freecharge&pn=PAYG&mc=7299&tid=AXIFRCO1506202118501b5bu4s903cafgu4&tr=AXIFRCO1506202118501b5bu4s903cafgu4&am=50.00&cu=INR";

Intent intent = new Intent(Intent.ACTION_VIEW);
// 修正:将String类型的url转换为Uri类型
intent.setData(Uri.parse(url));

// 先查询系统中所有可处理UPI支付Intent的应用
List<ResolveInfo> upiApps = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (!upiApps.isEmpty()) {
    Intent appChooser = Intent.createChooser(intent, "Pay using");
    startActivityForResult(appChooser, PAYMENT_REQUEST);
} else {
    Toast.makeText(PaymeroUserDetailsActivity.this, "No UPI app found! Please Install to Proceed!", Toast.LENGTH_LONG).show();
}
补充说明

如果你的应用targetSdkVersion >=30,上述配置即可生效;如果是更低版本,不需要配置queries标签,调整代码逻辑即可正常运行。

内容的提问来源于stack exchange,提问作者Amit Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:48:02