如何在Android上管理startActivityForResult?

时间:2019-01-29 17:25:25

标签: android

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

例如,在主要活动中,我称第二个活动。在本活动中,我将检查手机的某些功能,例如是否带有摄像头。如果没有,我将关闭此活动。另外,在准备MediaRecorder或MediaPlayer时,如果发生问题,那么我将关闭此活动。

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

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

2 个答案:

答案 0 :(得分:0)

SecondActivity中,一个很好的结果示例可能是:

setResult(Activity.RESULT_OK, getIntent());
finish();

这样,您可以从SecondActivity“答复”任务已成功完成,并且意图可以携带您的信息。

然后,在您的FirstActivity

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode==YOUR_REQUEST_CODE && Activity.RESULT_OK == resultCode) {
        // Stuff went fine
    }
}

答案 1 :(得分:0)

在主要活动中,您应该具有以下内容:

public static final int REQUEST_CODE = 1;
Button button = (Button) findViewById(R.id.your_button);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // actions that will happen when the button is pressed:

        Intent intent = new Intent(this, SecondActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }
});

在第二个活动中,您应该传递结果,例如单击RecyclerView中列表项的位置,像这样:

ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
    @Override
    public void onEntryClick(View view, int position) {
        Intent intent = new Intent();
        intent.putExtra("pos", position);
        setResult(Activity.RESULT_OK, intent);
        finish();
    }
});
recyclerView.setAdapter(clickAdapter);

在主要活动中,您应该有一种获取结果的方法,这是您的方法:

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

    if (requestCode == REQUEST_CODE) {

        if (resultCode == Activity.RESULT_OK) {
            int result = data.getIntExtra("pos");
            // do something with the result

        } else if (resultCode == Activity.RESULT_CANCELED) {
            // some stuff that will happen if there's no result
        }
    }
}