android-intent - 安卓如何管理启动的activity?

  显示原文与译文双语对照的内容

在主要由 Activity 在我 Activity,我是通过调用第二个 在我的第二个 Activity 中,有一些方法完成了这个 Activity ( 可能没有结果),但是,只有一个方法返回一个结果。

例如从主 Activity 调用第二个。 在这个 Activity 中,我检查了一些手机的特性,比如它有摄像头。 如果没有,我将关闭这个 Activity 。 另外,在准备MediaRecorder或者MediaPlayer时,如果出现问题,我将关闭这个 Activity 。

如果它的设备有一个摄像头并录制完毕,那么当用户点击done完成done按钮后,我将把结果( 已经录制视频的地址) 发回主 Activity 。

如何检查主 Activity的结果?

时间:

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(RESULT_OK,returnIntent);
finish();

如果你不想返回数据:


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

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


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

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

如何检查主 Activity的结果?

你需要重写 Activity.onActivityResult(),然后检查它的参数:

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

如果要用 Activity 结果更新用户界面,则不能使用 this.runOnUiThread(new Runnable() {} 这样做的用户界面不会刷新新的值。 相反,你可以这样做:


@Override
protected 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;
}

@Override
protected void onResume() {
 super.onResume();

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

这看起来很傻,但工作得很好。

首先使用 startActivityForResult() 在第一个 Activity 中使用参数,如果你想将数据从第二个 Activity 发送到第一个 Activity,那么使用 IntentsetResult() 方法传递值,并在第一个 Activity 中获取数据。

使用这里代码为结果启动 Activity


Intent intent = new Intent( getBaseContext(), OtherActivity.class );
startActivityForResult( intent );

当启动的Activity 返回数据时,意味着返回第一个 Activity,使用代码处理数据-


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
 super.onActivityResult(requestCode, resultCode, data);
//Perform your task and get data from Intent (data parameter)
}

...