Skip to content

Commit 5264d86

Browse files
committed
[Android API 23+][mobilePickPhoto] Request for camera permissions on runtime
1 parent a65a665 commit 5264d86

2 files changed

Lines changed: 65 additions & 13 deletions

File tree

engine/src/java/com/runrev/android/Engine.java

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
import android.provider.MediaStore.Images.Media;
5454
import android.graphics.Bitmap;
5555
import android.graphics.BitmapFactory;
56+
import android.Manifest;
57+
import java.lang.Object;
5658

5759
import java.net.*;
5860
import java.io.*;
@@ -1859,22 +1861,62 @@ else if (t_caminfo.facing == CameraCompat.CameraInfo.CAMERA_FACING_FRONT)
18591861
return new String(t_directions);
18601862
}
18611863

1864+
private String m_source;
1865+
public static final int CAMERA_PERMISSION_REQUEST_CODE = 1;
18621866
public void showPhotoPicker(String p_source, int p_width, int p_height)
18631867
{
1864-
m_photo_width = p_width;
1865-
m_photo_height = p_height;
1866-
1867-
if (p_source.equals("camera"))
1868-
showCamera();
1869-
else if (p_source.equals("album"))
1870-
showLibrary();
1871-
else if (p_source.equals("library"))
1872-
showLibrary();
1873-
else
1874-
{
1875-
doPhotoPickerError("source not available");
1876-
}
1868+
m_photo_width = p_width;
1869+
m_photo_height = p_height;
1870+
m_source = p_source;
1871+
1872+
// Camera permission not granted, so ask for it
1873+
if (Build.VERSION.SDK_INT >= 23 && getContext().checkSelfPermission(Manifest.permission.CAMERA)
1874+
!= PackageManager.PERMISSION_GRANTED)
1875+
{
1876+
Activity t_activity = (LiveCodeActivity)getContext();
1877+
t_activity.requestPermissions(new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE);
1878+
}
1879+
// Camera permission already granted, or we are in a device running Android API < 23
1880+
else
1881+
{
1882+
onCameraPermissionGranted(m_source);
1883+
}
18771884
}
1885+
1886+
private void onCameraPermissionGranted(String p_source)
1887+
{
1888+
if (p_source.equals("camera"))
1889+
showCamera();
1890+
else if (p_source.equals("album"))
1891+
showLibrary();
1892+
else if (p_source.equals("library"))
1893+
showLibrary();
1894+
else
1895+
{
1896+
doPhotoPickerError("source not available");
1897+
}
1898+
}
1899+
1900+
private void onCameraRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults)
1901+
{
1902+
if (requestCode == CAMERA_PERMISSION_REQUEST_CODE)
1903+
{
1904+
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
1905+
{
1906+
onCameraPermissionGranted(m_source);
1907+
}
1908+
else
1909+
{
1910+
doPhotoPickerError("Permission denied. You can change this in the Settings app");
1911+
}
1912+
}
1913+
}
1914+
1915+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
1916+
{
1917+
onCameraRequestPermissionResult(requestCode, permissions, grantResults);
1918+
}
1919+
18781920

18791921
public void showCamera()
18801922
{

engine/src/java/com/runrev/android/LiveCodeActivity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import android.content.res.*;
2424
import android.widget.*;
2525
import android.util.*;
26+
import android.content.pm.PackageManager;
2627

2728
// This is the main activity exported by the application. This is
2829
// split into two parts, a customizable sub-class that gets dynamically
@@ -198,4 +199,13 @@ protected void onActivityResult (int requestCode, int resultCode, Intent data)
198199
{
199200
s_main_view.onActivityResult(requestCode, resultCode, data);
200201
}
202+
203+
// Callback sent when the app requests permissions on runtime (Android API 23+)
204+
@Override
205+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
206+
{
207+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
208+
s_main_view.onRequestPermissionsResult(requestCode, permissions, grantResults);
209+
}
210+
201211
}

0 commit comments

Comments
 (0)