From 6a1ed20e07eaae926e39fb13cba23923cc1c3aea Mon Sep 17 00:00:00 2001 From: lionel <> Date: Fri, 25 Mar 2022 16:09:19 +0100 Subject: [PATCH] READ_EXTERNAL_STORAGE for android Q --- .../java/com/localtransfer/MainActivity.java | 2 +- .../com/localtransfer/SettingsActivity.java | 49 +++++++++++++++++-- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/localtransfer/MainActivity.java b/app/src/main/java/com/localtransfer/MainActivity.java index 15497f5..09b2bcf 100644 --- a/app/src/main/java/com/localtransfer/MainActivity.java +++ b/app/src/main/java/com/localtransfer/MainActivity.java @@ -227,7 +227,7 @@ public class MainActivity extends AppCompatActivity { public static final int REQUEST_ID_READ_EXTERNAL_STORAGE = 2001; - private boolean checkAndRequestPermissions() { + private boolean checkAndRequestPermissions() { if (ContextCompat.checkSelfPermission( this, Manifest.permission.READ_EXTERNAL_STORAGE) == diff --git a/app/src/main/java/com/localtransfer/SettingsActivity.java b/app/src/main/java/com/localtransfer/SettingsActivity.java index 44afe9c..b1352e9 100644 --- a/app/src/main/java/com/localtransfer/SettingsActivity.java +++ b/app/src/main/java/com/localtransfer/SettingsActivity.java @@ -1,8 +1,10 @@ package com.localtransfer; +import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; @@ -10,6 +12,8 @@ import android.view.MenuItem; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; @@ -49,14 +53,22 @@ public class SettingsActivity extends AppCompatActivity { SwitchPreference shared; shared = findPreference("use_shared_storage"); - if(shared.isChecked()) - directory.setVisible(true); + if(shared.isChecked()) { + if(checkAndRequestPermissions()) + directory.setVisible(true); + else + shared.setChecked(false); + } else directory.setVisible(false); shared.setOnPreferenceClickListener(preference -> { - if(shared.isChecked()) - directory.setVisible(true); + if(shared.isChecked()) { + if(checkAndRequestPermissions()) + directory.setVisible(true); + else + shared.setChecked(false); + } else directory.setVisible(false); return false; @@ -71,6 +83,35 @@ public class SettingsActivity extends AppCompatActivity { }); } + private boolean checkAndRequestPermissions() { + + if (ContextCompat.checkSelfPermission( + getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == + PackageManager.PERMISSION_GRANTED) { + Log.d("READ_EXTERNAL_STORAGE", "already granted"); + return true; + } + else { + ActivityCompat.requestPermissions(getActivity(), new String[] {android.Manifest.permission.READ_EXTERNAL_STORAGE}, MainActivity.REQUEST_ID_READ_EXTERNAL_STORAGE); + } + return false; + } + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], + int[] grantResults) { + switch (requestCode) { + case MainActivity.REQUEST_ID_READ_EXTERNAL_STORAGE: + if (grantResults.length > 0 && + grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d("READ_EXTERNAL_STORAGE", "granted"); + } else { + Log.d("READ_EXTERNAL_STORAGE", "No granted"); + } + return; + } + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);