Fixed /sdcard: permission denied when trying to access /sdcard in 'Android' shell

This commit is contained in:
simonpunk 2020-06-10 01:21:51 +08:00
parent cd1672a4d9
commit e2707d054d
3 changed files with 68 additions and 3 deletions

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.offsec.nhterm"
android:versionName="1.0.0"
android:versionCode="1"
android:installLocation="auto">
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
@ -46,7 +44,8 @@
android:label="@string/application_terminal"
android:hardwareAccelerated="true"
android:allowBackup="false"
android:theme="@style/Theme">
android:theme="@style/Theme"
android:requestLegacyExternalStorage="true">
<activity android:name="com.offsec.nhterm.Term"
android:launchMode="singleTask"
android:resizeableActivity="true"

View File

@ -41,6 +41,7 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
@ -71,6 +72,7 @@ import com.offsec.nhterm.emulatorview.UpdateCallback;
import com.offsec.nhterm.emulatorview.compat.ClipboardManagerCompat;
import com.offsec.nhterm.emulatorview.compat.ClipboardManagerCompatFactory;
import com.offsec.nhterm.emulatorview.compat.KeycodeConstants;
import com.offsec.nhterm.util.PermissionCheck;
import com.offsec.nhterm.util.SessionList;
import com.offsec.nhterm.util.TermSettings;
@ -365,6 +367,11 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences.
Log.v(TermDebug.LOG_TAG, "onCreate");
// Ask for storage permission
if (!PermissionCheck.isAllPermitted(getApplicationContext(), PermissionCheck.DEFAULT_PERMISSIONS)) {
PermissionCheck.checkPermissions(getApplicationContext(), this, PermissionCheck.DEFAULT_PERMISSIONS, PermissionCheck.DEFAULT_PERMISSION_RQCODE);
}
mPrivateAlias = new ComponentName(this, RemoteInterface.PRIVACT_ACTIVITY_ALIAS);
if (icicle == null)
@ -1127,6 +1134,19 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences.
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PermissionCheck.DEFAULT_PERMISSION_RQCODE){
for (int grantResult:grantResults){
if (grantResult != 0){
return;
}
}
}
}
@Override
protected void onActivityResult(int request, int result, Intent data) {
Log.d("onActivityResult?","?onActivityResult??");

View File

@ -0,0 +1,46 @@
package com.offsec.nhterm.util;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
public class PermissionCheck {
private static final String TAG = "PermissionCheck";
public static final int DEFAULT_PERMISSION_RQCODE = 1;
public static final String[] DEFAULT_PERMISSIONS = {
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
};
//First check the permissions everytime the app is freshly run.
public static void checkPermissions(Context context, Activity activity, String[] PERMISSIONS, int REQUEST_CODE) {
if (!hasPermissions(context, PERMISSIONS)) {
ActivityCompat.requestPermissions(activity, PERMISSIONS, REQUEST_CODE);
}
}
private static boolean hasPermissions(Context context, String... permissions) {
if (context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
public static boolean isAllPermitted(Context context, String[] PERMISSIONS){
for (String permissions:PERMISSIONS){
if (ActivityCompat.checkSelfPermission(context, permissions) != PackageManager.PERMISSION_GRANTED){
Log.e(TAG, "Permissions are NOT all granted.");
return false;
}
}
Log.d(TAG, "All permissions are granted.");
return true;
}
}