安卓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 会带来一些安全风险,因此谨慎操作,确保应用的数据不会被泄露。


相关知识:
安卓10怎么退出开发者模式
在安卓10系统中,开发者模式是一个非常强大的功能,它可以让用户更加灵活地进行系统设置、优化和调试。但是,在使用开发者模式时需要注意的是,一些设置可能会影响设备的正常运行,造成错误的配置或数据丢失等问题。因此,当用户不再需要使用开发者模式时,及时退出开发者模
2023-05-23
安卓10怎么使用开发者模式 百度网盘
安卓10是目前最新的安卓系统版本,针对开发者而言,开发者模式是必不可少的工具之一。这篇文章将会详细介绍如何在安卓10上开启开发者模式,并且给出将文件上传至百度网盘的原理以及详细介绍。1、开启安卓10的开发者模式步骤1:先在安卓10中找到设置图标并打开。步骤
2023-05-23
ue4开发安卓
UE4是一个非常流行的游戏引擎,可以用于开发游戏和应用程序。它支持多个平台和操作系统,包括Windows、MacOS、Linux、iOS、Android等。在本篇文章中,我们将重点讲解UE4开发安卓的原理和详细介绍。首先,我们需要明确的是UE4是一个跨平台
2023-05-23
opera开发安卓版
Opera是一款很受欢迎的浏览器,其开发的安卓版也受到了广泛的关注。本文将详细介绍Opera安卓版的开发原理和相关细节。一、安卓版Opera的开发原理Opera安卓版的开发原理可以概括为两个步骤:首先是将Opera桌面版的核心引擎(即Presto引擎)移植
2023-05-23
flash开发安卓应用 报错
Flash开发是一种创建多媒体动画、交互式应用及网页等程序的工具。在开发应用时,可能会出现各种错误。这篇文章将重点介绍Flash开发安卓应用时常见的报错、原因及解决方法。一、Mach-O文件删除错误这个错误通常会出现在将Flash开发的应用程序导出到iOS
2023-05-23
b站安卓端用什么开发
b站的安卓端的开发是基于Java语言和Android操作系统的,具体涉及到了许多技术和工具,下面详细介绍一下。首先,b站安卓端开发使用的是Android Studio这个工具。Android Studio是由Google推出的,基于IntelliJ IDE
2023-05-23
arm安卓开发板参数
ARM安卓开发板是一种基于ARM架构的开发板,可以用于搭建嵌入式系统、智能家居、物联网设备等应用场合。下面,我们详细介绍一下ARM安卓开发板的参数和原理。首先,我们需要了解ARM处理器的基本结构。ARM处理器由CPU、内存管理单元(MMU)、中断控制器、外
2023-05-23
2017安卓app开发教程
Android应用程序开发是创建基于Android操作系统的软件应用程序的过程。随着Android系统在智能手机上的普及,Android应用程序的开发越来越受到开发者们的关注。本文将介绍Android应用程序开发的基本原理和流程。Android操作系统架构
2023-05-23
自己开发安卓app需要会什么技能
开发安卓App需要掌握以下核心技能:1. Java编程语言Java是Android开发的主要编程语言。Java它是一种面向对象、跨平台的语言,具有简洁、安全、可靠的特点。因此,掌握Java语言的基本语法、面向对象编程以及Java虚拟机的使用都是开发Andr
2023-04-28
安卓区块链app怎么开发
安卓区块链app的开发,要首先了解基本的区块链概念和相关技术,包括加密算法、分布式账本、智能合约等。首先,确定一个区块链网络。可以选择开源的公有链,如比特币(Bitcoin)、以太坊(Ethereum)、EOS等,也可以选择搭建一个私有链。其次,设计并实现
2023-04-28
安卓app软件的开发与学习
标题:安卓App软件的开发与学习:一个详细的入门指南摘要:本文将详细介绍如何学习安卓App开发,包括所需技能、工具和开发流程。文章旨在帮助初学者快速了解安卓App开发。正文:一、安卓App开发的基本概念安卓(Android)是一种基于Linux操作系统的开
2023-04-28
佛山安卓商城app开发软件怎么样
佛山安卓商城是一款面向安卓设备的应用商店,用户可以在里面找到各种应用、游戏、壁纸、铃声等内容。该应用商城的开发原理主要包括以下几个方面:1.界面设计:借助一些界面设计软件,如Adobe Photoshop、Sketch等,设计出商城的各种页面,包括首页、分
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1