首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >registerForActivityResult能像ACTION_CHOOSER一样工作吗

registerForActivityResult能像ACTION_CHOOSER一样工作吗
EN

Stack Overflow用户
提问于 2021-08-04 10:31:49
回答 1查看 296关注 0票数 0

我正在使用registerForActivityResult来启动相机或画廊,但是registerForActivityResult能像Intent.ACTION_CHOOSER那样做吗?

代码语言:javascript
复制
cameraLauncher =
    registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
        if (success) {
           // do somthing
        }
    }
galleryLauncher =
    registerForActivityResult(ActivityResultContracts.GetContent()) {
          // do somthing
    }

以旧的方式

代码语言:javascript
复制
val galleryIntent = Intent(Intent.ACTION_GET_CONTENT)
galleryIntent.addCategory(Intent.CATEGORY_OPENABLE)
galleryIntent.type = "image/*"

val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)

val chooserIntent = Intent(Intent.ACTION_CHOOSER)
chooserIntent.putExtra(Intent.EXTRA_INTENT, galleryIntent)
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(cameraIntent))
startActivity(chooserIntent)
EN

回答 1

Stack Overflow用户

发布于 2021-11-18 13:36:36

我确实通过实现ActivityResultContracts.StartActivityForResult()来实现它,它使用与so相同的参数调用现有的onActivityResult (Java中的示例):

代码语言:javascript
复制
ActivityResultLauncher<Intent> activityForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
        YourActivity.this.onActivityResult(PICK_IMAGE_ID, result.getResultCode(), result.getData());
    }
});

然后,您只需按如下方式开始:

代码语言:javascript
复制
Intent pickIntent = new Intent(Intent.ACTION_PICK,     
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageURI);
Intent chooserIntent = Intent.createChooser(pickIntent, "Choose");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[]{takePhotoIntent});
if(SDK_INT > Build.VERSION_CODES.Q) {
   activityForResult.launch(chooserIntent);
} else {
   //support for older than android 11
   startActivityForResult(chooserIntent, PICK_IMAGE_ID);
}

您的AndroidManifest.xml还需要以下查询:

代码语言:javascript
复制
<queries>
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
    <intent>
        <action android:name="android.intent.action.PICK" />
        <data android:mimeType="image/*" />
    </intent>
</queries>

请注意,startActivityForResultonActivityResult已被弃用,并将在将来的某个时候删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68649671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档