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

startActivityForResult已废弃,Google登录功能该如何适配新实现?

startActivityForResult废弃后的谷歌登录适配方案

你遇到的闪退确实可能和高版本依赖/系统中startActivityForResult接口废弃有关,官方替换实现为Activity Result API,适配方式如下:


1. 核心逻辑变动

  • 无需再声明请求码常量,提前在Activity中注册结果回调启动器
  • 触发跳转时直接调用启动器的launch方法传入意图即可,所有返回结果统一在注册的回调中处理

2. 完整修改后的代码

public class MainActivity extends AppCompatActivity {
    SignInButton signin;
    private GoogleSignInClient mGoogleSignInClient;
    // 注册谷歌登录结果回调启动器,替代原有startActivityForResult+onActivityResult逻辑
    private ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == RESULT_OK) {
                    Intent data = result.getData();
                    Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                    handleSignInResult(task);
                }
            }
    );

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 必须绑定按钮实例,原有代码漏了这步也是闪退的常见原因
        signin = findViewById(R.id.你布局中谷歌登录按钮的ID);
        requestGoogleSignIn();
        signin.setOnClickListener(view -> signIn());
    }

    private void requestGoogleSignIn()
    {
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
    }

    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        // 用启动器触发登录跳转,替换原有startActivityForResult
        signInLauncher.launch(signInIntent);
    }

    // 登录结果处理方法,可根据自身业务修改
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            // 登录成功后逻辑,比如跳转主页、保存账号凭证等
            String idToken = account.getIdToken();
        } catch (ApiException e) {
            // 登录失败错误处理
            e.printStackTrace();
        }
    }
}

3. 依赖要求

  • 确保项目build.gradle中androidx.activity:activity版本不低于1.2.0,androidx.fragment:fragment版本不低于1.3.0,否则无法调用Activity Result API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:18:02