public class Splash extends AppCompatActivity { private static final String MANAGE_EXTERNAL_STORAGE_PERMISSION = "android:manage_external_storage"; private final Handler handler = new Handler(); private static final int REQUEST_PERMISSIONS = 1234; private static final String[] PERMISSIONS = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_activity);
//To hide action Bar(Tool Bar)
getSupportActionBar().hide();
if (!arePermissionDenied()){
next();
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && arePermissionDenied()) {
// If Android 11 Request for Manage File Access Permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_PERMISSIONS);
return;
}
requestPermissions(PERMISSIONS, REQUEST_PERMISSIONS);
}
}
@Override
protected void onResume() {
super.onResume();
if (!arePermissionDenied()) {
next();
}
}
@RequiresApi(api = Build.VERSION_CODES.R)
boolean checkStorageApi30() {
AppOpsManager appOps = getApplicationContext().getSystemService(AppOpsManager.class);
int mode = appOps.unsafeCheckOpNoThrow(
MANAGE_EXTERNAL_STORAGE_PERMISSION,
getApplicationContext().getApplicationInfo().uid,
getApplicationContext().getPackageName()
);
return mode != AppOpsManager.MODE_ALLOWED;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onRequestPermissionsResult
(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSIONS && grantResults.length > 0) {
if (arePermissionDenied()) {
// Clear Data of Application, So that it can request for permissions again
((ActivityManager) Objects.requireNonNull(this.getSystemService(ACTIVITY_SERVICE))).clearApplicationUserData();
recreate();
} else {
next();
}
}
}
private boolean arePermissionDenied() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
return checkStorageApi30();
}
for (String permissions : PERMISSIONS) {
if (ActivityCompat.checkSelfPermission(getApplicationContext(),
permissions) != PackageManager.PERMISSION_GRANTED) {
return true;
}
}
return false;
}
private void next() {
handler.postDelayed(() -> {
startActivity(new Intent(Splash.this, MainActivity.class));
finish();
}, 1000);
}
}