+ static final int MY_PERMISSION_REQUEST = 1001;
+
+ public boolean have_location_permission = false;
+ public boolean have_storage_permission = false;
+ public boolean asked_permission = false;
+
+ AltosMapOnline map_online;
+
+ void
+ tell_map_permission(AltosMapOnline map_online) {
+ this.map_online = map_online;
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions,
+ int[] grantResults) {
+ if (requestCode == MY_PERMISSION_REQUEST) {
+ for (int i = 0; i < grantResults.length; i++) {
+ if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
+ if (permissions[i].equals(Manifest.permission.ACCESS_FINE_LOCATION)) {
+ have_location_permission = true;
+ enable_location_updates();
+ if (map_online != null)
+ map_online.position_permission();
+ }
+ if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ have_storage_permission = true;
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ AltosDebug.debug("+ ON RESUME +");
+
+ if (!asked_permission) {
+ asked_permission = true;
+ if (ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_FINE_LOCATION)
+ == PackageManager.PERMISSION_GRANTED)
+ {
+ have_location_permission = true;
+ }
+ if (ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ == PackageManager.PERMISSION_GRANTED)
+ {
+ have_storage_permission = true;
+ }
+ int count = (have_location_permission ? 0 : 1) + (have_storage_permission ? 0 : 1);
+ if (count > 0)
+ {
+ String[] permissions = new String[count];
+ int i = 0;
+ if (!have_location_permission)
+ permissions[i++] = Manifest.permission.ACCESS_FINE_LOCATION;
+ if (!have_location_permission)
+ permissions[i++] = Manifest.permission.WRITE_EXTERNAL_STORAGE;
+ ActivityCompat.requestPermissions(this, permissions, MY_PERMISSION_REQUEST);
+ }
+ }
+ if (have_location_permission)
+ enable_location_updates();
+ }
+