协慌网

登录 贡献 社区

如何在 Android 上管理 startActivityForResult?

在我的活动中,我通过startActivityForResult从主活动调用第二个活动。在我的第二个活动中,有一些方法可以完成此活动(可能没有结果),但是,只有其中一个返回结果。

例如,从主要活动我称之为第二个。在这项活动中,我正在检查手机的某些功能,例如是否有相机。如果它没有,那么我将关闭此活动。此外,在准备MediaRecorderMediaPlayer期间如果出现问题,我将关闭此活动。

如果其设备有摄像头并完全录制,则在用户点击完成按钮后录制视频后,我会将结果(录制视频的地址)发送回主要活动。

如何检查主要活动的结果?

答案

从你的FirstActivity致电SecondActivity使用startActivityForResult()方法

例如:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

在您的SecondActivity设置要返回到数据FirstActivity 。如果您不想返回,请不要设置任何。

例如:在SecondActivity如果要发送回数据:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

如果您不想返回数据:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

现在,在您的FirstActivity类中,为onActivityResult()方法编写以下代码。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult

如何检查主要活动的结果?

您需要覆盖Activity.onActivityResult()然后检查其参数:

  • requestCode标识哪个应用返回了这些结果。这是由您在调用startActivityForResult()时定义的。
  • resultCode通知您此应用程序是成功,失败还是其他内容
  • data保存此应用程序返回的任何信息。这可能是null

补充 @ Nishant 的答案,返回活动结果的最佳方法是:

Intent returnIntent = getIntent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();

我有问题

new Intent();

然后我发现正确的方法是使用

getIntent();

获得当前的意图