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


相关知识:
安卓62开发原理
安卓6.0是Android操作系统的一个重要版本,主要介绍下安卓6.0开发原理。1. 包机制在安卓6.0中,应用程序被打包成APK(Android Package)文件。APK文件由可执行文件、资源文件和清单文件组成。在编译完毕、打包成APK后,系统为每个
2023-05-23
python代码安卓开发
在进行安卓应用程序开发时,开发人员会经常使用Java语言进行开发,但是有时我们需要在应用程序中嵌入一些Python代码,为了实现这个目的,我们需要通过一些桥接技术,将Java和Python连接起来。同时,这也为开发人员提供了更多的灵活性,能够在Java中调
2023-05-23
java后端开发与安卓开发
Java是一种广泛使用的编程语言,可用于后端开发、移动应用和桌面应用开发等各个领域。在这篇文章中,我们将介绍Java后端开发和安卓开发的原理和详细介绍。Java后端开发Java后端开发主要是指基于Java语言对服务器端进行编程,包括处理数据、逻辑和业务操作
2023-05-23
h5开发安卓ios坑总结
H5开发是一种跨平台的开发方式,可以在多个平台上运行,例如安卓和iOS等移动设备。但是在H5开发过程中,也会遇到一些坑,本文将对H5开发在安卓和iOS平台上的坑进行总结和介绍。一、浏览器内核不同H5开发在安卓和iOS平台上的第一个坑是浏览器内核不同。安卓平
2023-05-23
dart开发安卓
Dart是一种用于构建高性能应用程序的面向对象编程语言,它被广泛应用于Google开发的Flutter框架中。Flutter是一个基于Dart的开源移动应用程序开发框架,它可以帮助开发者快速构建高质量、高性能、美观的应用程序。在Flutter中,Dart作
2023-05-23
basic 开发安卓
Basic是一种编程语言,它是一种结构化编程语言,用于开发各种计算机应用程序。Basic语言最初是由John G. Kemeny和Thomas E. Kurtz于1960年代中期开发的,当时他们正在Dartmouth College担任数学和计算机方面的教
2023-05-23
开发h5安卓app
开发H5安卓app有两种主流方案,一种是利用WebView加载H5页面,另一种是利用Hybrid开发模式。### WebView加载H5页面WebView是Android的一个组件,可以嵌入到一个Activity中,用来加载并显示网页。WebView具有比
2023-04-28
安卓系统的app开发
安卓系统的app开发指的是使用Java编程语言编写应用程序,并将它们运行在基于安卓系统的智能手机、平板电脑和其他移动设备上。以下是安卓系统app开发的原理或详细介绍:1. Android应用架构安卓系统的应用程序是基于Java编程语言和一些基本组件构建起来
2023-04-28
安卓app开发大学生认证
安卓app开发大学生认证是指通过一定的认证流程,进行安卓应用开发的大学生可以获得认证资格,以证明其具备一定的安卓应用开发技能和能力。以下是安卓app开发大学生认证的原理和详细介绍:一、认证原理安卓app开发大学生认证的原理是通过评测系统根据一定的评测标准对
2023-04-28
安卓 app 怎么开发
在这篇文章中,我将为您介绍如何开发一个安卓(Android)应用程序。我们将从头开始,详细讲解各个步骤。您无需具备任何开发经验,只需遵循这里的指导,您就可以入门。1. 学习基本知识首先,您需要学习一些关于Android操作系统和应用程序开发的基本知识。An
2023-04-28
和田安卓app开发哪家便宜
尊敬的读者,根据您的需求,以下是一篇讲述“和田安卓app开发哪家便宜”的原理和详细介绍文章:标题:了解和田安卓App开发公司如何选择价格合适的服务导语:当您想在和田地区开发一款安卓App时,您可能会问:哪家公司提供价格合适、质量可靠的App开发服务?本文将
2023-04-28
net开发安卓app难吗
在 .NET 中,有两种方法可以创建安卓应用程序:使用 Xamarin 和使用 Java 集成开发环境(IDE)。### 使用 Xamarin 创建安卓应用程序Xamarin 是一个 .NET 平台和 Mono 的移动应用程序开发工具。它允许使用 C# 和
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1