安卓11+ 申请完整文件管理权限

This commit is contained in:
TonyJiangWJ 2022-01-16 00:30:51 +08:00
parent b6f51d1569
commit b4eabe72a1
6 changed files with 46 additions and 3 deletions

View File

@ -5,6 +5,8 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

View File

@ -3,9 +3,13 @@ package org.autojs.autojs.ui.main;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
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 android.util.Log;
import android.view.Gravity;
@ -13,10 +17,12 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import com.stardust.app.FragmentPagerAdapterBuilder;
import com.stardust.app.OnActivityResultDelegate;
import com.stardust.autojs.core.floaty.AccessibilityFloatyService;
import com.stardust.autojs.core.permission.OnRequestPermissionsResultCallback;
import com.stardust.autojs.core.permission.PermissionRequestProxyActivity;
import com.stardust.autojs.core.permission.RequestPermissionCallbacks;
@ -55,6 +61,8 @@ import org.greenrobot.eventbus.Subscribe;
import java.util.Arrays;
import java.util.regex.Pattern;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.widget.Toolbar;
@ -140,9 +148,33 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
}
private void checkPermissions() {
checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 先判断有没有权限
if (!Environment.isExternalStorageManager()) {
ActivityResultLauncher<Intent> launcher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(), result -> {
if (Environment.isExternalStorageManager()) {
AutoJs.getInstance().setLogFilePath(Pref.getScriptDirPath(), BuildConfig.DEBUG);
Explorers.workspace().refreshAll();
}
});
new MaterialDialog.Builder(this)
.title(R.string.text_need_manage_all_files_access)
.content(R.string.explain_all_files_access)
.positiveText(R.string.text_go_to_setting)
.negativeText(R.string.text_cancel)
.onPositive((dialog, which) -> {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
launcher.launch(intent);
}).show();
}
} else {
checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
}
private void showAccessibilitySettingPromptIfDisabled() {
if (AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) {
return;
@ -240,6 +272,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
FloatyWindowManger.hideCircularMenu();
ForegroundService.stop(this);
stopService(new Intent(this, FloatyService.class));
stopService(new Intent(this, AccessibilityFloatyService.class));
AutoJs.getInstance().getScriptEngineService().stopAll();
}
@ -258,6 +291,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mActivityResultMediator.onActivityResult(requestCode, resultCode, data);
}
@ -269,6 +303,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
}
if (getGrantResult(Manifest.permission.READ_EXTERNAL_STORAGE, permissions, grantResults) == PackageManager.PERMISSION_GRANTED) {
Explorers.workspace().refreshAll();
AutoJs.getInstance().setLogFilePath(Pref.getScriptDirPath(), BuildConfig.DEBUG);
}
}

View File

@ -96,6 +96,8 @@
<string name="key_use_volume_control_running">key_use_volume_control_running</string>
<string name="text_use_volume_to_stop_running">Stop all scripts when volume changes</string>
<string name="text_need_to_enable_accessibility_service">Need to enable Accessibility Service</string>
<string name="text_need_manage_all_files_access">Manage All Files Permission</string>
<string name="explain_all_files_access">Requires manage all files permission to manage all the code files</string>
<string name="text_refresh">Refresh</string>
<string name="notice_no_running_script"><![CDATA[No running script φ(>ω<*)]]></string>
<string name="text_checking_update">Checking for updates</string>

View File

@ -104,6 +104,8 @@
<string name="key_use_volume_control_running">key_use_volume_control_running</string>
<string name="text_use_volume_to_stop_running">音量上键停止所有脚本</string>
<string name="text_need_to_enable_accessibility_service">需要启用无障碍服务</string>
<string name="text_need_manage_all_files_access">需要所有文件的管理权限</string>
<string name="explain_all_files_access">软件需要所有文件的管理权限才能正常进行编辑、修改、删除脚本等操作,如果不授予相关权限将无法查看和运行脚本。</string>
<string name="text_import_fail">导入失败</string>
<string name="text_no_brower">没有浏览器耶o(╯□╰)o快去安装一个吧</string>
<string name="text_refresh">刷新</string>

View File

@ -269,7 +269,7 @@ public abstract class AutoJs {
}
}
protected void setLogFilePath(String path, boolean isDebug) {
public void setLogFilePath(String path, boolean isDebug) {
LogConfigurator logConfigurator = new LogConfigurator();
String pid = String.valueOf(android.os.Process.myPid());
logConfigurator.setFilePattern("%d - [%p]\t[" + pid + "] %c - %m%n");

View File

@ -5,7 +5,9 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>