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

Android中startIntentSenderForResult废弃后的替代方案及报错解决

解决Google Drive授权中ActivityResultLauncher的setIntentSender报错问题

错误原因

你遇到的Cannot resolve method 'setIntentSender' in 'Intent'报错,是因为Intent类本身没有setIntentSender()方法,之前的写法完全错误。正确的方式是通过IntentSenderRequest.Builder构建IntentSenderRequest实例,再传递给ActivityResultLauncher。

修正后的完整代码

1. 保留正确的ActivityResultLauncher定义

private final ActivityResultLauncher<IntentSenderRequest> authorizationLauncher = registerForActivityResult(
        new ActivityResultContracts.StartIntentSenderForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                // 授权成功,处理结果
                try {
                    handleSignInInent(Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(result.getData()));
                } catch (IOException | ApiException e) {
                    throw new RuntimeException(e);
                }
            } else {
                // 授权失败或被取消
                Log.i("TTTT", "Authorization failed or was canceled");
            }
        }
);

2. 修正授权UI启动代码

替换原来错误的launch()调用部分,改成以下写法:

PendingIntent pendingIntent = authorizationResult.getPendingIntent();
try {
    assert pendingIntent != null;
    // 用IntentSenderRequest.Builder构建请求对象
    IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(pendingIntent.getIntentSender())
            .build();
    authorizationLauncher.launch(intentSenderRequest);
} catch (IntentSender.SendIntentException e) {
    Log.i("TTTT", "Couldn't start Authorization UI: " + e.getLocalizedMessage());
}

关键改动说明

  • 不再直接操作Intent,而是通过IntentSenderRequest.Builder传入IntentSender来构建符合要求的请求对象
  • 完全适配ActivityResultContracts.StartIntentSenderForResult契约的参数类型(泛型为IntentSenderRequest),避免类型不匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:43:25