12下一页
返回列表 发新帖

Kotlin 访问data 支持安卓13

[复制链接]

40

主题

678

回帖

3061

积分

大学生

Rank: 5Rank: 5

金币
605
好评
6
信誉
100
发表于 2023-7-26 17:09:19 来自手机  | 显示全部楼层 | 阅读模式  来自 广东
本帖最后由 chenminghui 于 2023-7-26 18:48 编辑

package com.fa

import android.Manifest
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.DocumentsContract
import androidx.activity.result.contract.ActivityResultContract
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.documentfile.provider.DocumentFile
import com.fa.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
   
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val requestAccessDataDirLauncher = registerForActivityResult(RequestAccessAppDataDir()) {
            if (it != null) {
                contentResolver.takePersistableUriPermission(
                    it,
                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
                )
            }
        }
        binding.requestPermission.setOnClickListener {
            requestAccessDataDirLauncher.launch(targetPackageName ?: "")
        }
    }
    private val targetPackageName: String?
        get() = binding.targetPackageName.text?.toString()
}
private fun createAppDataDirUri(packageName: String) =
    Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata%2F${packageName}")!!
class RequestAccessAppDataDir : ActivityResultContract<String, Uri?>() {
    override fun createIntent(context: Context, input: String): Intent {
        val dirUri = createAppDataDirUri(input)
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
        intent.flags = (Intent.FLAG_GRANT_READ_URI_PERMISSION
                or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
                or Intent.FLAG_GRANT_PREFIX_URI_PERMISSION)
        val documentFile = DocumentFile.fromTreeUri(context.applicationContext, dirUri)!!
        intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, documentFile.uri)
        return intent
    }
    override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
        return intent?.data
    }
}

界面
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
     android:background="@drawable/a"
     android:orientation="vertical"
     tools:context=".MainActivity">

    <LinearLayout
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:orientation="vertical">

        <com.google.android.material.textfield.TextInputLayout
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
             android:hint="目标包名"
             android:layout_margin="8dp">

            <com.google.android.material.textfield.TextInputEditText
                 android:layout_height="wrap_content"
                 android:layout_width="match_parent"
                 android:id="@+id/target_package_name"
                 android:text="com.tencent.ngame.chty" />

        </com.google.android.material.textfield.TextInputLayout>

        <Button
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
             android:layout_margin="8dp"
             android:id="@+id/check_permission"
             android:text="检查权限" />

        <Button
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
             android:layout_margin="8dp"
             android:id="@+id/request_permission"
             android:text="访问权限" />

    </LinearLayout>

</androidx.core.widget.NestedScrollView>
项目已发评论群
回复

使用道具 举报

40

主题

678

回帖

3061

积分

大学生

Rank: 5Rank: 5

金币
605
好评
6
信誉
100
发表于 2023-7-26 18:46:59 来自手机  | 显示全部楼层  来自 广东
微云文件分享:访问data.zip下载地址:https://share.weiyun.com/PDctXT8q文件大小:49.4M
回复

使用道具 举报

106

主题

2904

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
5046
好评
33
信誉
176
发表于 2023-7-26 17:12:32 来自手机  | 显示全部楼层  来自 湖南
这是用来给自己的软件免root访问data?
回复

使用道具 举报

103

主题

4218

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
582
好评
36
信誉
102

MT论坛帅哥2019-5.1节快乐MT论坛最佳新人考神MT论坛新人

发表于 2023-7-26 17:14:29 来自手机  | 显示全部楼层  来自 上海
我很好奇都是谁在Kt都没见过几个人
回复

使用道具 举报

54

主题

4527

回帖

1万

积分

博士生

辰夕Mod

Rank: 7Rank: 7Rank: 7

金币
7121
好评
35
信誉
169

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

QQ
发表于 2023-7-26 18:19:25 | 显示全部楼层  来自 辽宁
一看就是Java
回复

使用道具 举报

172

主题

4654

回帖

1万

积分

博士生

水怪

Rank: 7Rank: 7Rank: 7

金币
4521
好评
23
信誉
99

MT论坛灌水老大MT论坛活跃会员

发表于 2023-7-26 18:20:40 来自手机  | 显示全部楼层  来自 福建
看看是什么
回复

使用道具 举报

3

主题

2391

回帖

5763

积分

硕士生

Rank: 6Rank: 6

金币
5025
好评
0
信誉
99
发表于 2023-7-26 18:21:54 来自手机  | 显示全部楼层  来自 江西
进来看看
回复

使用道具 举报

40

主题

678

回帖

3061

积分

大学生

Rank: 5Rank: 5

金币
605
好评
6
信誉
100
发表于 2023-7-26 18:27:54 来自手机  | 显示全部楼层  来自 广东
刷机小白z 发表于 2023-7-26 17:12
这是用来给自己的软件免root访问data?

可以
回复

使用道具 举报

40

主题

678

回帖

3061

积分

大学生

Rank: 5Rank: 5

金币
605
好评
6
信誉
100
发表于 2023-7-26 18:28:29 来自手机  | 显示全部楼层  来自 广东
焱妃 发表于 2023-7-26 17:14
我很好奇都是谁在Kt都没见过几个人

在学
回复

使用道具 举报

22

主题

6592

回帖

2万

积分

博士后

超级至尊VIP

Rank: 8Rank: 8

金币
6092
好评
6
信誉
99

考神MT论坛新人MT论坛帅哥MT论坛最佳新人MT论坛活跃会员挂机大佬

发表于 2023-7-26 18:41:16 来自手机  | 显示全部楼层  来自 甘肃
看看,学习一下
回复

使用道具 举报

40

主题

678

回帖

3061

积分

大学生

Rank: 5Rank: 5

金币
605
好评
6
信誉
100
发表于 2023-7-26 18:45:10 来自手机  | 显示全部楼层  来自 广东
辰夕 发表于 2023-7-26 18:19
一看就是Java

不是
回复

使用道具 举报

13

主题

5044

回帖

1万

积分

博士生

E●机甲FK

Rank: 7Rank: 7Rank: 7

金币
3850
好评
22
信誉
100

MT论坛最佳新人MT论坛帅哥MT论坛新人考神MT论坛活跃会员挂机大佬

QQ
发表于 2023-7-26 18:45:51 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

39

主题

2776

回帖

7705

积分

硕士生

Rank: 6Rank: 6

金币
4972
好评
0
信誉
112

MT论坛新人MT论坛最佳新人MT论坛帅哥考神

发表于 2023-7-26 18:59:56 来自手机  | 显示全部楼层  来自 江苏
感谢分享
回复

使用道具 举报

3

主题

539

回帖

1645

积分

高中生

李知恩

Rank: 4

金币
620
好评
0
信誉
100
发表于 2023-7-26 19:04:30 来自手机  | 显示全部楼层  来自 四川
辰夕 发表于 2023-7-26 18:19
一看就是Java

都是了是kotlin了 还java
回复

使用道具 举报

41

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6148
好评
3
信誉
98
发表于 2023-7-26 20:57:55 来自手机  | 显示全部楼层  来自 山东
路过看看,学习一下
回复

使用道具 举报

发表回复

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

本版积分规则

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