为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android上管理startActivityForResult?

如何在Android上管理startActivityForResult?

萧十郎 2019-05-22 15:47:14
如何在Android上管理startActivityForResult?在我的活动中,我正在通过主要活动调用第二个活动startActivityForResult。在我的第二个活动中,有一些方法可以完成此活动(可能没有结果),但是,只有其中一个返回结果。例如,从主要活动我称之为第二个。在这项活动中,我正在检查手机的某些功能,例如是否有相机。如果没有,那么我将关闭此活动。此外,在准备期间MediaRecorder或MediaPlayer如果出现问题,我将关闭此活动。如果其设备有摄像头并完全录制,则在用户点击完成按钮后录制视频后,我会将结果(录制视频的地址)发送回主要活动。如何检查主要活动的结果?
查看完整描述

5 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

从您的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()方法。

@Overrideprotected 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


查看完整回答
反对 回复 2019-05-22
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

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

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

我有问题

new Intent();

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

getIntent();

获得当前的意图


查看完整回答
反对 回复 2019-05-22
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

对于那些在onActivityResult中遇到错误requestCode问题的人

如果您是startActivityForResult()从您的呼叫Fragment,则拥有片段的活动会更改requestCode。

如果您想在活动中获得正确的resultCode,请尝试以下操作:

更改:

startActivityForResult(intent, 1); 至:

getActivity().startActivityForResult(intent, 1);


查看完整回答
反对 回复 2019-05-22
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果要使用活动结果更新用户界面,则无法使用“ this.runOnUiThread(new Runnable() {} 执行此操作”UI不会刷新新值。相反,你可以这样做:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_CANCELED) {
        return;
    }

    global_lat = data.getDoubleExtra("LATITUDE", 0);
    global_lng = data.getDoubleExtra("LONGITUDE", 0);
    new_latlng = true;}@Overrideprotected void onResume() {
    super.onResume();

    if(new_latlng)
    {
        PhysicalTagProperties.this.setLocation(global_lat, global_lng);
        new_latlng=false;
    }}

这看起来很傻,但效果很好。


查看完整回答
反对 回复 2019-05-22
  • 5 回答
  • 0 关注
  • 824 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信