实例演示Android的startActivityForResult用法 ====================
你是否曾经遇到过这样的场景:在Android应用中,你希望打开一个Activity并获取该Activity的结果?如果你曾经遇到过这样的需求,那么你一定不能错过这篇文章!本文将以实例演示的形式,深入探讨Android的`startActivityForResult`用法。
一、初识`startActivityForResult` --------------------
在Android中,`startActivityForResult`是一种启动Activity的方式,与`startActivity`相比,它可以获取启动的Activity返回的结果。那么,在什么时候需要使用`startActivityForResult`呢?简单来说,当你在一个Activity中启动了另一个Activity,并且需要获取这个被启动的Activity的结果时,你就可以使用`startActivityForResult`。
例如,假设你有一个MainActivity,你希望点击一个按钮后打开一个CameraActivity,并获取拍摄的照片。此时,你就可以使用`startActivityForResult`来打开CameraActivity,并在返回结果时获取照片。
二、实例演示 ------
下面是一个简单的实例,演示了如何使用`startActivityForResult`打开一个CameraActivity,并获取拍摄的照片。
```java public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_CAMERA = 100;
@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) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_CODE_CAMERA); } }); }
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CAMERA && resultCode == RESULT_OK && data != null) { Bitmap bitmap = (Bitmap) data.getExtras().get("data"); // 在这里使用bitmap做你想做的事情,例如显示在ImageView中 } } } ``` 在这个例子中,我们首先在MainActivity中设置了一个按钮的点击事件监听器。点击按钮后,我们构造了一个Intent,并使用`startActivityForResult`方法打开了这个Intent对应的Activity(在这个例子中是一个CameraActivity)。在`onActivityResult`方法中,我们判断了请求码和结果码,如果都是我们期望的值,那么我们就可以从Intent中获取到拍摄的照片,并进行相应的处理。
三、注意事项 ------
1. 使用`startActivityForResult`时,需要设定一个唯一的请求码(requestCode),这样在`onActivityResult`中才能正确地判断是哪个Activity返回的结果。 2. 在被启动的Activity中,如果需要返回数据给启动这个Activity的Activity,那么可以通过Intent来实现。需要注意的是,返回的数据需要使用Intent的`putExtra`方法来设置,而不是通过Intent的`setData`方法。 3. 在`onActivityResult`中,需要判断请求码和结果码是否与预期一致。如果不一致,可能是由于启动的Activity被异常终止或者没有正确地返回结果。 4. `startActivityForResult`必须在UI线程(即主线程)中调用。如果你想在后台线程中调用它,你需要使用Handler将调用转移到UI线程。
新起点 超级网址导航
