Skip to content

Commit 0f17053

Browse files
committed
#46 - Added workaround to ckeck for camera permissions on API >= 23 if <uses-permission android:name="android.permission.CAMERA"/> is declared on your app manifest
1 parent 7b39d55 commit 0f17053

2 files changed

Lines changed: 39 additions & 3 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.fuck_boilerplate.rx_paparazzo.sample">
44

5+
<uses-permission android:name="android.permission.CAMERA"/>
6+
57
<application
68
android:allowBackup="true"
79
android:icon="@mipmap/ic_launcher"

rx_paparazzo/src/main/java/com/fuck_boilerplate/rx_paparazzo/workers/Camera.java

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
import android.Manifest;
2020
import android.app.Activity;
21+
import android.content.Context;
22+
import android.content.pm.PackageInfo;
23+
import android.content.pm.PackageManager;
2124
import android.net.Uri;
2225

2326
import com.fuck_boilerplate.rx_paparazzo.entities.Config;
@@ -80,10 +83,41 @@ public Response<T, String> call(String path) {
8083

8184
private String[] permissions() {
8285
if (config.useInternalStorage()) {
83-
return new String[] {};
86+
if (hasCameraPermissionInManifest()) {
87+
return new String[] { Manifest.permission.CAMERA };
88+
} else {
89+
return new String[] {};
90+
}
8491
} 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+
}
87103
}
88104
}
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+
}
89123
}

0 commit comments

Comments
 (0)