无法使用 mkdir 在 Android Q 中创建文件夹
Cant Create Folder in Android Q with mkdir
我的应用程序在所有 android 版本中创建文件夹都没有问题,除了 android Q
,我不知道为什么我的代码在 android q
中不起作用
这是我的代码:
File dir = new File("/sdcard/test");
try{
if(dir.mkdir()) {
Log.d("DOWNLOAD","Directory created");
} else {
Log.d("DOWNLOAD","Directory is not created");
}
}catch(Exception e){
e.printStackTrace();
}
在 Q 中,如果您想要访问不是普通音乐或媒体文件的文件,即在您的情况下 sdcard/test
,那么您需要执行以下操作:
In order to access any other file that another app has created, including files in a "downloads" directory, your app must use the Storage Access Framework, which allows the user to select a specific file.
引用来源:http://developer.android.com/preview/privacy/scoped-storage
// Here are some examples of how you might call this method.
// The first parameter is the MIME type, and the second parameter is the name
// of the file you are creating:
//
// createFile("text/plain", "foobar.txt");
// createFile("image/png", "mypicture.png");
// Unique request code.
private const val WRITE_REQUEST_CODE: Int = 43
...
private fun createFile(mimeType: String, fileName: String) {
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
// Filter to only show results that can be "opened", such as
// a file (as opposed to a list of contacts or timezones).
addCategory(Intent.CATEGORY_OPENABLE)
// Create a file with the requested MIME type.
type = mimeType
putExtra(Intent.EXTRA_TITLE, fileName)
}
startActivityForResult(intent, WRITE_REQUEST_CODE)
}
示例 src https://developer.android.com/guide/topics/providers/document-provider
<manifest ... >
<!-- This attribute is "false" by default on apps targeting Android Q. ->
<application android:requestLegacyExternalStorage="true" ... >
</application>
</manifest>
我的应用程序在所有 android 版本中创建文件夹都没有问题,除了 android Q
,我不知道为什么我的代码在 android q
这是我的代码:
File dir = new File("/sdcard/test");
try{
if(dir.mkdir()) {
Log.d("DOWNLOAD","Directory created");
} else {
Log.d("DOWNLOAD","Directory is not created");
}
}catch(Exception e){
e.printStackTrace();
}
在 Q 中,如果您想要访问不是普通音乐或媒体文件的文件,即在您的情况下 sdcard/test
,那么您需要执行以下操作:
In order to access any other file that another app has created, including files in a "downloads" directory, your app must use the Storage Access Framework, which allows the user to select a specific file.
引用来源:http://developer.android.com/preview/privacy/scoped-storage
// Here are some examples of how you might call this method.
// The first parameter is the MIME type, and the second parameter is the name
// of the file you are creating:
//
// createFile("text/plain", "foobar.txt");
// createFile("image/png", "mypicture.png");
// Unique request code.
private const val WRITE_REQUEST_CODE: Int = 43
...
private fun createFile(mimeType: String, fileName: String) {
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
// Filter to only show results that can be "opened", such as
// a file (as opposed to a list of contacts or timezones).
addCategory(Intent.CATEGORY_OPENABLE)
// Create a file with the requested MIME type.
type = mimeType
putExtra(Intent.EXTRA_TITLE, fileName)
}
startActivityForResult(intent, WRITE_REQUEST_CODE)
}
示例 src https://developer.android.com/guide/topics/providers/document-provider
<manifest ... >
<!-- This attribute is "false" by default on apps targeting Android Q. ->
<application android:requestLegacyExternalStorage="true" ... >
</application>
</manifest>