summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2019-05-04 07:29:41 +0200
committerMax Kellermann <max@musicpd.org>2019-05-04 07:29:41 +0200
commit65df6ca14e1e92d5ae34c3abc5158e4ece0ca2c7 (patch)
treee869789519308528e2b565adf512b46e0c77dd41
parent36dec47bf70421733ac50c53f75a342752b777ff (diff)
android/Settings: request READ_EXTERNAL_STORAGE permission
Using this API function requires SDK level 23.
-rw-r--r--NEWS1
-rw-r--r--android/meson.build2
-rw-r--r--android/src/Settings.java35
3 files changed, 37 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index e3e2a882b..c0512ac8a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
ver 0.21.9 (not yet released)
* Android
- fix crash on ARMv7
+ - request storage permission on Android 6+
ver 0.21.8 (2019/04/23)
* input
diff --git a/android/meson.build b/android/meson.build
index ddd3f030c..ee1f7cd31 100644
--- a/android/meson.build
+++ b/android/meson.build
@@ -6,7 +6,7 @@ android_sdk = get_option('android_sdk')
android_abi = get_option('android_abi')
android_sdk_build_tools_version = '27.0.0'
-android_sdk_platform = 'android-21'
+android_sdk_platform = 'android-23'
android_build_tools_dir = join_paths(android_sdk, 'build-tools', android_sdk_build_tools_version)
android_sdk_platform_dir = join_paths(android_sdk, 'platforms', android_sdk_platform)
diff --git a/android/src/Settings.java b/android/src/Settings.java
index 69b5305e2..2713fdc8c 100644
--- a/android/src/Settings.java
+++ b/android/src/Settings.java
@@ -21,10 +21,12 @@ package org.musicpd;
import java.util.LinkedList;
+import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -178,6 +180,14 @@ public class Settings extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
+ /* TODO: this sure is the wrong place to request
+ permissions - it will cause MPD to quit
+ immediately; we should request permissions when we
+ need them, but implementing that is complicated, so
+ for now, we do it here to give users a quick
+ solution for the problem */
+ requestAllPermissions();
+
setContentView(R.layout.settings);
mRunButton = (ToggleButton) findViewById(R.id.run);
mRunButton.setOnCheckedChangeListener(mOnRunChangeListener);
@@ -203,6 +213,31 @@ public class Settings extends Activity {
super.onCreate(savedInstanceState);
}
+ private void checkRequestPermission(String permission) {
+ if (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED)
+ return;
+
+ try {
+ this.requestPermissions(new String[]{permission}, 0);
+ } catch (Exception e) {
+ Log.e(TAG, "requestPermissions(" + permission + ") failed",
+ e);
+ }
+ }
+
+ private void requestAllPermissions() {
+ if (android.os.Build.VERSION.SDK_INT < 23)
+ /* we don't need to request permissions on
+ this old Android version */
+ return;
+
+ /* starting with Android 6.0, we need to explicitly
+ request all permissions before using them;
+ mentioning them in the manifest is not enough */
+
+ checkRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
+ }
+
private void connectClient() {
mClient = new Main.Client(this, new Main.Client.Callback() {