Skip to content

Instantly share code, notes, and snippets.

@crgarridos
Last active October 18, 2016 10:50
Show Gist options
  • Save crgarridos/6e2bb91b87b078da036c2e9b14196b29 to your computer and use it in GitHub Desktop.
Save crgarridos/6e2bb91b87b078da036c2e9b14196b29 to your computer and use it in GitHub Desktop.
A BaseActivity to manage easily the storage permissions in Android
abstract public class BaseActivity extends AppCompatActivity {
// Storage Permissions variables
private static final int REQUEST_CODE_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private Runnable mOnWritePermissionGranted;
public void verifyStoragePermissions(Runnable onPermissionGranted) {
// Check if we have read or write permission
mOnWritePermissionGranted = onPermissionGranted;
int writePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int readPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
this,
PERMISSIONS_STORAGE,
REQUEST_CODE_EXTERNAL_STORAGE
);
}
else
callOnWritePermissionGranted();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
callOnWritePermissionGranted();
} else {
Toast.makeText(this, "Action cancelled", Toast.LENGTH_LONG).show();
}
}
}
private void callOnWritePermissionGranted() {
if(mOnWritePermissionGranted != null){
mOnWritePermissionGranted.run();
mOnWritePermissionGranted = null; //reset to prevent future calls issues...
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment