Skip to content

Commit f0bd1e9

Browse files
author
teach
committed
预加载时检查权限。
1 parent 8e95cf4 commit f0bd1e9

File tree

4 files changed

+51
-6
lines changed

4 files changed

+51
-6
lines changed

app/src/main/java/com/donkingliang/imageselectdemo/MainActivity.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.donkingliang.imageselectdemo;
22

3+
import android.Manifest;
34
import android.content.Intent;
5+
import android.content.pm.PackageManager;
46
import android.os.Bundle;
57

68
import androidx.appcompat.app.AppCompatActivity;
9+
import androidx.core.app.ActivityCompat;
10+
import androidx.core.content.ContextCompat;
711
import androidx.recyclerview.widget.GridLayoutManager;
812
import androidx.recyclerview.widget.RecyclerView;
913

@@ -17,6 +21,7 @@
1721
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
1822

1923
private static final int REQUEST_CODE = 0x00000011;
24+
private static final int PERMISSION_WRITE_EXTERNAL_REQUEST_CODE = 0x00000012;
2025

2126
private RecyclerView rvImage;
2227
private ImageAdapter mAdapter;
@@ -38,8 +43,16 @@ protected void onCreate(Bundle savedInstanceState) {
3843
findViewById(R.id.btn_only_take).setOnClickListener(this);
3944
findViewById(R.id.btn_take_and_clip).setOnClickListener(this);
4045

41-
//预加载手机图片
42-
ImageSelector.preload(this);
46+
int hasWriteExternalPermission = ContextCompat.checkSelfPermission(this,
47+
Manifest.permission.WRITE_EXTERNAL_STORAGE);
48+
if (hasWriteExternalPermission == PackageManager.PERMISSION_GRANTED) {
49+
//预加载手机图片。加载图片前,请确保app有读取储存卡权限
50+
ImageSelector.preload(this);
51+
} else {
52+
//没有权限,申请权限。
53+
ActivityCompat.requestPermissions(this,
54+
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_WRITE_EXTERNAL_REQUEST_CODE);
55+
}
4356
}
4457

4558
@Override
@@ -53,6 +66,26 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
5366
}
5467
}
5568

69+
/**
70+
* 处理权限申请的回调。
71+
*
72+
* @param requestCode
73+
* @param permissions
74+
* @param grantResults
75+
*/
76+
@Override
77+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
78+
if (requestCode == PERMISSION_WRITE_EXTERNAL_REQUEST_CODE) {
79+
if (grantResults.length > 0
80+
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
81+
//预加载手机图片
82+
ImageSelector.preload(this);
83+
} else {
84+
//拒绝权限。
85+
}
86+
}
87+
}
88+
5689
@Override
5790
public void onClick(View v) {
5891
switch (v.getId()) {

imageselector/src/main/java/com/donkingliang/imageselector/ImageSelectorActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,6 @@ public void onClick(DialogInterface dialog, int which) {
676676
* 从SDCard加载图片。
677677
*/
678678
private void loadImageForSDCard() {
679-
final long time = System.currentTimeMillis();
680679
ImageModel.loadImageForSDCard(this, new ImageModel.DataCallback() {
681680
@Override
682681
public void onSuccess(ArrayList<Folder> folders) {

imageselector/src/main/java/com/donkingliang/imageselector/model/ImageModel.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.donkingliang.imageselector.model;
22

3+
import android.Manifest;
34
import android.content.ContentResolver;
45
import android.content.Context;
6+
import android.content.pm.PackageManager;
57
import android.database.ContentObserver;
68
import android.database.Cursor;
79
import android.net.Uri;
@@ -20,6 +22,8 @@
2022
import java.util.Collections;
2123
import java.util.List;
2224

25+
import androidx.core.content.ContextCompat;
26+
2327
public class ImageModel {
2428

2529
/**
@@ -34,14 +38,23 @@ public class ImageModel {
3438
*
3539
* @param context
3640
*/
37-
public static void preload(final Context context) {
41+
public static void preloadAndRegisterContentObserver(final Context context) {
3842
isNeedCache = true;
3943
if (observer == null) {
4044
observer = new PhotoContentObserver(context.getApplicationContext());
4145
context.getApplicationContext().getContentResolver().registerContentObserver(
4246
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false, observer);
4347
}
44-
loadImageForSDCard(context, true, null);
48+
preload(context);
49+
}
50+
51+
private static void preload(final Context context) {
52+
int hasWriteExternalPermission = ContextCompat.checkSelfPermission(context,
53+
Manifest.permission.WRITE_EXTERNAL_STORAGE);
54+
if (hasWriteExternalPermission == PackageManager.PERMISSION_GRANTED) {
55+
//有权限,加载图片。
56+
loadImageForSDCard(context, true, null);
57+
}
4558
}
4659

4760
/**

imageselector/src/main/java/com/donkingliang/imageselector/utils/ImageSelector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public class ImageSelector {
5050
* @param context
5151
*/
5252
public static void preload(Context context) {
53-
ImageModel.preload(context);
53+
ImageModel.preloadAndRegisterContentObserver(context);
5454
}
5555

5656
/**

0 commit comments

Comments
 (0)