在 Android 开发中,`startActivityForResult()` 是一个非常重要的方法,用于启动一个新的 Activity 并期待其返回结果。这种方法通常用于需要用户输入或选择某些信息的场景,例如拍照、选择图片或进行其他交互操作。
基本概念
`startActivityForResult()` 的基本语法如下:
```java
startActivityForResult(Intent intent, int requestCode);
```
- Intent: 这是传递给目标 Activity 的意图对象,它定义了要执行的操作以及数据来源。
- requestCode: 一个整数值,用来标识请求的来源。当目标 Activity 返回结果时,系统会将这个值作为参数之一传递回来。
使用步骤
1. 创建 Intent:
首先需要创建一个 Intent 对象,并设置好目标 Activity 和传递的数据。
```java
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("key", "value");
```
2. 启动 Activity:
使用 `startActivityForResult()` 启动目标 Activity,并传入 Intent 和请求码。
```java
startActivityForResult(intent, 100);
```
3. 处理返回结果:
在目标 Activity 中完成操作后,通过调用 `setResult()` 方法设置返回结果,并结束 Activity。
```java
Intent resultIntent = new Intent();
resultIntent.putExtra("resultKey", "resultValue");
setResult(RESULT_OK, resultIntent);
finish();
```
4. 接收返回结果:
在主 Activity 中重写 `onActivityResult()` 方法来接收并处理返回的结果。
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK) {
String result = data.getStringExtra("resultKey");
// 处理返回的结果
}
}
```
注意事项
- requestCode 的唯一性: 每次调用 `startActivityForResult()` 时都应该使用唯一的请求码,以便区分不同的请求。
- 权限管理: 如果目标 Activity 需要特定权限(如访问相机或存储),请确保在 manifest 文件中声明相应的权限。
- 生命周期管理: 确保在 Activity 的生命周期内正确处理 `startActivityForResult()`,避免内存泄漏或其他异常情况。
示例代码
以下是一个完整的示例,展示如何从相册中选择图片并显示:
```java
public class MainActivity extends AppCompatActivity {
private static final int PICK_IMAGE_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGallery();
}
});
}
private void openGallery() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageURI(selectedImage);
}
}
}
```
结论
`startActivityForResult()` 是 Android 中实现交互式功能的重要工具。通过合理使用该方法及其相关参数,开发者可以轻松地实现复杂的功能需求。希望本文能帮助你更好地理解和应用这一技术!