不赞成使用方法getExternalStorageDirectory()

时间:2019-12-19 15:20:49

标签: java android

我需要读取从智能手机的麦克风录制的音频文件,为此,我正在使用以下代码:

 pathSave = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+ UUID.randomUUID().toString()+"audio_record.3gp";

问题在于,在Android Studio中不赞成使用方法getExternalStorageDirectory()(我使用的是3.5.3版,但我没有指出我的API级别)。

还有另一种方法代替了getExternalStorageDirectory(),其他方法不会对我的代码进行太多更改。

谢谢。

3 个答案:

答案 0 :(得分:0)

与Android Studio版本无关。折旧在SDK级别上。 Docs say

  

在API级别29中不赞成使用此方法。为了提高用户隐私,不建议直接访问共享/外部存储设备。 当应用程序定位到Build.VERSION_CODES.Q时,此方法返回的路径将不再可直接用于应用程序。通过迁移到Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT等替代方案,应用程序可以继续访问共享/外部存储中存储的内容。

如果您不针对Q,则可以暂时忽略它,因为折旧意味着您应该停止使用该方法,而不是突然停止工作。

  

我没有指出我的API级别)

那不是事实。

答案 1 :(得分:0)

  

Environment.getExternalStorageDirectory()

     

此方法在API级别29中已不推荐使用。改善用户   隐私,直接访问共享/外部存储设备是   不推荐使用。当应用定位到 Build.VERSION_CODES.Q 时,路径   此方法返回的值不再可供应用直接访问。   应用程序可以继续访问共享/外部存储中存储的内容   通过迁移到诸如    Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT

对于以下示例,代码较旧。 (已弃用)

val storageDir = File(Environment.getExternalStorageDirectory(), "pics")
storageDir.mkdirs()

我们可以如下使用Context方法

val storageDir = File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "pics")
storageDir.mkdirs()

请检查以下链接以获取更多详细信息

Environment

答案 2 :(得分:0)

我改用Environment.getExternalStorageDirectory()

String getRootDir(){         返回ctx.getExternalFilesDir(null).getParent()。split(“ / Andro”)[0];

}