随着android系统的安全性不断提高,并且为了让Android操作系统更安全地防范漏洞,现在已经有了一些新的东西,因此了解新的开发人员的新结构是件好事。从过去几年开始,我一直在远离开发,我只是注意到一些东西已经被改变了,比如URI的文件方案。
案例1 ::我正在使用下面提到的自定义URI启动相机意图。
var takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(packageManager) != null) {
// Create the File where the photo should go
var photoFile: File? = null
try {
photoFile = createImageFile()
} catch (ex: IOException) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
val photoURI: Uri = FileProvider.getUriForFile(this,
BuildConfig.APPLICATION_ID + ".fileprovider",
photoFile)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
}
}photoURI是自定义URI。当我拍摄并检查URI时,它有文件://从我可以获得文件路径的位置开始,我可以使用它做一些事情(我正在将它上传到服务器)
案例2
我正在启动一个简单的意图,从画廊中挑选图像
val intent = Intent()
intent.type = "image/*"
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(Intent.createChooser(intent, "Select Picture"), TYPE_IMAGE)现在,当我选择图像并检查URI时,它的内容是:// in start。当我试图从它获得文件路径时,麻烦就开始了。我一直在寻找SOF,但没有一个解决方案对我有效。
我的主要目的是获取文件路径,我想从设备中选择文件并将其上传到server.But中,内容是:// that,我无法从URI中创建文件,因此无法发送该文件服务器。
我刚读过CommonsWareBlog关于计划系统的文章。它清除了一些东西,但我仍然不知道如何在我的onActivityResult中切换内容://太文件://!
我想再次提到,目前SOF的答案并不适用于我,这就是为什么我必须详细地问这个问题。
我正在使用7.0设备仿真器
这只是我实际问题的一个例子,我正在收集PDF和DOCX文件,并希望将它们上传到服务器上,在选择文件之后,我有带有内容:// upload的URI,并且我无法创建一个文件并发送到服务器。
我不知道我错过了什么计划。我希望这个问题能帮助很多刚开始使用文件系统的开发人员。
愉快尝试通过代码示例解释,根据我从意图(如果您愿意的话)中选择文件的问题
发布于 2018-01-26 11:45:38
从Android7.0开始,就不鼓励返回file://方案(android变更量g),因为它可以从私有文件夹泄漏文件。你仍然可以遇到它,特别是当你使用的应用程序的目标是努格特以下。
简短的回答是,当您查询Intent.ACTION_GET_CONTENT时,您会收到content:// uri,您可以通过它来获取数据。这确保了您所选择的项目是只读的,并且掩盖了它的真正来源--它可能是一个文件,远程提供或由提供者一起生成。
https://stackoverflow.com/questions/48460381
复制相似问题