Heavily based on this answer, I created the following class to request permissions on the app start when android version >= Marshmallow:
public class AndroidPlatform {
private static final String KEY_PERMISSIONS = "permissions";
private static final String KEY_REQUEST_CODE = "requestCode";
private static final int REQUEST_CODE_ASK_PERMISSIONS = 246;
private static final int REQUEST_CODE = 123;
private final FXActivity activity;
public AndroidPlatform() {
activity = FXActivity.getInstance();
}
public void checkPermissions() {
if (Build.VERSION.SDK_INT >= MARSHMALLOW) {
List<String> requiredPermissions = new ArrayList<>();
addPermission(activity, requiredPermissions , Manifest.permission.ACCESS_COARSE_LOCATION);
// additional required permissions
if (!requiredPermissions.isEmpty()) {
Intent permIntent = new Intent(activity, PermissionRequestActivity.class);
permIntent.putExtra(KEY_PERMISSIONS, requiredPermissions.toArray(new String[requiredPermissions .size()]));
permIntent.putExtra(KEY_REQUEST_CODE, REQUEST_CODE);
activity.startActivityForResult(permIntent, REQUEST_CODE_ASK_PERMISSIONS);
}
}
}
private void addPermission(Activity activity, List<String> permissionsList, String permission) {
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
}
}
public static class PermissionRequestActivity extends Activity {
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
FXActivity.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
finish();
}
@Override
protected void onStart() {
super.onStart();
String[] permissions = this.getIntent().getStringArrayExtra(KEY_PERMISSIONS);
int requestCode = this.getIntent().getIntExtra(KEY_REQUEST_CODE, 0);
ActivityCompat.requestPermissions(this, permissions, requestCode);
}
}
}
In your AndroidManifest.xml you have to add the corresponding activity:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<activity android:name="yourpackage.AndroidPlatform$PermissionRequestActivity" />
Also you have to add the android-support-library to your build.gradle:
dependencies {
androidCompile files('libs/android-support-v4.jar')
compileNoRetrolambda files('libs/android-support-v4.jar')
}
For further information regarding wifiManager / permissions see link