|
18 | 18 |
|
19 | 19 | import android.Manifest; |
20 | 20 | import android.app.Activity; |
| 21 | +import android.content.Context; |
| 22 | +import android.content.pm.PackageInfo; |
| 23 | +import android.content.pm.PackageManager; |
21 | 24 | import android.net.Uri; |
22 | 25 |
|
23 | 26 | import com.fuck_boilerplate.rx_paparazzo.entities.Config; |
@@ -80,10 +83,41 @@ public Response<T, String> call(String path) { |
80 | 83 |
|
81 | 84 | private String[] permissions() { |
82 | 85 | if (config.useInternalStorage()) { |
83 | | - return new String[] {}; |
| 86 | + if (hasCameraPermissionInManifest()) { |
| 87 | + return new String[] { Manifest.permission.CAMERA }; |
| 88 | + } else { |
| 89 | + return new String[] {}; |
| 90 | + } |
84 | 91 | } else { |
85 | | - return new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, |
86 | | - Manifest.permission.READ_EXTERNAL_STORAGE}; |
| 92 | + if (hasCameraPermissionInManifest()) { |
| 93 | + return new String[] { |
| 94 | + Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, |
| 95 | + Manifest.permission.READ_EXTERNAL_STORAGE |
| 96 | + }; |
| 97 | + } else { |
| 98 | + return new String[] { |
| 99 | + Manifest.permission.WRITE_EXTERNAL_STORAGE, |
| 100 | + Manifest.permission.READ_EXTERNAL_STORAGE |
| 101 | + }; |
| 102 | + } |
87 | 103 | } |
88 | 104 | } |
| 105 | + |
| 106 | + private boolean hasCameraPermissionInManifest() { |
| 107 | + final String packageName = targetUi.getContext().getPackageName(); |
| 108 | + try { |
| 109 | + final PackageInfo packageInfo = targetUi.getContext().getPackageManager() |
| 110 | + .getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); |
| 111 | + final String[] declaredPermisisons = packageInfo.requestedPermissions; |
| 112 | + if (declaredPermisisons != null && declaredPermisisons.length > 0) { |
| 113 | + for (String p : declaredPermisisons) { |
| 114 | + if (p.equals(Manifest.permission.CAMERA)) { |
| 115 | + return true; |
| 116 | + } |
| 117 | + } |
| 118 | + } |
| 119 | + } catch (PackageManager.NameNotFoundException e) {} |
| 120 | + |
| 121 | + return false; |
| 122 | + } |
89 | 123 | } |
0 commit comments