Browse Source

Android permission grant fix

Lou Yihua 7 years ago
parent
commit
21b36bc887

+ 29 - 19
android/app/src/main/java/io/github/sdlpal/MainActivity.java

@@ -25,30 +25,22 @@ public class MainActivity extends AppCompatActivity {
     private final static int REQUEST_FILESYSTEM_ACCESS_CODE = 101;
     private final AppCompatActivity mActivity = this;
 
-    private void requestForPermissions(boolean setupManuallyIfRequestForbidden) {
-        if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
-            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_FILESYSTEM_ACCESS_CODE);
-        } else {
-            if (setupManuallyIfRequestForbidden) {
-                Intent intent = new Intent();
-                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
-                Uri uri = Uri.fromParts("package", getPackageName(), null);
-                intent.setData(uri);
-                startActivity(intent);
-            } else {
-                alertUser();
-            }
-        }
+    interface RequestForPermissions {
+        void request();
     }
 
-    private void alertUser() {
+    private void requestForPermissions() {
+        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_FILESYSTEM_ACCESS_CODE);
+    }
+
+    private void alertUser(int id, final RequestForPermissions req) {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
-        builder.setMessage(R.string.toast_requestpermission);
+        builder.setMessage(id);
         builder.setCancelable(false);
         builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialogInterface, int i) {
-                requestForPermissions(true);
+                req.request();
             }
         });
         builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@@ -67,8 +59,26 @@ public class MainActivity extends AppCompatActivity {
             case REQUEST_FILESYSTEM_ACCESS_CODE:
                 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                     StartGame();
+                    return;
+                }
+                if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+                    alertUser(R.string.toast_requestpermission, new RequestForPermissions() {
+                        @Override
+                        public void request() {
+                            requestForPermissions();
+                        }
+                    });
                 } else {
-                    alertUser();
+                    alertUser(R.string.toast_grantpermission, new RequestForPermissions() {
+                        @Override
+                        public void request() {
+                            Intent intent = new Intent();
+                            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+                            Uri uri = Uri.fromParts("package", getPackageName(), null);
+                            intent.setData(uri);
+                            startActivity(intent);
+                        }
+                    });
                 }
                 break;
         }
@@ -79,7 +89,7 @@ public class MainActivity extends AppCompatActivity {
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED ) {
             StartGame();
         } else {
-            requestForPermissions(false);
+            requestForPermissions();
         }
     }
 

+ 2 - 1
android/app/src/main/res/values-zh-rTW/strings.xml

@@ -26,5 +26,6 @@
     <string name="action_usefontfile">自訂字體檔案</string>
     <string name="action_usemsgfile">自訂語言檔案</string>
     <string name="action_uselogfile">記錄到檔案</string>
-    <string name="toast_requestpermission">請允許SD卡讀寫,否則程式無法正常運行</string>
+    <string name="toast_requestpermission">本應用需要存儲裝置讀寫許可權以訪問遊戲資源。如拒絕授權,則本應用無法正常運行。</string>
+    <string name="toast_grantpermission">本應用需要存儲裝置讀寫許可權以訪問遊戲資源。請點擊“確定”後手動為本應用開啟許可權。</string>
 </resources>

+ 2 - 1
android/app/src/main/res/values-zh/strings.xml

@@ -26,5 +26,6 @@
     <string name="action_uselogfile">记录到文件</string>
     <string name="action_usemsgfile">自定义语言文件</string>
     <string name="action_usefontfile">自定义字体文件</string>
-    <string name="toast_requestpermission">请允许SD卡读写,否则程序无法正常运行</string>
+    <string name="toast_requestpermission">本应用需要存储设备读写权限以访问游戏资源。如拒绝授权,则本应用无法正常运行。</string>
+    <string name="toast_grantpermission">本应用需要存储设备读写权限以访问游戏资源。请点击“确定”后手动为本应用开启权限。</string>
 </resources>

+ 2 - 1
android/app/src/main/res/values/strings.xml

@@ -26,5 +26,6 @@
     <string name="action_usemsgfile">Customized message file</string>
     <string name="action_usefontfile">Customized font file</string>
     <string name="action_uselogfile">Log to file</string>
-    <string name="toast_requestpermission">Please approve sdcard access, or the app will not work properly.</string>
+    <string name="toast_requestpermission">This app requires storage permission to access game resources. Denying the request prevents the app running properly.</string>
+    <string name="toast_grantpermission">This app requires storage permission to access game resources. Please click \'OK\' and grant the permission manually.</string>
 </resources>