diff options
author | Max Kellermann <max@musicpd.org> | 2019-05-04 07:29:41 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2019-05-04 07:29:41 +0200 |
commit | 65df6ca14e1e92d5ae34c3abc5158e4ece0ca2c7 (patch) | |
tree | e869789519308528e2b565adf512b46e0c77dd41 | |
parent | 36dec47bf70421733ac50c53f75a342752b777ff (diff) |
android/Settings: request READ_EXTERNAL_STORAGE permission
Using this API function requires SDK level 23.
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | android/meson.build | 2 | ||||
-rw-r--r-- | android/src/Settings.java | 35 |
3 files changed, 37 insertions, 1 deletions
@@ -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() { |