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

安卓OnClickListener点击后Activity未启动,startActivityForResult废弃求替代方案

问题修复方案

核心原因

你遇到的无响应问题核心是startActivityForResult方法已在AndroidX Activity 1.2.0 & Fragment 1.3.0及以上版本废弃,同时未做意图有效性校验导致启动失败无反馈。

最简替代方案

步骤1:声明Activity Result启动器,替代原有onActivityResult逻辑

在Activity/Fragment成员变量位置添加如下代码:

private ActivityResultLauncher<Intent> googlePayLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK && result.getData() != null) {
            Log.d("result", result.getData().getStringExtra("Status"));
        }
    }
);

步骤2:修改点击事件逻辑,补充意图有效性校验

替换原有点击事件里的启动逻辑,同时增加应用存在性判断,避免无反应情况:

mBoutonPaye.setOnClickListener(new View.OnClickListener( ) {
    @Override
    public void onClick(View view) {
        Uri uri = new Uri.Builder()
                .scheme("upi")
                .appendQueryParameter("pa", "test@creditmutuel")
                .appendQueryParameter("pn", "TacosKing")
                .appendQueryParameter("mc", "1234")
                .appendQueryParameter("tr", "123456789")
                .appendQueryParameter("tn", "test")
                .appendQueryParameter("am","10.01")
                .appendQueryParameter("cu", "INR")
                .appendQueryParameter("url", "https://tes.merchant.website")
                .build();
        Intent intent = new Intent( Intent.ACTION_VIEW );
        intent.setData(uri);
        intent.setPackage(GOOGLE);
        // 新增校验:判断是否有可响应的应用
        if (intent.resolveActivity(getPackageManager()) != null) {
            // 用launch方法替代废弃的startActivityForResult
            googlePayLauncher.launch(intent);
        } else {
            // 可增加Toast提示用户未安装对应支付应用
            Toast.makeText(YourActivity.this, "未安装对应支付应用", Toast.LENGTH_SHORT).show();
        }
    }
});

额外注意项

  • 需确保项目依赖已引入AndroidX Activity和Fragment的对应版本,若未引入可在模块级build.gradle的dependencies中添加:
implementation 'androidx.activity:activity:1.7.2'
implementation 'androidx.fragment:fragment:1.6.1'
  • 确认你定义的GOOGLE常量对应的包名正确,若无需限制仅某应用响应可删除intent.setPackage(GOOGLE)代码,系统会自动弹出所有支持UPI协议的应用选择列表。
  • 若你的应用targetSdkVersion >= 30,需要在AndroidManifest.xml根标签下添加如下查询声明,避免应用存在但校验不通过的问题:
<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="upi" />
    </intent>
</queries>

内容的提问来源于stack exchange,提问作者Quentin Ramecourt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:54:04