如何在 Android 上管理 startActivityForResult?

Posted

技术标签:

【中文标题】如何在 Android 上管理 startActivityForResult?【英文标题】:How do i manage startActivityForResult on Android? 【发布时间】:2019-06-22 21:38:17 【问题描述】:

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

例如,从主要活动中,我调用了第二个活动。在这个活动中,我正在检查手机的一些功能,例如它是否有摄像头。如果没有,那么我将关闭此活动。此外,在准备 MediaRecorder 或 MediaPlayer 的过程中,如果出现问题,我将关闭此活动。

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

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

【问题讨论】:

看这个:developer.android.com/training/basics/intents/result 【参考方案1】:

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

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

这样你就可以从SecondActivity“回复”任务成功了,intent可以携带你的信息。

然后,在你的FirstActivity

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

【讨论】:

【参考方案2】:

在主要活动中你应该有这个:

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
        
    

【讨论】:

以上是关于如何在 Android 上管理 startActivityForResult?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上管理 startActivityForResult?

Android获取手机联系人的姓名和电话

如何删除在 Android 上启用了活动设备管理员的应用程序?

如何在 android 上使用 google maps api v2 很好地管理标记

如何在 Android 上管理从后台恢复的 Xamarin 表单应用程序?

Firebase 云消息传递如何在 Android 上运行