所以基本上我有这个应用程序,我可以在其中打开文件选择器,并且我想将文件名放入特定的框中。
但结果我得到这个字符串文档:39
我想使用的文件是 pdf,它被称为TestBook,这就是我想要显示的内容
我是这样启动文件选择器的:
fun showFileChooser(activity: Activity)
{
val filesIntent = Intent(Intent.ACTION_GET_CONTENT, MediaStore.Downloads.EXTERNAL_CONTENT_URI)
activity.startActivityForResult(filesIntent, PICK_PDF_REQUEST_CODE)
}
Run Code Online (Sandbox Code Playgroud)
然后单击按钮
R.id.iv_add_file ->{
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
{
showFileChooser(this@AddBookActivity)
}
else
{
ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
Constants.READ_STORAGE_PERMISSION_CODE)
}
}
Run Code Online (Sandbox Code Playgroud)
和最后一个 onActivityResult
if (requestCode == Constants.PICK_PDF_REQUEST_CODE)
{
if (data != null)
{
mSelectedFileUri = data.data!!
val filename = File(mSelectedFileUri!!.path).name
et_book_file.setText(filename)
}
}
Run Code Online (Sandbox Code Playgroud)
Et_book_file 是一个 EditText,正如我在开头提到的,它显示字符串document:39
我尝试使用 jpg 等其他文件,但它只显示字符串image:40
对此有什么明显的解决方案吗?任何帮助将不胜感激。
您无法直接从内容 Uris 访问文件名,您必须使用它contentResolver来获取文件名。使用此函数从 Uri 中获取文件名
fun getFileNameFromUri(context: Context, uri: Uri): String? {
val fileName: String?
val cursor = context.contentResolver.query(uri, null, null, null, null)
cursor?.moveToFirst()
fileName = cursor?.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
cursor?.close()
return fileName
}
Run Code Online (Sandbox Code Playgroud)
现在您可以调用getFileNameFromUri方法来获取文件名
mSelectedFileUri?.let { uri ->
val filename = getFileNameFromUri(this, uri)
et_book_file.setText(filename)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |