Android Q 中已弃用 getExternalStoragePublicDirectory

android

1个回答

写回答

媛媛啦

2025-06-26 03:25

+ 关注

Android
Android

Android Q中的新变化:getExternalStoragePublicDirectory已弃用

自从Android Q发布以来,我们已经看到了许多令人兴奋的新功能和改进。其中之一是关于存储权限的变化。在过去的Android版本中,我们可以使用getExternalStoragePublicDirectory方法来获取外部存储器上的共享目录。但是,在Android Q中,这个方法已经被弃用了。

为什么getExternalStoragePublicDirectory被弃用了?

Android Q之前,开发者可以使用getExternalStoragePublicDirectory方法来访问外部存储器上的公共目录,比如照片、音频和视频等。然而,这种方式存在一些安全风险。由于这些公共目录是共享的,任何应用都可以访问它们,这可能导致用户的隐私泄露。

为了加强用户的隐私保护,Android Q引入了一种新的存储权限模型。现在,每个应用只能访问自己的私有目录,而不能再访问其他应用的公共目录。这意味着开发者不能再使用getExternalStoragePublicDirectory方法来获取共享目录。

如何替代getExternalStoragePublicDirectory?

虽然getExternalStoragePublicDirectory已经被弃用,但是我们仍然可以使用其他方法来访问外部存储器。下面是一种替代方案:

1. 首先,我们需要获取外部存储器的根目录路径。可以使用Environment类的getExternalStorageDirectory方法来实现:

Java

File externalStorageDir = Environment.getExternalStorageDirectory();

2. 然后,我们可以在外部存储器上创建一个应用专用的目录。可以使用Context类的getExternalFilesDir方法来实现:

Java

File appDir = context.getExternalFilesDir(null);

在上面的代码中,我们传入了null作为参数,表示我们要获取应用的根目录。如果我们想在应用的根目录下创建一个名为"photos"的目录,可以这样做:

Java

File photosDir = new File(appDir, "photos");

if (!photosDir.exists()) {

photosDir.mkdirs();

}

这样,我们就成功地创建了一个名为"photos"的目录,该目录位于外部存储器上的应用专用目录中。

如何处理现有的代码?

如果你的应用目前正在使用getExternalStoragePublicDirectory方法,那么在迁移到Android Q之前,你需要对代码进行一些修改。你可以使用上面提到的替代方案来访问外部存储器。另外,还可以使用新的存储权限模型来请求用户授予你的应用对外部存储器的访问权限。

AndroidManifest.XML文件中,你需要添加以下权限声明:

XML

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>

然后,在运行时,你可以使用以下代码来请求存储权限:

Java

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)

!= PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},

REQUEST_CODE);

}

通过上述步骤,你就可以适应Android Q的新存储权限模型,并继续使用外部存储器。

Android Q的引入了新的存储权限模型,弃用了getExternalStoragePublicDirectory方法,以加强用户的隐私保护。不过,我们仍然可以使用其他方法来访问外部存储器,并请求用户授予我们的应用访问权限。如果你的应用目前正在使用getExternalStoragePublicDirectory方法,那么在迁移到Android Q之前,请记得对代码进行相应的修改。

无论是在开发新应用还是在更新现有应用时,我们都应该密切关注Android Q的新变化,并及时做出相应的调整,以便为用户提供更好的体验和更高的隐私保护。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号