在Android的Activity中如何获取并初始化ActivityResultRegistry引用?
解决方案
AppCompatActivity的父类ComponentActivity已经内置了ActivityResultRegistry实例,你不需要自己手动初始化,直接调用getActivityResultRegistry()方法即可获取,甚至绝大多数场景下你连显式传入这个参数都不需要。
常规用法(推荐)
直接使用双参数的registerForActivityResult重载方法,系统会自动使用当前Activity的内置Registry,不需要额外声明成员变量存储Registry实例:
public class MainActivity extends AppCompatActivity { // 直接作为成员变量注册,触发拍照后回调拿到缩略图 private final ActivityResultLauncher<Void> mTakePicture = registerForActivityResult(new TakePicturePreview(), new ActivityResultCallback<Bitmap>() { @Override public void onActivityResult(Bitmap thumbnail) { mThumbnailLiveData.setValue(thumbnail); } }); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 需要触发拍照时调用即可 // mTakePicture.launch(null); } }
显式传入Registry的用法
如果你的场景确实需要手动指定Registry参数,直接调用系统提供的实例传入即可:
public class MainActivity extends AppCompatActivity { // 直接获取系统内置的Registry实例即可,不需要自己创建 private final ActivityResultRegistry activityResultRegistry = getActivityResultRegistry(); private final ActivityResultLauncher<Void> mTakePicture = registerForActivityResult(new TakePicturePreview(), activityResultRegistry, new ActivityResultCallback<Bitmap>() { @Override public void onActivityResult(Bitmap thumbnail) { mThumbnailLiveData.setValue(thumbnail); } }); }
注意事项
- 不要自己手动
new ActivityResultRegistry()创建实例,该实例由系统负责管理生命周期,自行创建会导致回调失效 ActivityResultLauncher的注册操作必须在Activity生命周期走到STARTED状态之前完成,推荐直接作为类成员变量初始化,或者在onCreate方法的super.onCreate()调用之前完成注册,否则会抛出异常
内容的提问来源于stack exchange,提问作者paulsm4
相关产品推荐
相关产品推荐

