安卓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怎么进入开发人员选项设置中
在Android 10系统中,进入开发人员选项的步骤与之前的版本略有不同。以下是进入开发人员选项的详细步骤:1. 首先打开“设置”应用程序。2. 滚动到最下面,找到“关于手机”选项并点击进入。3. 在“关于手机”页面中,找到“版本号”选项。4. 连续点击“
2023-05-23
xcode开发安卓app
首先,需要明确的是,Xcode是苹果公司开发的IDE(集成开发环境),完全是针对苹果公司的产品环境进行的设计和开发,主要用于iOS app和Mac OS X app的开发。因此,Xcode并不能直接开发安卓app,但是有一些工具和插件可以将Xcode转化为
2023-05-23
vsstudio开发安卓
在Android的发展过程中,很多开发者使用Eclipse等开发工具,不过在近年来,有不少开发者转而使用Visual Studio进行开发。这是因为Visual Studio的成熟度以及提供的强大的功能。下面就让我们来了解Visual Studio如何进行
2023-05-23
pycharm pyqt 开发安卓
PyCharm是一款Python集成开发环境,而PyQt是一个Python语言的GUI编程工具集,可以让开发者轻松创建基于Qt的图形用户界面应用程序。通过将PyCharm和PyQt结合起来,我们可以利用Python语言开发安卓应用程序。本文将详细介绍在Py
2023-05-23
linux框架开发安卓应用
安卓应用开发是当前移动互联网领域最火热的开发之一,Linux是一种开源操作系统,其完全开放的内核为安卓应用提供了很多支持。在这篇文章中,我们将介绍如何在Linux开源框架下开发安卓应用。首先,需要了解的是Linux内核是安卓系统的核心,它提供了大量的系统接
2023-05-23
idea与as安卓开发比较
Idea和Android Studio(AS)是两个流行的Android开发IDE。即使许多Android开发人员使用AS作为他们的首选IDE,但一些人仍然喜欢使用Idea来进行Android应用程序开发,因为Idea的许多功能可以更好地满足他们的需求。在
2023-05-23
app开发同时支持ios和安卓
在移动技术兴起的今天,一款成功的应用程序需要能够同时在iOS和Android两个平台上运行。这一点比以往更加重要,因为这两个平台已经占据了市场的大部分份额。因此,了解如何同时支持这两个平台的方法至关重要。本文将详细介绍如何在iOS和Android平台上开发
2023-05-23
聊天app开发模拟器下载安卓
聊天App开发模拟器是一种软件工具,用于演示和测试聊天应用程序的功能。开发人员可以使用这种模拟器来测试他们的应用程序的功能和应用场景,以确保应用程序能够在实际设备上正常运行。通常,这种模拟器还提供了实时数据传输、调试和日志记录等功能来帮助开发人员快速修复错
2023-04-28
开发安卓app环境搭建和配置
开发安卓应用程序(App)需要进行环境搭建和配置,以下是详细教程,包括所需软件、安装步骤和配置。一、安卓开发环境搭建的前提:1. 操作系统:Windows、Mac 或者 Linux。2. 硬件需求:建议至少4GB RAM,较好的处理器(i5 或更高)和足够
2023-04-28
学开发安卓app
学习开发安卓APP,需要掌握以下几个方面的知识:1. Java编程语言:Android应用开发基于Java编程语言,需要掌握Java语言基础和面向对象编程概念。2. Android SDK:Android SDK是安卓操作系统的开发工具,包含API、调试工
2023-04-28
免费打包安卓app
Android 应用程序打包(APK)的原理是将 Android 源代码编译为 Dalvik 字节码,然后将其打包成一个 APK 文件,该文件包含应用程序的代码、资源、清单和一些必要的配置文件。以下是免费打包 Android 应用程序的步骤:1. 创建一个
2023-04-28
h5如何开发安卓app
H5开发安卓APP是一种基于Web技术开发跨平台应用的方式,主要思路是通过在客户端内嵌一个WebView控件,加载Web应用,从而达到和Native应用一样的效果。下面是详细的介绍和原理:1. WebView控件:WebView是一种跨平台应用的解决方案,
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1