Skip to content

Commit 51dfeed

Browse files
committed
ANDROID: request permissions from Manifest
This reads permissions from the manifest and requests all that are needed. Apps and modules should add necessary permissions to ANDROID_xml_permissions. Moved the initial setContentView back to before @ANDROID_JAVA_ONCREATE@ so that apps can set a content view in ANDROID_java_oncreate
1 parent 1e4c9f3 commit 51dfeed

File tree

6 files changed

+32
-14
lines changed

6 files changed

+32
-14
lines changed

loaders/android/AndroidManifest.xml.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
@ANDROID_XML_RECEIVERS@
2222
@ANDROID_XML_SERVICES@
2323
</application>
24-
@ANDROID_XML_PERMISSIONS@
2524
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
25+
@ANDROID_XML_PERMISSIONS@
2626
</manifest>
2727
# eof

loaders/android/bootstrap.java.in

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import android.content.Intent;
4545
import android.content.IntentFilter;
4646
import android.content.BroadcastReceiver;
4747
import android.content.res.Configuration;
48+
import android.content.pm.PackageManager;
49+
import android.content.pm.PackageInfo;
4850
import android.opengl.GLSurfaceView;
4951
import android.os.Bundle;
5052
import android.os.PowerManager;
@@ -107,6 +109,29 @@ public class @SYS_APPNAME@ extends Activity implements @ANDROID_JAVA_IMPLEMENTS@
107109
return true;
108110
}
109111

112+
public boolean requestAllPermissions() {
113+
@IF_ANDROIDAPI_GT_22@
114+
PackageManager pm = getPackageManager();
115+
try
116+
{
117+
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS);
118+
String[] requestedPermissions = null;
119+
if (packageInfo != null)
120+
requestedPermissions = packageInfo.requestedPermissions;
121+
122+
if (requestedPermissions != null && requestedPermissions.length > 0)
123+
requestPermissions(requestedPermissions, 1);
124+
}
125+
catch (PackageManager.NameNotFoundException e)
126+
{
127+
System.err.print("requestAllPermissions error: " + e);
128+
e.printStackTrace(System.err);
129+
return false;
130+
}
131+
/* end of IF_ANDROIDAPI_GT_22 */
132+
return true;
133+
}
134+
110135
@Override
111136
public void startActivityForResult(Intent intent, int cont) {
112137
try {
@@ -176,16 +201,19 @@ public class @SYS_APPNAME@ extends Activity implements @ANDROID_JAVA_IMPLEMENTS@
176201

177202
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
178203

179-
checkOrRequestPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
180-
// Additions and permissions needed by modules, e.g. gps
181-
@ANDROID_JAVA_ONCREATE@
204+
requestAllPermissions();
182205

183206
// MUST NOT run before nativeInstanceInit completed
184207
// and MUST NOT run before permission checks
185208
setContentView(current_ContentView==null ? mGLView : current_ContentView);
209+
210+
// Additions needed by modules, e.g. gps
211+
@ANDROID_JAVA_ONCREATE@
212+
186213
// start EVENT_IDLE
187214
if(idle_tmScheduleRate > 0) idle_tm.scheduleAtFixedRate(idle_task, 0, idle_tmScheduleRate);
188215
}
216+
189217
@Override
190218
protected void onDestroy() {
191219
setContentView(mGLView);

modules/camera/ANDROID_java_oncreate

Lines changed: 0 additions & 2 deletions
This file was deleted.

modules/gps/ANDROID_java_oncreate

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
22
Criteria criteria = new Criteria();
33
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
44
criteria.setAccuracy(Criteria.ACCURACY_FINE);
5-
checkOrRequestPermission(android.Manifest.permission.ACCESS_FINE_LOCATION);
65
} else {
76
criteria.setPowerRequirement(Criteria.POWER_LOW);
87
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
9-
checkOrRequestPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION);
108
}
119
provider = locationManager.getBestProvider(criteria, false);
1210
Location location = locationManager.getLastKnownLocation(provider);

modules/hybridapp-xwalk/ANDROID_java_oncreate

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// permissions
2-
3-
checkOrRequestPermission(android.Manifest.permission.ACCESS_FINE_LOCATION);
41

52
// webview
63

modules/hybridapp/ANDROID_java_oncreate

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// permissions
2-
3-
checkOrRequestPermission(android.Manifest.permission.ACCESS_FINE_LOCATION);
41

52
// webview
63

0 commit comments

Comments
 (0)