安卓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开发者模式的详细方法。1. 打开设置应用首先,在安卓12系统中打开您的手机或者平板电脑,然后
2023-05-23
安卓11版本开发者模式
Android 11是一款全新的操作系统,其中开发者模式是一项非常重要的功能,它为开发人员提供了一些特殊的选项,以便测试新的应用程序和调试现有的应用程序。本文将介绍Android 11开发者模式的原理和详细内容。开发者模式的原理开发者模式是一种安卓操作系统
2023-05-23
安卓10怎么关闭开发者
关闭开发者选项是为了确保设备的安全性和保护用户的个人信息。在安卓10中,关闭开发者选项的步骤与之前的版本略有不同,在下面的介绍中,我们将详细介绍关闭开发者选项的原理和步骤。1、开发者选项的作用和收益在安卓中,开发者选项是为了帮助开发者更加轻松地测试和调试应
2023-05-23
swift安卓开发者
Swift是一种非常流行的编程语言,它最初是由苹果公司开发的,主要用于iOS、macOS、watchOS和tvOS等苹果平台上的应用程序开发。但是,随着Swift语言的不断发展和优化,现在也可以用于开发安卓应用程序了。Swift语言本身就是一种开发工具,它
2023-05-23
delphi开发安卓
Delphi是一种开发环境和编程语言,由Embarcadero Technologies公司推出。它能够在不同的操作系统上编写程序,如Windows、macOS、iOS和Android。在Delphi中,开发人员可以使用Object Pascal语言来编写
2023-05-23
delphi xe10 安卓开发教材
Delphi XE10是一款优秀的跨平台开发工具,支持构建可运行于Windows、Mac、iOS、Android等多个平台的应用程序。其中,Android开发是其重要之一的功能。Delphi XE10支持使用Object Pascal编程语言来开发Andr
2023-05-23
c#开发安卓实例教程
使用C#开发安卓应用程序需要使用Xamarin,它是一个跨平台的开发框架,可以让C#开发人员使用.NET的能力开发原生安卓应用程序,同时还可以在IOS、Mac和Windows等多种平台上开发应用程序,这里我们主要介绍如何使用Xamarin进行安卓应用程序的
2023-05-23
affinity会开发安卓版吗
Affinity是一款强大的图像编辑软件,其设计理念是为了取代Adobe公司的Photoshop。Affinity在口碑和市场方面已经逐渐成为Photoshop的替代品,受到了很多用户的青睐。但是,目前Affinity只有macOS和Windows版本,没
2023-05-23
安卓app开发之启动过程
安卓app开发之启动过程(原理或详细介绍)安卓App启动过程是通过几个关键组件进行通信与协作完成的。这里将详细介绍安卓App从启动到运行的整个过程。1. AndroidManifest.xml配置在开始阐述App启动过程之前,我们需要了解到AndroidM
2023-04-28
安卓app制作公司有哪些
Android app 制作公司是一些专业的公司,他们在为客户制作 Android 应用程序方面拥有广泛的经验和知识。以下是一些在 Android 开发领域内著名的公司:1. 美团点评(Meituan-Dianping):Meituan-Dianping
2023-04-28
四川安卓app开发制作
四川安卓app开发制作指的是在四川地区进行安卓app开发的过程。安卓App开发是指使用相关技术为安卓操作系统(Android OS)创建应用程序。本文将对安卓App开发进行详细的介绍,为那些想要入门App开发的读者奉上一份实用的教程。1. 理解安卓操作系统
2023-04-28
app安卓打包的问题
在安卓应用的开发过程中,打包是必不可少的环节。打包就是将开发者开发的应用程序代码及其它文件组合在一起,并加以优化,生成一个可以安装、运行的APK文件。以下是整个过程的原理和详细介绍:### 安卓打包的原理安卓应用的打包过程主要包括以下几个步骤:1. 代码编
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1