安卓11开发模式怎么关闭

Android 11 引入了新的应用开发模式——Scoped Storage。Scoped Storage 是一种更加安全的文件管理方式,可以限制应用的文件共享和访问权限,防止了恶意应用窃取用户的隐私信息。不过,有时候 Scoped Storage 可能会对应用造成不必要的麻烦,比如一些旧版应用可能无法正常工作。如果你想关闭 Scoped Storage,可以按照以下步骤进行操作。

Scoped Storage 的原理

在 Android 11 中,应用的所有外部存储访问都必须使用 Scoped Storage,也就是说,应用无法直接访问外部存储的根目录和其他应用的文件。相反,Android 11 引入了一组新的 API,允许应用通过 MediaStore、Storage Access Framework(SAF)和应用专属目录来访问外部存储。这些 API 具有更加严格的权限管理机制,并且可以保护用户的隐私信息。

关闭 Scoped Storage

如果你想关闭 Scoped Storage,可以按照以下步骤进行操作:

Step 1:申请权限

首先,你需要在 AndroidManifest.xml 文件中申请 WRITE_EXTERNAL_STORAGE 权限。因为 Android 11 中的 Scoped Storage 只允许应用访问自己专属的目录,如果你想访问外部存储的其他文件,需要申请这个权限。

```

```

Step 2:配置应用专属目录

在 Android 11 中,所有应用都有一个专属的目录,可以访问这个目录下的文件,无需使用 Scoped Storage。你可以通过 Context.getExternalFilesDir() 方法获取这个目录的路径,并在其中创建自己的文件。

```

val file = File(getExternalFilesDir(null), "test.txt")

file.writeText("Hello, World!")

```

注意,这里的 getExternalFilesDir() 方法中传入的参数只是为了获取不同类型文件的目录,如果你只需要一个通用的目录,可以传入 null。

Step 3:标记文件共享

在 Android 11 中,所有应用的文件默认都是私有的,而且无法与其他应用共享。如果你想让自己的文件被其他应用访问,需要使用 MediaStore API 或 SAF(Storage Access Framework)将文件标记为共享。

使用 MediaStore API 将文件标记为共享:

```

val values = ContentValues().apply {

put(MediaStore.Audio.Media.DISPLAY_NAME, "test.mp3")

put(MediaStore.Audio.Media.MIME_TYPE, "audio/mpeg")

put(MediaStore.Audio.Media.IS_PENDING, 1)

}

val item = contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values)

item?.let { uri ->

try {

contentResolver.openFileDescriptor(uri, "w", null).use { parcelFileDescriptor ->

if (parcelFileDescriptor != null) {

FileOutputStream(parcelFileDescriptor.fileDescriptor).use { output ->

output.write(byteArrayOf(0x00))

output.flush()

}

}

}

values.clear()

values.put(MediaStore.Audio.Media.IS_PENDING, 0)

contentResolver.update(uri, values, null, null)

} catch (e: Exception) {

e.printStackTrace()

contentResolver.delete(uri, null, null)

}

}

```

使用 SAF 将文件标记为共享:

```

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {

type = "image/*"

addCategory(Intent.CATEGORY_OPENABLE)

flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION

putExtra(Intent.EXTRA_TITLE, "test.jpg")

}

startActivityForResult(intent, 1001)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

super.onActivityResult(requestCode, resultCode, data)

if (resultCode == Activity.RESULT_OK && requestCode == 1001) {

data?.data?.also { uri ->

try {

contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)

} catch (e: Exception) {

e.printStackTrace()

}

}

}

}

```

通过上述操作,你可以关闭 Android 11 的 Scoped Storage,让应用在外部存储中自由存储和读取文件。不过,需要注意的是,关闭 Scoped Storage 会带来一些安全风险,因此谨慎操作,确保应用的数据不会被泄露。


相关知识:
安卓12开发者选项参数
安卓12开发者选项是一个非常重要的设置,它为开发者提供了许多有用的功能和工具,能够使开发者更加高效、便捷地进行应用程序开发。本文将详细介绍安卓12开发者选项参数。一、什么是开发者选项?开发者选项是一个专为开发人员准备的设置,提供了许多可用于调试和优化应用程
2023-05-23
安卓11稳定版切换安卓12开发版
在发布 Android 11 正式版本后,Google 也开始稳定推出 Android 12 开发者预览版。这使得 Android 用户可以提前尝试 Android 12 的新特性和改进。对于有些用户来说,他们可能想尝试最新版本的 Android 12,但
2023-05-23
安卓11怎么搞出开发者选项出来
开发者选项是一个位于Android系统设置中的隐藏选项,只有在开发者模式下才能被使用。开发者选项包含了诸如调试USB、启用屏幕更新、开启无障碍和模拟位置等高级选项。因此,如果你是一名开发人员或对Android系统较为熟悉,可以通过开发者选项来访问并使用这些
2023-05-23
安卓 7
安卓 7.1 开发板是一个运行 Android 7.1 操作系统的终端设备,是进行 Android 应用程序开发和测试的理想选择。该开发板包含基于 ARM Cortex-A53 和 Cortex-M4 的双核处理器,支持 Wi-Fi 和蓝牙连接,还具有 H
2023-05-23
vue可以开发安卓app
Vue是一个流行的JavaScript框架,用于构建现代的Web应用程序。许多人可能不知道的是,Vue也可以用来开发原生的安卓移动应用程序。Vue是一个基于组件的框架,它允许您将应用程序拆分为小而可重用的部分。这个思想非常适合开发安卓应用程序,因为安卓应用
2023-05-23
unity安卓串口开发
在 Unity 开发安卓应用程序时,串口通信无疑是一个非常常见的需求,比如连接各种硬件设备。但是 Unity 并没有提供原生的串口支持,所以我们需要用到一些外部的插件来实现串口通信。以下是一个使用 C# 编写的串口通信的基本步骤:1. 引入 System.
2023-05-23
scratch开发安卓
Scratch是一种非常流行的轻量级编程语言,它最初是为了帮助孩子们学习编程而开发的。Scratch是一种基于块的编程语言,它允许你使用各种块来创建程序。在Scratch中,你可以通过拖动和放置块来编写程序,而不需要输入代码。同时,Scratch也提供了许
2023-05-23
oppo安卓开发者模式怎么关闭
开发者模式,在安卓系统中被视为一种高级设置,为开发人员提供了一系列测试和调试工具。它包含了许多功能和选项,因此只有对安卓系统及其工作原理有一定了解的人才能正确使用它。但是,如果您不是安卓开发人员,或者您的设备是由其他人给您设置的,则开启开发者模式可能会危及
2023-05-23
idea能开发安卓吗
IntelliJ IDEA是一款由JetBrains公司推出的一款Java开发环境,它的主要功能就是帮助Java开发者完成Java代码的开发,但相信大家也都知道,Java开发语言是Google Android首选开发语言之一。因此,IntelliJ IDE
2023-05-23
bark为什么不开发安卓端
目前,Bark只有iOS和macOS两个版本,并没有安卓端。这主要是由于以下原因:首先,Bark的核心功能是借助iOS和macOS系统内部API实现的,只有在这些操作系统上才能实现最佳效果。而安卓平台具有非常不同的系统架构,需要完全不同的技术实现,因此要在
2023-05-23
开发的安卓app 更新方式
如何更新Android App: 原理和详细介绍当你开发一款Android应用程序后,你需要确保它适应用户需求的变化,修复任何出现的bug,同时确保对新功能的支持。为此,你需要频繁地更新应用程序。在这篇文章中,我们将详细讨论Android应用更新的原理和方
2023-04-28
vs开发安卓appc++
在这篇文章中,我们将详细介绍如何使用Visual Studio(VS)进行C++安卓应用的开发。VS提供了C++开发者所需的一切工具,从中可以极具开发效率地创建原生Android应用。**1. 系统要求和安装**在开始之前,请确保您的计算机满足以下要求:-
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1