返回列表 发新帖

【安卓开发】如何使你的软件做到无root但是能自由读data目录文件功能

  [复制链接]

29

主题

519

回帖

3200

积分

大学生

Rank: 5Rank: 5

金币
1612
好评
76
信誉
120

考神MT论坛最佳新人

QQ
发表于 2023-9-22 23:45:17 来自手机  | 显示全部楼层 | 阅读模式  来自 四川
本帖最后由 莫尔12 于 2023-9-23 00:14 编辑

没看的必看(获取访问权限的关键教程,也包含此教程所调用的类): 上一篇

这篇教程我打算改用AndroidIDE了(你用AIDE也是没问题的,这里还是推荐使用AIDE)

当你阅读并按照上一篇教程复刻工程后,并且有一定的Android开发基础,你就可以开始阅读本篇教程(你必须继上一篇教程的工程继续开发)。
相信你已经会使用AIDE创建新的按钮了,所以这里就不再详细放图演示,不会的去看上一篇。

1.创建一个新的按钮,用于调用类
调用方法:
  1. startForRead(MainActivity.this);
复制代码


2.在主活动中定义变量:
  1. private static int mode;
复制代码

你可以把上一篇工程的uri改为:
  1. public static Uri uri = Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata");
复制代码


3.在主活动中依次添加类:
  1. private static void readFromFile(final View v, final Activity activity, Uri uri) {
  2.         final DocumentFile dir = DocumentFile.fromTreeUri(activity, uri);
  3.     final DocumentFile[] files = dir.listFiles();
  4.         boolean xmlFileDetected = false;
  5.     List<DocumentFile> xmlFiles = new ArrayList<>();
  6.     //遍历文件,检查是否为txt文件
  7.     for (DocumentFile file : files) {
  8.         if (file.isFile() && file.getName().endsWith(".txt")) {
  9.             xmlFiles.add(file);
  10.             xmlFileDetected = true;
  11.         }
  12.     }
  13.         
  14.     if (!xmlFileDetected) {
  15.             View rootView = activity.findViewById(android.R.id.content);
  16.     Snackbar.make(rootView, "没有选项可供选择", Snackbar.LENGTH_LONG).show();
  17.     return;
  18. }

  19.     final String[] fileNames = new String[xmlFiles.size()];
  20.     for (int i = 0; i < xmlFiles.size(); i++) {
  21.         fileNames[i] = xmlFiles.get(i).getName();
  22.     }
  23.     //弹出一个对话框让用户选择文件名
  24.     AlertDialog.Builder builder = new AlertDialog.Builder(activity);
  25.     builder.setTitle("选择要读的文件名");
  26.     builder.setItems(fileNames, new DialogInterface.OnClickListener() {
  27.             @Override
  28.             public void onClick(DialogInterface dialog, int which) {
  29.                 //获取选择的文件
  30.                 DocumentFile file = xmlFiles.get(which);
  31.                 if (file != null && file.getName().endsWith(".txt")) {
  32.                     try {
  33.                         //输入流 - On
  34.                         InputStream is = activity.getContentResolver().openInputStream(file.getUri());
  35.                         //读内容
  36.                         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  37.                         StringBuilder content = new StringBuilder();
  38.                         String line;
  39.                         while ((line = reader.readLine()) != null) {
  40.                             content.append(line).append("\n");
  41.                         }
  42.                         reader.close();
  43.                         is.close();
  44.                         //弹对话框,显示文件内容
  45.                         AlertDialog.Builder builder2 = new AlertDialog.Builder(activity);
  46.                         builder2.setTitle(file.getName() + " 的内容");
  47.                         TextView textView = new TextView(activity);
  48.                         textView.setText(content.toString());
  49.                         builder2.setMessage(content.toString());
  50.                         builder2.setNegativeButton("关闭", null);
  51.                         builder2.show();
  52.                     } catch (IOException e) {
  53.                         Toast.makeText(activity, "error!", Toast.LENGTH_SHORT).show();
  54.                         e.printStackTrace();
  55.                     }
  56.                 }
  57.             }
  58.         });
  59.     builder.setNegativeButton("取消", null);
  60.     builder.show();
  61.     }
复制代码

  1. @RequiresApi(api = Build.VERSION_CODES.O)
  2.     public static void startForRead(Activity activity) {
  3.         if (checkPermission(activity, uri)) {
  4.             View view = null;
  5.             readFromFile(view, activity, uri);
  6.         } else {
  7.             requestPermission(activity, uri);
  8.         }
  9.         mode = 1;
  10.     }
复制代码


如果遇到确实库等问题就用AIDE自动导入功能




好了最后求助一下,我看见论坛和b站有人用termux装了个as并且还可以正常运行,我装了后不是提示adb未找到就是gradle配置有问题,哪位大佬可以发一篇完整的教程啊啊啊啊啊啊啊
最后放效果

如果data目录有txt文件



已经成功读出来了

如果data目录没有txt文件
会提示这个


完成,如果还有问题建议私信找我

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

29

主题

519

回帖

3200

积分

大学生

Rank: 5Rank: 5

金币
1612
好评
76
信誉
120

考神MT论坛最佳新人

QQ
发表于 2023-9-22 23:50:03 来自手机  | 显示全部楼层  来自 四川
有人需要看删除和写文件的方法类吗?
回复

使用道具 举报

3

主题

833

回帖

3005

积分

大学生

Rank: 5Rank: 5

金币
1658
好评
0
信誉
100

考神MT论坛帅哥

发表于 2023-9-22 23:48:36 来自手机  | 显示全部楼层  来自 河北
查看隐藏
回复

使用道具 举报

0

主题

372

回帖

1198

积分

高中生

Rank: 4

金币
863
好评
0
信誉
100

考神

QQ
发表于 2023-9-22 23:49:25 来自手机  | 显示全部楼层  来自 江西
看看隐藏
回复

使用道具 举报

0

主题

33

回帖

154

积分

小学生

Rank: 2

金币
103
好评
0
信誉
100
发表于 2023-9-22 23:52:19 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

2

主题

3099

回帖

7267

积分

硕士生

Rank: 6Rank: 6

金币
1623
好评
3
信誉
104
发表于 2023-9-22 23:53:05 | 显示全部楼层  来自 广西
感谢分享
回复

使用道具 举报

0

主题

1332

回帖

3842

积分

大学生

Rank: 5Rank: 5

金币
3465
好评
0
信誉
96
发表于 2023-9-22 23:53:46 来自手机  | 显示全部楼层  来自 江西
看看远处
回复

使用道具 举报

5

主题

120

回帖

322

积分

初中生

Rank: 3Rank: 3

金币
30
好评
0
信誉
100
发表于 2023-9-22 23:56:08 来自手机  | 显示全部楼层  来自 重庆
看看隐藏
回复

使用道具 举报

151

主题

2252

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4922
好评
35
信誉
101
QQ
发表于 2023-9-22 23:57:47 来自手机  | 显示全部楼层  来自 河北
看看你的
回复

使用道具 举报

4

主题

451

回帖

2266

积分

大学生

Rank: 5Rank: 5

金币
1581
好评
0
信誉
130
发表于 2023-9-22 23:58:43 来自手机  | 显示全部楼层  来自 湖北
看看隐藏
回复

使用道具 举报

38

主题

2857

回帖

9136

积分

硕士生

喆喆

Rank: 6Rank: 6

金币
4684
好评
16
信誉
99

考神MT论坛新人MT论坛活跃会员MT论坛帅哥

QQ
发表于 2023-9-23 00:00:27 来自手机  | 显示全部楼层  来自 内蒙古
看看隐藏
回复

使用道具 举报

0

主题

1787

回帖

3650

积分

大学生

Rank: 5Rank: 5

金币
16
好评
0
信誉
100
发表于 2023-9-23 00:01:12 来自手机  | 显示全部楼层  来自 广西
感谢分享
回复

使用道具 举报

51

主题

2639

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
6742
好评
64
信誉
101
发表于 2023-9-23 00:01:23 来自手机  | 显示全部楼层  来自 江西
感谢大佬分享下
回复

使用道具 举报

6

主题

3094

回帖

8520

积分

硕士生

Rank: 6Rank: 6

金币
7201
好评
1
信誉
100
发表于 2023-9-23 00:01:29 来自手机  | 显示全部楼层  来自 云南
感谢感谢
回复

使用道具 举报

11

主题

6715

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
3675
好评
18
信誉
259

MT论坛最佳新人MT论坛帅哥考神MT论坛新人MT论坛活跃会员

发表于 2023-9-23 00:01:54 来自手机  | 显示全部楼层  来自 福建
多谢分享教程
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表