package net.minetest.minetest; import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MainActivity extends Activity { private final static int PERMISSIONS = 1; private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { checkPermission(); } else { next(); } } private void checkPermission() { final List missingPermissions = new ArrayList<>(); // check required permission for (final String permission : REQUIRED_SDK_PERMISSIONS) { final int result = ContextCompat.checkSelfPermission(this, permission); if (result != PackageManager.PERMISSION_GRANTED) { missingPermissions.add(permission); } } if (!missingPermissions.isEmpty()) { // request permission final String[] permissions = missingPermissions .toArray(new String[0]); ActivityCompat.requestPermissions(this, permissions, PERMISSIONS); } else { final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length]; Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED); onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS, grantResults); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == PERMISSIONS) { for (int index = 0; index < permissions.length; index++) { if (grantResults[index] != PackageManager.PERMISSION_GRANTED) { // permission not granted - toast and exit Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show(); finish(); return; } } // permission were granted - run next(); } } private void next() { Intent intent = new Intent(this, MtNativeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); } }