From a59884b319c51b9b222fefb5e90e2c5615137d82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=BA?= <110681414+root-S7@users.noreply.github.com> Date: Fri, 14 Jun 2024 18:36:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=8E=E7=89=88=E6=9C=AC=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=8B=92=E7=BB=9D=E6=8E=88=E4=BA=88=E6=9D=83=E9=99=90=E5=90=8E?= =?UTF-8?q?=E7=9A=84=E5=9B=9E=E8=B0=83=20(#406)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 低版本系统拒绝授予权限后的回调 * 进一步封装 * 多语言化 --- .../tungsten/fcl/activity/SplashActivity.java | 57 +++++++++++++++---- FCL/src/main/res/values-pt-rBR/strings.xml | 5 ++ FCL/src/main/res/values-ru/strings.xml | 5 ++ FCL/src/main/res/values-zh/strings.xml | 5 ++ FCL/src/main/res/values/strings.xml | 5 ++ 5 files changed, 65 insertions(+), 12 deletions(-) diff --git a/FCL/src/main/java/com/tungsten/fcl/activity/SplashActivity.java b/FCL/src/main/java/com/tungsten/fcl/activity/SplashActivity.java index eb062212..5fe62972 100644 --- a/FCL/src/main/java/com/tungsten/fcl/activity/SplashActivity.java +++ b/FCL/src/main/java/com/tungsten/fcl/activity/SplashActivity.java @@ -1,22 +1,21 @@ package com.tungsten.fcl.activity; +import static android.Manifest.permission.*; import android.Manifest; import android.annotation.SuppressLint; -import android.content.Intent; -import android.content.SharedPreferences; +import android.app.AlertDialog; +import android.content.*; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; - import com.tungsten.fcl.R; import com.tungsten.fcl.fragment.EulaFragment; import com.tungsten.fcl.fragment.RuntimeFragment; @@ -28,11 +27,8 @@ import com.tungsten.fcllibrary.component.FCLActivity; import com.tungsten.fcllibrary.component.ResultListener; import com.tungsten.fcllibrary.component.dialog.FCLAlertDialog; import com.tungsten.fcllibrary.component.theme.ThemeEngine; - -import java.io.File; import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.nio.file.*; @SuppressLint("CustomSplashScreen") public class SplashActivity extends FCLActivity { @@ -71,10 +67,19 @@ public class SplashActivity extends FCLActivity { }); } } else { - if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.checkSelfPermission(this, READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { init(); } else { - ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCodes.PERMISSION_REQUEST_CODE); + if (ActivityCompat.shouldShowRequestPermissionRationale(this, WRITE_EXTERNAL_STORAGE) || ActivityCompat.shouldShowRequestPermissionRationale(this, READ_EXTERNAL_STORAGE)) { + // 若用户第一次拒绝了授予,那么将会弹窗提醒用户为什么需要该权限 + enableAlertDialog((dialog, which) -> { + ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, RequestCodes.PERMISSION_REQUEST_CODE); + dialog.dismiss(); + }, getString(R.string.splash_permission_title), getString(R.string.splash_permission_msg), getString(R.string.splash_permission_grant), getString(R.string.splash_permission_close)); + } else { + // 没有勾选始终拒绝的化则继续请求权限 + ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, RequestCodes.PERMISSION_REQUEST_CODE); + } } } } @@ -136,10 +141,38 @@ public class SplashActivity extends FCLActivity { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { init(); } else { - if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - recheckPermission(); + if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) || !ActivityCompat.shouldShowRequestPermissionRationale(this, READ_EXTERNAL_STORAGE)) { + // 用户勾选了“始终拒绝” + enableAlertDialog((dialog, which) -> { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + Uri uri = Uri.fromParts("package", getPackageName(), null); + intent.setData(uri); + ResultListener.startActivityForResult(this, intent, RequestCodes.PERMISSION_REQUEST_CODE, (requestCode1, resultCode, data) -> { + if (requestCode1 == RequestCodes.PERMISSION_REQUEST_CODE) { + if (ActivityCompat.checkSelfPermission(this, READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) init(); + else onRequestPermissionsResult(requestCode1, permissions, grantResults); + + } + }); + + dialog.dismiss(); + }, getString(R.string.splash_permission_title), getString(R.string.splash_permission_settings_msg), getString(R.string.splash_permission_settings), getString(R.string.splash_permission_close)); + } else { + // 用户只是拒绝了权限 + checkPermission(); } } } } + + private void enableAlertDialog(DialogInterface.OnClickListener positiveButtonEvent, String... strings) { + new AlertDialog.Builder(this) + .setTitle(String.valueOf(strings[0])) + .setMessage(String.valueOf(strings[1])) + .setPositiveButton(String.valueOf(strings[2]), positiveButtonEvent) + .setNegativeButton(String.valueOf(strings[3]), (dialog, which) -> System.exit(0)) + .setCancelable(false) + .create() + .show(); + } } diff --git a/FCL/src/main/res/values-pt-rBR/strings.xml b/FCL/src/main/res/values-pt-rBR/strings.xml index 940b8457..d88615ba 100644 --- a/FCL/src/main/res/values-pt-rBR/strings.xml +++ b/FCL/src/main/res/values-pt-rBR/strings.xml @@ -4,6 +4,11 @@ null Sem permissão de armazenamento, por favor conceda a permissão ao Fold Craft Launcher. + Grant + Permission to store needed + Close the app + Settings + You have chosen "Never Allow." Please manually grant storage permissions in settings. Bem-vindo ao Fold Craft Launcher Não foi possível acessar o EULA, por favor verifique a sua conexão. diff --git a/FCL/src/main/res/values-ru/strings.xml b/FCL/src/main/res/values-ru/strings.xml index af65190b..0c436a43 100644 --- a/FCL/src/main/res/values-ru/strings.xml +++ b/FCL/src/main/res/values-ru/strings.xml @@ -4,6 +4,11 @@ null Нет доступа к хранилищу, предоствьте разрешение приложению Fold Craft Launcher в настройках. + Grant + Permission to store needed + Close the app + Settings + You have chosen "Never Allow." Please manually grant storage permissions in settings. Добро пожаловать в Fold Craft Launcher. Не удалось подтвердить наличие лицензии, из за проблем с соединением. diff --git a/FCL/src/main/res/values-zh/strings.xml b/FCL/src/main/res/values-zh/strings.xml index 9712be51..800e3304 100644 --- a/FCL/src/main/res/values-zh/strings.xml +++ b/FCL/src/main/res/values-zh/strings.xml @@ -1,6 +1,11 @@ 没有存储权限,请授予 Fold Craft Launcher 权限。 + 授予 + 需要存储权限 + 关闭应用 + 去设置 + 您已选择永不授权,请在设置中手动授予存储权限。 欢迎使用 Fold Craft Launcher 无法获取用户协议,请检查网络。 diff --git a/FCL/src/main/res/values/strings.xml b/FCL/src/main/res/values/strings.xml index 7df1f544..fc61ab17 100644 --- a/FCL/src/main/res/values/strings.xml +++ b/FCL/src/main/res/values/strings.xml @@ -4,6 +4,11 @@ null No storage permission, please grant Fold Craft Launcher the permission. + Grant + Permission to store needed + Close the app + Settings + You have chosen "Never Allow" Please manually grant storage permissions in settings. Welcome to Fold Craft Launcher Cannot get EULA, please check the network.