Skip to content

Commit 9a8c15b

Browse files
committed
[Android API 23+] Request for location permissions on runtime
1 parent 5264d86 commit 9a8c15b

2 files changed

Lines changed: 43 additions & 2 deletions

File tree

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,6 +1863,7 @@ else if (t_caminfo.facing == CameraCompat.CameraInfo.CAMERA_FACING_FRONT)
18631863

18641864
private String m_source;
18651865
public static final int CAMERA_PERMISSION_REQUEST_CODE = 1;
1866+
public static final int LOCATION_PERMISSION_REQUEST_CODE = 3;
18661867
public void showPhotoPicker(String p_source, int p_width, int p_height)
18671868
{
18681869
m_photo_width = p_width;
@@ -1912,12 +1913,27 @@ private void onCameraRequestPermissionResult(int requestCode, String[] permissio
19121913
}
19131914
}
19141915

1916+
private void onLocationRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults)
1917+
{
1918+
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
1919+
{
1920+
m_sensor_module.createLocationTracker();
1921+
}
1922+
else
1923+
{
1924+
Log.e(TAG,"Permission denied. You can change this in the Settings app");
1925+
}
1926+
}
1927+
1928+
19151929
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
19161930
{
1917-
onCameraRequestPermissionResult(requestCode, permissions, grantResults);
1931+
if (requestCode == CAMERA_PERMISSION_REQUEST_CODE)
1932+
onCameraRequestPermissionResult(requestCode, permissions, grantResults);
1933+
else if (requestCode == LOCATION_PERMISSION_REQUEST_CODE)
1934+
onLocationRequestPermissionResult(requestCode, permissions, grantResults);
19181935
}
19191936

1920-
19211937
public void showCamera()
19221938
{
19231939
// 2012-01-18-IM temp file may be created in app cache folder, in which case

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
import android.content.*;
2020
import android.os.*;
2121
import android.util.*;
22+
import android.Manifest;
23+
import java.lang.Object.*;
24+
import android.app.Activity;
2225

2326
import java.util.*;
2427

@@ -44,6 +47,8 @@ abstract class Tracker
4447
public static final int COARSE_TRACKING = 1;
4548
public static final int FINE_TRACKING = 2;
4649

50+
public static final int LOCATION_PERMISSION_REQUEST_CODE = 3;
51+
4752
protected boolean m_paused;
4853
protected int m_tracking_requested;
4954
protected int m_tracking_internal;
@@ -230,6 +235,21 @@ class LocationTracker extends Tracker
230235
LocationListener m_gps_location_listener;
231236

232237
public LocationTracker()
238+
{
239+
if (Build.VERSION.SDK_INT >= 23 && ((m_engine.getContext().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
240+
!= m_engine.getContext().getPackageManager().PERMISSION_GRANTED || m_engine.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
241+
!= m_engine.getContext().getPackageManager().PERMISSION_GRANTED)))
242+
{
243+
Activity t_activity = (LiveCodeActivity)m_engine.getContext();
244+
t_activity.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
245+
}
246+
else
247+
{
248+
createLocationTracker();
249+
}
250+
}
251+
252+
private void createLocationTracker()
233253
{
234254
// Get the number of seconds since the device was booted
235255
double t_seconds_since_boot;
@@ -689,4 +709,9 @@ public void finish()
689709
m_accel_tracker.stopTracking();
690710
m_location_tracker.stopTracking();
691711
}
712+
713+
public void createLocationTracker()
714+
{
715+
m_location_tracker.createLocationTracker();
716+
}
692717
}

0 commit comments

Comments
 (0)