11package com .linchaolong .android .imagepicker ;
22
3+ import static androidx .activity .result .contract .ActivityResultContracts .PickVisualMedia ;
4+ import static androidx .activity .result .contract .ActivityResultContracts .RequestPermission ;
5+ import static androidx .activity .result .contract .ActivityResultContracts .StartActivityForResult ;
6+
37import android .Manifest ;
48import android .app .Activity ;
59import android .content .Context ;
1519import androidx .activity .ComponentActivity ;
1620import androidx .activity .result .ActivityResultCaller ;
1721import androidx .activity .result .ActivityResultLauncher ;
18- import androidx .activity .result .contract . ActivityResultContracts ;
22+ import androidx .activity .result .PickVisualMediaRequest ;
1923import androidx .annotation .NonNull ;
2024import androidx .fragment .app .Fragment ;
2125
@@ -43,6 +47,7 @@ public class ImagePicker {
4347 private CharSequence title ;
4448
4549 private Uri imageUrlForRequestPermission ;
50+ private final ActivityResultLauncher <Void > galleryLauncher ;
4651 private final ActivityResultLauncher <Intent > chooserLauncher ;
4752 private final ActivityResultLauncher <Intent > cropLauncher ;
4853 private final ActivityResultLauncher <Void > requestCameraPermissionForChooser ;
@@ -61,7 +66,21 @@ private Context getContext() {
6166 public ImagePicker (ActivityResultCaller caller , @ NonNull Callback callback ) {
6267 this .caller = caller ;
6368 this .callback = callback ;
64- chooserLauncher = caller .registerForActivityResult (new ActivityResultContracts .StartActivityForResult (), result -> {
69+ galleryLauncher = caller .registerForActivityResult (
70+ new WithInputActivityResultContract <>(
71+ new PickVisualMedia (),
72+ new PickVisualMediaRequest .Builder ()
73+ .setMediaType (PickVisualMedia .ImageOnly .INSTANCE )
74+ .build ()
75+ ),
76+ imageUri -> {
77+ if (imageUri == null ) {
78+ return ;
79+ }
80+ handlePickImage (imageUri );
81+ }
82+ );
83+ chooserLauncher = caller .registerForActivityResult (new StartActivityForResult (), result -> {
6584 if (result .getResultCode () != Activity .RESULT_OK ) {
6685 return ;
6786 }
@@ -75,7 +94,7 @@ public ImagePicker(ActivityResultCaller caller, @NonNull Callback callback) {
7594 handlePickImage (imageUri );
7695 }
7796 });
78- cropLauncher = caller .registerForActivityResult (new ActivityResultContracts . StartActivityForResult (), result -> {
97+ cropLauncher = caller .registerForActivityResult (new StartActivityForResult (), result -> {
7998 if (result .getResultCode () != Activity .RESULT_OK ) {
8099 return ;
81100 }
@@ -86,7 +105,7 @@ public ImagePicker(ActivityResultCaller caller, @NonNull Callback callback) {
86105 }
87106 });
88107 requestReadPermission = caller .registerForActivityResult (
89- new WithInputActivityResultContract <>(new ActivityResultContracts . RequestPermission (), Manifest .permission .READ_EXTERNAL_STORAGE ),
108+ new WithInputActivityResultContract <>(new RequestPermission (), Manifest .permission .READ_EXTERNAL_STORAGE ),
90109 result -> {
91110 if (!result ) {
92111 callback .onPermissionDenied (Manifest .permission .READ_EXTERNAL_STORAGE );
@@ -99,7 +118,7 @@ public ImagePicker(ActivityResultCaller caller, @NonNull Callback callback) {
99118 }
100119 );
101120 requestCameraPermissionForChooser = caller .registerForActivityResult (
102- new WithInputActivityResultContract <>(new ActivityResultContracts . RequestPermission (), Manifest .permission .CAMERA ),
121+ new WithInputActivityResultContract <>(new RequestPermission (), Manifest .permission .CAMERA ),
103122 result -> {
104123 if (!result ) {
105124 callback .onPermissionDenied (Manifest .permission .CAMERA );
@@ -109,7 +128,7 @@ public ImagePicker(ActivityResultCaller caller, @NonNull Callback callback) {
109128 }
110129 );
111130 requestCameraPermissionForCamera = caller .registerForActivityResult (
112- new WithInputActivityResultContract <>(new ActivityResultContracts . RequestPermission (), Manifest .permission .CAMERA ),
131+ new WithInputActivityResultContract <>(new RequestPermission (), Manifest .permission .CAMERA ),
113132 result -> {
114133 if (!result ) {
115134 callback .onPermissionDenied (Manifest .permission .CAMERA );
@@ -164,7 +183,7 @@ public void startCamera() {
164183 * 启动图库选择器
165184 */
166185 public void startGallery () {
167- chooserLauncher .launch (getGalleryIntent ( getContext (), false ) );
186+ galleryLauncher .launch (null );
168187 }
169188
170189
0 commit comments