android/Settings: request READ_EXTERNAL_STORAGE permission
Using this API function requires SDK level 23.
This commit is contained in:
parent
36dec47bf7
commit
65df6ca14e
1
NEWS
1
NEWS
@ -1,6 +1,7 @@
|
|||||||
ver 0.21.9 (not yet released)
|
ver 0.21.9 (not yet released)
|
||||||
* Android
|
* Android
|
||||||
- fix crash on ARMv7
|
- fix crash on ARMv7
|
||||||
|
- request storage permission on Android 6+
|
||||||
|
|
||||||
ver 0.21.8 (2019/04/23)
|
ver 0.21.8 (2019/04/23)
|
||||||
* input
|
* input
|
||||||
|
@ -6,7 +6,7 @@ android_sdk = get_option('android_sdk')
|
|||||||
android_abi = get_option('android_abi')
|
android_abi = get_option('android_abi')
|
||||||
|
|
||||||
android_sdk_build_tools_version = '27.0.0'
|
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_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)
|
android_sdk_platform_dir = join_paths(android_sdk, 'platforms', android_sdk_platform)
|
||||||
|
@ -21,10 +21,12 @@ package org.musicpd;
|
|||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.Editor;
|
import android.content.SharedPreferences.Editor;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
@ -178,6 +180,14 @@ public class Settings extends Activity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
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);
|
setContentView(R.layout.settings);
|
||||||
mRunButton = (ToggleButton) findViewById(R.id.run);
|
mRunButton = (ToggleButton) findViewById(R.id.run);
|
||||||
mRunButton.setOnCheckedChangeListener(mOnRunChangeListener);
|
mRunButton.setOnCheckedChangeListener(mOnRunChangeListener);
|
||||||
@ -203,6 +213,31 @@ public class Settings extends Activity {
|
|||||||
super.onCreate(savedInstanceState);
|
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() {
|
private void connectClient() {
|
||||||
mClient = new Main.Client(this, new Main.Client.Callback() {
|
mClient = new Main.Client(this, new Main.Client.Callback() {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user