0

I had an issue with my app. To use an option, I need to grant the external storage access. I found the perfect code for this there :

public  boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
            == PackageManager.PERMISSION_GRANTED) {
        Log.v(TAG,"Permission is granted");
        return true;
    } else {

        Log.v(TAG,"Permission is revoked");
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        return false;
    }
}
else { //permission is automatically granted on sdk<23 upon installation
    Log.v(TAG,"Permission is granted");
    return true;
}

}

Source : Storage permission error in Marshmallow

The problem is, the code is perfectly working but I do not understand how to prevent my own codes to continuing if access is not granted (or wait for the user to click on "allow" before continuing my codes).

My codes :

isStoragePermissionGranted();
        File outputFile = new File("");
            InputStream is = getResources().openRawResource(((Sound) adapter.getItem(index)).getMpsound());
            try {
                byte[] buffer = new byte[is.available()];
                is.read(buffer);
                File outputDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                outputFile = new File(outputDir, getResources().getResourceEntryName(((Sound) adapter.getItem(index)).getMpsound()) + ".mp3");
                OutputStream os = new FileOutputStream(outputFile);
                os.write(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Intent share = new Intent(Intent.ACTION_SEND);
            share.setType("audio/*");
            share.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", outputFile));
            share.putExtra(Intent.EXTRA_TEXT, "\"" + ((Sound) adapter.getItem(index)).getTitre_show() + "\" shared by my app !");
            startActivity(Intent.createChooser(share, "Share Sound File"));
            return true;

For now, everything is executed and the app try to share the file even is the access is not granted. So it doesn't work. And if I go back, the popup asking to allow access is there, waiting for an answer.

How can I achieve this ?

Ahriman
  • 115
  • 8

1 Answers1

1

Changing this line

isStoragePermissionGranted();

into this should work.

if(isStoragePermissionGranted())
dguy
  • 140
  • 9
  • aaaannnnndddd... it works. So it's like an "If" in another "If". I was not thinking I could do that. Thank's for your help. – Ahriman Oct 27 '19 at 16:30