Skip to content

Commit dff1bbf

Browse files
committed
feat: 使用系统照片选择器
1 parent 3b6f528 commit dff1bbf

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

library/src/main/java/com/linchaolong/android/imagepicker/ImagePicker.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package 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+
37
import android.Manifest;
48
import android.app.Activity;
59
import android.content.Context;
@@ -15,7 +19,7 @@
1519
import androidx.activity.ComponentActivity;
1620
import androidx.activity.result.ActivityResultCaller;
1721
import androidx.activity.result.ActivityResultLauncher;
18-
import androidx.activity.result.contract.ActivityResultContracts;
22+
import androidx.activity.result.PickVisualMediaRequest;
1923
import androidx.annotation.NonNull;
2024
import 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

Comments
 (0)