diff --git a/studio-android/LightNovelLibrary/app/src/main/AndroidManifest.xml b/studio-android/LightNovelLibrary/app/src/main/AndroidManifest.xml
index 610aa38..d2792c9 100644
--- a/studio-android/LightNovelLibrary/app/src/main/AndroidManifest.xml
+++ b/studio-android/LightNovelLibrary/app/src/main/AndroidManifest.xml
@@ -15,6 +15,7 @@
+
diff --git a/studio-android/LightNovelLibrary/app/src/main/java/org/mewx/wenku8/activity/MainActivity.java b/studio-android/LightNovelLibrary/app/src/main/java/org/mewx/wenku8/activity/MainActivity.java
index dd8971d..5b4bc71 100644
--- a/studio-android/LightNovelLibrary/app/src/main/java/org/mewx/wenku8/activity/MainActivity.java
+++ b/studio-android/LightNovelLibrary/app/src/main/java/org/mewx/wenku8/activity/MainActivity.java
@@ -1,11 +1,16 @@
package org.mewx.wenku8.activity;
+import static android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION;
+
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
@@ -15,10 +20,13 @@
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.afollestad.materialdialogs.Theme;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
+import org.mewx.wenku8.BuildConfig;
import org.mewx.wenku8.MyApp;
import org.mewx.wenku8.R;
import org.mewx.wenku8.async.CheckAppNewVersion;
@@ -37,8 +45,10 @@
public class MainActivity extends BaseMaterialActivity {
+ // Below request codes can be any value.
private static final int REQUEST_WRITE_EXTERNAL = 100;
private static final int REQUEST_READ_EXTERNAL = 101;
+ private static final int APP_STORAGE_ACCESS_REQUEST_CODE = 501;
private static final AtomicBoolean NEW_VERSION_CHECKED = new AtomicBoolean(false);
@@ -77,19 +87,30 @@ private void initialApp() {
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
- // request write permission (112 write permission)
- boolean hasPermission = (ContextCompat.checkSelfPermission(this,
- Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
- if (!hasPermission) {
- ActivityCompat.requestPermissions(this,
- new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL);
- }
-
- // request read permission
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- hasPermission = (ContextCompat.checkSelfPermission(this,
- Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
- if (!hasPermission) {
+ // Requests storage RW permissions (112 write permission).
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
+ // Shows a dialog to confirm requesting for the permission.
+ new MaterialDialog.Builder(MainActivity.this)
+ .theme(Theme.LIGHT)
+ .onPositive((ignored1, ignored2) -> {
+ Intent intent = new Intent(ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
+ startActivityForResult(intent, APP_STORAGE_ACCESS_REQUEST_CODE);
+ })
+ .onNegative((ignored1, ignored2) -> {
+ Toast.makeText(this, getResources().getText(R.string.missing_permission), Toast.LENGTH_LONG).show();
+ })
+ .content(R.string.dialog_content_ask_for_storage_permission)
+ .positiveText(R.string.dialog_positive_ok)
+ .negativeText(R.string.dialog_negative_preferno)
+ .show();
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ // Write permission.
+ if (missingPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL);
+ }
+ // Read permission.
+ if (missingPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_EXTERNAL);
}
@@ -233,25 +254,35 @@ protected void onResume() {
}
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && requestCode == APP_STORAGE_ACCESS_REQUEST_CODE) {
+ // Note that the result Code could either be OK or CANCELLED.
+ if (Environment.isExternalStorageManager()) {
+ // Permission granted.
+ reloadApp();
+ } else {
+ Toast.makeText(this, getResources().getText(R.string.missing_permission), Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_WRITE_EXTERNAL:
- case REQUEST_READ_EXTERNAL: {
- if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- //reload my activity with permission granted or use the features what required the permission
- Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
- if (i != null) {
- i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(i);
+ case REQUEST_READ_EXTERNAL:
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ reloadApp();
+ } else {
+ Toast.makeText(this, getResources().getText(R.string.missing_permission), Toast.LENGTH_LONG).show();
}
- } else {
- Toast.makeText(this, getResources().getText(R.string.missing_permission), Toast.LENGTH_LONG).show();
}
- }
+ break;
}
-
}
@Override
@@ -283,4 +314,17 @@ public void run() {
}
}
+ private boolean missingPermission(String permissionName) {
+ return ContextCompat.checkSelfPermission(this, permissionName) != PackageManager.PERMISSION_GRANTED;
+ }
+
+ private void reloadApp() {
+ //reload my activity with permission granted or use the features what required the permission
+ Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
+ if (i != null) {
+ i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(i);
+ }
+ }
+
}
diff --git a/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rHK/strings.xml b/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rHK/strings.xml
index 6f2c93e..ccb22ab 100644
--- a/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rHK/strings.xml
+++ b/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rHK/strings.xml
@@ -240,5 +240,6 @@
註意
您正在使用MewX提供的第三方中繼服務,點擊查看詳情。
已啟用第三方Wenku8中繼服務,由於以下的可能原因:\n登錄過期,請重新登錄;\n手機網絡異常,試試瀏覽器訪問;\n運營商劫持(部分地區的10086);\nWIFI切換到數據需等待域名解析緩存刷新(約10min);\n服務器暫時無法響應請求;\n此時段請求服務器次數過多。\n\n該中繼服務列表服務由mewx.org提供,與wenku8無關。另外,此列表數據僅供海外用戶使用,並可能滯後網站24小時以上。請勿在中國大陸使用,否則後果自負,望悉知。
- QQ交流群: 427577610
+ QQ交流群: 181789084
+ 由於曆史原因,app需要冩入存儲目錄下的wenku8文件夾,是否授予冩入權限?
diff --git a/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rTW/strings.xml b/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rTW/strings.xml
index 6f2c93e..ccb22ab 100644
--- a/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rTW/strings.xml
+++ b/studio-android/LightNovelLibrary/app/src/main/res/values-zh-rTW/strings.xml
@@ -240,5 +240,6 @@
註意
您正在使用MewX提供的第三方中繼服務,點擊查看詳情。
已啟用第三方Wenku8中繼服務,由於以下的可能原因:\n登錄過期,請重新登錄;\n手機網絡異常,試試瀏覽器訪問;\n運營商劫持(部分地區的10086);\nWIFI切換到數據需等待域名解析緩存刷新(約10min);\n服務器暫時無法響應請求;\n此時段請求服務器次數過多。\n\n該中繼服務列表服務由mewx.org提供,與wenku8無關。另外,此列表數據僅供海外用戶使用,並可能滯後網站24小時以上。請勿在中國大陸使用,否則後果自負,望悉知。
- QQ交流群: 427577610
+ QQ交流群: 181789084
+ 由於曆史原因,app需要冩入存儲目錄下的wenku8文件夾,是否授予冩入權限?
diff --git a/studio-android/LightNovelLibrary/app/src/main/res/values/strings.xml b/studio-android/LightNovelLibrary/app/src/main/res/values/strings.xml
index 233d2ff..a675adc 100644
--- a/studio-android/LightNovelLibrary/app/src/main/res/values/strings.xml
+++ b/studio-android/LightNovelLibrary/app/src/main/res/values/strings.xml
@@ -112,6 +112,7 @@
停止加载
点击重新加载
没有结果
+ 由于历史原因,app需要写入存储目录下的wenku8文件夹,是否授予写入权限?
选择执行的下载操作:
选择执行的删除操作:
输入保存的文件名(不要加.jpg)
@@ -240,5 +241,5 @@
帖子太久远,无法回复
您正在使用MewX提供的第三方中继服务,点击查看详情。
已启用第三方Wenku8中继服务,由于以下的可能原因:\n登录过期,请重新登录;\n手机网络异常,试试浏览器访问;\n运营商劫持(部分地区的10086);\nWIFI切换到数据需等待域名解析缓存刷新(约10min);\n服务器暂时无法响应请求;\n此时段请求服务器次数过多。\n\n该中继服务列表服务由mewx.org提供,与wenku8无关。另外,此列表数据仅供海外用户使用,并可能滞后网站24小时以上。请勿在中国大陆使用,否则后果自负,望悉知。
- QQ交流群: 427577610
+ QQ交流群: 181789084