- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我不知道为什么会发生这种情况,但我无法从 Google 照片提供商处挑选图片。在 API 27 上进行测试。
如果我使用:
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "image/*"
当我打开照片提供程序并浏览文件夹时,我会看到很多这样的:
2019-03-02 12:04:15.164 17641-13395/? W/NetworkManagementSocketTagger: untagSocket(120) failed with errno -22
2019-03-02 12:04:22.528 13217-13217/? E/ResourceType: Style contains key with bad entry: 0x01010586
2019-03-02 12:04:22.535 13217-13217/? W/ResourceType: For resource 0x7f020366, entry index(870) is beyond type entryCount(468)
当我点击图片时,我看到了这些:
2019-03-02 12:04:34.150 13217-13217/? W/ResourceType: For resource 0x7f02036c, entry index(876) is beyond type entryCount(468)
2019-03-02 12:04:34.151 13217-13217/? W/ResourceType: For resource 0x7f02036c, entry index(876) is beyond type entryCount(468)
2019-03-02 12:04:34.229 2907-16891/? W/MediaExtractor: FAILED to autodetect media content.
2019-03-02 12:04:34.569 10839-10839/? W/ResourceType: ResTable_typeSpec entry count inconsistent: given 468, previously 1330
在这种情况下,我什至在提供程序抽屉中都看不到 Google 相册。
我该如何解决这个问题,最好使用 ACTION_GET_CONTENT?
最佳答案
编辑 2
我想我找到了问题的解决方案。 Google docs中提到了访问共享文件将为您提供 URI。
The server app sends the file's content URI back to the client app in an Intent. This Intent is passed to the client app in its override of onActivityResult(). Once the client app has the file's content URI, it can access the file by getting its FileDescriptor.
下面是我在 onActivityResult 中使用的更新代码。确保最后调用onActivityResult的super方法。
super.onActivityResult(requestCode, resultCode, data)
工作代码
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
data?.data?.let {
util._log(TAG, it.toString())
}
if (data!!.data != null && data.data != null) {
try {
val stream = if (data.data!!.toString().contains("com.google.android.apps.photos.contentprovider")) {
val ff = contentResolver.openFileDescriptor(data.data!!, "r")
FileInputStream(ff?.fileDescriptor)
} else {
contentResolver.openInputStream(data.data!!)
}
val createFile = createImageFile()
util.copyInputStreamToFile(stream, createFile)
selectedImagePath = createFile.absolutePath
} catch (e: Exception) {
util._log(TAG, Log.getStackTraceString(e))
}
}
super.onActivityResult(requestCode, resultCode, data)
}
编辑
也可以查看 stackoverflow post
原创
我在我的 Redmi 6 pro 手机上的 Android oreo 8.1.0(API 27) 上使用它,它运行良好。
你还没有发布 onActivityResult 方法可能是你需要做一些修改的地方。我都试过了
下面是我的代码 fragment
val pickIntent = Intent(Intent.ACTION_VIEW)
pickIntent.type = "image/*"
pickIntent.action = Intent.ACTION_GET_CONTENT
pickIntent.addCategory(Intent.CATEGORY_OPENABLE)
startActivityForResult(pickIntent, SELECT_PICTURE)
在 onActivityResult 中我正在这样解析它
if (data!!.data != null && data.data != null) {
try {
// CommonUtilities._Log(TAG, "Data Type " + data.getType());
if (!isFinishing) {
val inputStream = contentResolver.openInputStream(data.data!!)
val createFile = createImageFile()
copyInputStreamToFile(inputStream!!, createFile)
// CommonUtilities._Log(TAG, "File Path " + createFile.getAbsolutePath());
selectedImagePath = createFile.absolutePath
}
} catch (e: IOException) {
util._log(TAG, Log.getStackTraceString(e))
}
}
新建文件的方法
@Throws(IOException::class)
private fun createImageFile(): File {
// Create an image file name
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH).format(Date())
val imageFileName = "yesqueen_" + timeStamp + "_"
val storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
return File.createTempFile(imageFileName, ".jpg", storageDir)
}
从输入流中读取的方法
fun copyInputStreamToFile(`in`: InputStream, file: File) {
var out: OutputStream? = null
try {
out = FileOutputStream(file)
val buf = ByteArray(1024)
var len: Int = 0
while (`in`.read(buf).apply { len = this } > 0) {
out.write(buf, 0, len)
}
/*while (`in`.read(buf).let {
len = it
true
}) {
out.write(buf, 0, len)
}*/
/* while ((len = `in`.read(buf)) > 0) {
out.write(buf, 0, len)
}*/
} catch (e: Exception) {
e.printStackTrace()
} finally {
try {
out?.close()
} catch (e: Exception) {
e.printStackTrace()
}
try {
`in`.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
关于android - 使用 ACTION_GET_CONTENT 或 OPEN_DOCUMENT 从 Google 相册提供商处挑选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54957859/
我正在使用 ACTION_GET_CONTENT,以便用户可以选择我的其余代码可以读取和处理的文本文件。 Intent intent = new Intent(); intent.setAction(
我在使用 ACTION_GET_CONTENT 从 Downloads 目录中选择文件时遇到问题。 如果我在本地存储中的 ES 资源管理器或文件管理器中删除任何文件,在我的应用程序中打开时,这些已删除
好的,我用这个开始我的功能 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(mimeType
我在我的应用中实现了一个文件选择器,如下所示: Intent intent = new Intent(); intent.setType("*/*"); intent.setAction(Intent
Google Drive 似乎有一个响应 GET_CONTENT 操作的 Activity ,但它没有导出。 我可以在我的应用程序中使用另一种方法从云端硬盘中提取内容,而无需从 云端硬盘启动流程吗?自
我有以下 Intent : Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("text/*"); start
我正在为我的 Android 应用实现导入功能。我想让用户选择他们想要从设备上的外部存储(确切地说是下载目录)和其他在线文件存储(例如 DropBox 和 Google Drive)导入的文件。 我在
流程是: 用户需要选择要使用的文本文件以及弹出的默认 Android 资源管理器。 然后我想存储包含文件名的字符串,以实际打开文件进行读取。 我想打开该文件并将其重写为应用内部存储上的新文件。 我想从
我正在尝试打开最近的窗口,该窗口只能选择图像和 pdf Intent intent = new Intent(); intent.setType("image/*"); intent.setActio
我正在尝试将文件选择器 Intent 中的选定文件(不限于图像,它可以是任何文件)放入一个 zip 文件。我需要完整的文件路径才能执行此操作,但 Intent 仅提供 uri 路径。 我试过 .get
我有一个使用 ACTION_GET_CONTENT 的已发布应用程序 Intent 让用户选择他/她的一张照片。这是启动 Intent 的代码: Intent intent = new Intent(
我正在尝试在 android 应用程序中阅读 pdf 文件。 触发以下 Intent 以获取 URI。 Intent intent = new Intent(Intent.ACTION_GET_CON
我的问题很简单。是否可以通过 Intent.ACTION_GET_CONTENT 以某种方式传递额外的数据?其中Activity收到Intent在它的onActivityResult()能读出吗? 现
我需要完成这些步骤: 让用户选择一个文件(任何类型的文件) 获取永久引用以便稍后访问文件或复制到我的内部存储。 第一个真的很简单。使用 Intent.ACTION_GET_CONTENT 获取文件没有
我正在尝试获取用户选择的文件的路径,为结果调用 intent ACTION_GET_CONTENT。 问题是当从文件管理器中选择一个音频文件时, Intent 不返回文件的扩展名(我检查过的文件名中有
我试图只显示 MP3 文件: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/mp3"); s
Web 和 stackoverflow 包含几个示例如何使用 ACTION_GET_CONTENT Intent 从另一个 Android 应用程序获取文件(例如,将其用作电子邮件附件)。但是我必须实
我正在开发一个应用程序,在此 Activity 中按下一个按钮,可以选择要上传的任何文件。文件选择器加载正确,但所有图像都无法选择(变灰)。我在 Manifest 文件中添加了 READ_EXTERN
在我的应用中,我需要从用户的库中获取音频文件。 为此,我将其称为 Intent: Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT)
作为docs说:“ACTION_GET_CONTENT 可以让用户浏览网络并下载所需的数据”。这就是我需要的,来自 Google Images。虽然,如果我使用此 Intent 的类型,应用程序会崩溃
我是一名优秀的程序员,十分优秀!