Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从外部应用程序接收单个文件是不可读的,但当多个应用程序接收到单个文件时,该文件是可读的。

从外部应用程序接收单个文件是不可读的,但当多个应用程序接收到单个文件时,该文件是可读的。
EN

Stack Overflow用户
提问于 2017-03-19 01:52:07
回答 1查看 1.3K关注 0票数 0

当从外部应用程序接收文件时,我遇到了问题。我一直在学习关于https://developer.android.com/training/sharing/receive.html的教程,它可以正常工作,直到我想要处理代码中的图像为止。

我遇到的问题是,如果我只选择一个文件并将其发送到我的应用程序,那么在将它从URI转换为文件对象之后,我无法读取它。但是,如果我发送两个或多个图像(之前选择的相同图像加上来自同一个目录的另一个图像),那么我实际上可以读取文件(所有文件)。为什么会这样呢?即使将文件设置为setReadable(true);,我也无法在以后读取它。

目标SDK是23,是的,我已经在API 23+所需的代码中实现了权限请求。所以这不会是问题所在。我需要能够读取接收到的文件,无论它是一个或多个列表。

附带说明:如果我从Google应用程序(一个或多个)发送了大量图片,我就永远无法读取该文件。从"ES文件资源管理器“应用程序发送的图像在代码中是可读的,但如果我只向我的应用程序发送一个文件,则无法读取。

下面是问题部分的代码片段:

代码语言:javascript
运行
AI代码解释
复制
// THIS PART WORKS. RECEIVING MULTIPLE FILES ARE READABLE IN THE CODE BELOW.
void handleSendMultipleImages(Intent intent) {
    ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    if (imageUris != null) {
        addImagesToNewOrExistingContact(imageUris);
    }
}

// THIS PART DOES NOT WORK. I CAN NOT READ THE FILE IN THE CODE BELOW.
private void addImageToNewOrExistingContactDialog(Uri imageUri) {
    ArrayList imageUris = new ArrayList<>();
    imageUris.add(imageUri);
    addImagesToNewOrExistingContact(imageUris);
}

private void addImagesToNewOrExistingContact(final ArrayList<Uri> imageUris) {

    for (Uri uri : imageUris) {
        File f = new File(uri.getPath());
        f.setReadable(true);
        f.setWritable(true);

        boolean readd = f.canRead(); // FALSE, but why?
        boolean exec = f.canExecute(); // FALSE, but why?
    }
}

我用以下文件测试了这个文件:

从"ES文件资源管理器“中选择两个文件并将它们发送到我的应用程序: file:///storage/emulated/0/Pictures/Adobe%C2%AE%20Photoshop%C2%AE%20Touch/1452348875289.jpg file:///storage/emulated/0/Pictures/Adobe%C2%AE%20Photoshop%C2%AE%20Touch/1455733673513.jpg

两个canRead() = TRUE

从"ES文件资源管理器“中选择一个文件,并将其发送到我的应用程序:内容://media/external/images/media/33675

canRead() = FALSE

实际上,文件内容://media/外部/映像/media/33675和file:///storage/emulated/0/Pictures/Adobe%C2%AE%20Photoshop%C2%AE%20Touch/1455733673513.jpg是完全相同的文件。

从"Google“中选择两个文件并将它们发送到我的应用程序: content://com.google.android.apps.photos.contentprovider/0/1/shared%3A%2Flocal%253A4541959b-3222-4ee0-b838-67049141b864%2FV2xDV01jNWhWVDRCQXRMY202YTh3NFNES1N4M01R/REQUIRE_ORIGINAL/NONE/1290260075 content://com.google.android.apps.photos.contentprovider/0/1/shared%3A%2Flocal%253A20e65034-795f-4300-9472-64a598afc4c1%2FV2xDV01jNWhWVDRCQXRMY202YTh3NFNES1N4M01R/REQUIRE_ORIGINAL/NONE/1096770166

两个canRead() = FALSE

谢谢你提前提供帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 04:13:49

在openInputStream()上使用getContentResolver(Uri)。不需要文件类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42885156

复制
相关文章
flutter - 如何在SingleChildScrollView中实现非滚动 ListView
我试图在这里实现一个不可滚动的ListView构建器,但似乎找不到解决方法。原因是因为我希望所有内容都是可滚动的,并且我不想在可滚动的父级中拥有可滚动的小部件。
徐建国
2021/08/03
2.5K0
如何在Fortran中调用Python
Python是机器学习领域不断增长的通用语言。拥有一些非常棒的工具包,比如scikit-learn,tensorflow和pytorch。气候模式通常是使用Fortran实现的。那么我们应该将基于Python的机器学习迁移到Fortran模型中吗?数据科学领域可能会利用HTTP API(比如Flask)封装机器学习方法,但是HTTP在紧密耦合的系统(比如气候模式)中效率太低。因此,可以选择直接从Fortran中调用Python,直接通过RAM传递气候模式的状态,而不是通过高延迟的通信层,比如HTTP。
bugsuse
2020/04/21
6.1K0
如何在 Flutter 中设置背景图像【Flutter专题16】
在 Flutter 应用程序中设置背景图像的常用方法是使用DecorationImage. 以下示例包括如何设置Fit 模式、透明度以及在显示键盘时防止图像变化。
徐建国
2021/12/13
12.3K0
如何在 Flutter 中设置背景图像【Flutter专题16】
ES中的api调用测试
SearchRequest可用于与搜索文档、聚合、建议有关的任何操作,还提供请求突出显示结果文档的方法。 
一个风轻云淡
2023/10/15
2630
【Python】如何在VBA中调用Pyt
背景: 已有一个Python脚本实现了部分功能,想使用VBA直接调用Python脚本 Python脚本如下: import time def hello(name): return "Hello, " + name + "!" print hello("World") #延时关闭windows控制台,使得用户可以看到运行结果 time.sleep(150); 方法如下: <pre name="code" class="vb">Sub test() Call Shell("C:\Pyt
py3study
2020/01/09
1.9K0
如何在低版本SDK调用高版本API?
随着Android SDK版本不断的迭代更新,在新的SDK上总是会出现让人眼前一亮非常方便好用的API。但是这些新的API呢在低版本的SDK上是没有的,所以当我们的minSdkVersion的版本低于新API所在的版本时,我们直接使用新API在编译时会出现报错。如果只是想解决编译报错的问题呢,Android给我们提供了两种注解的方式避免编译时报错:
吴延宝
2018/09/10
5K1
flutter - 如何在 dart/flutter 中收听流值
如果流不是广播流,则您只能收听一次。 请参阅此 Medium post 以了解有关 Streams 的更多信息。 收听 stream 时,您需要在 _assetsAudioPlayer.currentPosition 函数中添加您的代码。
徐建国
2021/08/30
1.1K0
如何在 Flutter 中创建自定义图标【Flutter专题22】
Flutter 提供了很多开箱即用的图标,使用这些图标非常容易。但是,您也可以使用自己的图标。您需要的是一个 TTF(True Type Font)文件,其中包含您要使用的图标。生成 TTF 文件的最简单方法是使用 Fluttericon.com。
徐建国
2022/03/30
3.5K0
Flutter:避免在生产代码中调用“print”
在使用新版本的 Flutter(2.5.0 或更高版本)时,如果您调用**print()**函数向控制台输出某些内容,IDE 会向您大喊大叫(这种行为以前没有发生过):
徐建国
2021/11/30
3.4K1
Flutter:避免在生产代码中调用“print”
实战教程:如何在API监控中实现高效报警和通知
因一业务需要,想要对API服务接口添加一些监控,以帮助跟踪应用程序的性能、问题和用户活动等。实现监控的方式有多种多样的方式,以下是一些常用的方法:
用户3578099
2023/09/27
8490
实战教程:如何在API监控中实现高效报警和通知
通过REDIS实现限制API调用次数
在对外提供api接口时,往往需要对api接口进行限制,某些情况下还需要做好防止接口被刷的功能。利用redis的自增计数特性可以很轻易的实现该功能。
程序新视界
2020/07/06
2.2K0
基于Powershell 实现腾讯云 API 调用
虽然腾讯云已经提供了支持多种语言的 SDK,使用起来也非常方便,但是某些环境中没有相关的运行环境使用起来往往带来一些环境准备和合规的成本。PowerShell 作为Windows环境普遍存在脚本环境,如果能够顺利运行云相关API将会非常方便。
用户8856568
2023/01/06
3.3K1
qt调用simsimi api实现小黄鸡
项目地址:https://github.com/racaljk/xiaojianji
racaljk
2019/02/25
8250
如何在Excel中调用Python脚本,实现数据自动化处理
这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作。
朱卫军 AI Python
2022/04/03
3.9K0
如何在Excel中调用Python脚本,实现数据自动化处理
flutter中如何实现deeplink
ios也支持两种,"Universal Links" 和 "Custom URL schemes",两个功能和android类似。
用户1974410
2022/09/20
2.4K0
Flutter中实现延时操作
本文是异步编程的延时策略篇章,在Flutter中实现延时操作有两种方式,一种是通过Future,另一种是通过Timer。
徐建国
2021/10/14
2.8K0
如何在小程序中调用本地接口
如何在小程序中调用本地接口 背景: 随着微信小程序开始公测,我司也拿到了AppID,所以开始了微信小程序的趟坑之旅。 由于现在网上已经有很多的《微信小程序从精通到入门》的教程了,所以就不再重复那些,只是讲一下,在开发的过程中,如何使用本地(开发环境)的接口。 因为小程序的开发文档中写到了,wx.request 中的URL只能是一个https请求,本地一般来讲是不会有https的-.- 所以我们使用Charles代理来实现需求。 前提: 本人认为你现在已经具备以下几个条件: 具有微
贾顺名
2018/04/12
2.8K0
如何在小程序中调用本地接口
Flutter调用平台代码
在前面的文章中我们讲了许多Flutter中的组件和Flutter中的特定操作,但是单单使用Flutter里的组件和方法是不够的。
flyou
2019/08/06
2.2K0
Flutter调用平台代码
Flutter开发·Flutter中动画的实现与使用
Flutter中动画的核心类库是Animation,它并不是一个widget,Animation是一个抽象类,就相当于一个定时器,用来描述当前动画的开始,暂停,以及数值状态,与ui渲染没有任何关系,它不能直接控制ui页面上的组件的样式,组件只能通过获取它的状态来改变ui的状态。
玖柒的小窝
2021/10/07
1.6K0
点击加载更多

相似问题

如何在flutter中调用API?

227

如何在flutter中调用API回调?

41

如何在flutter中实现Agora云录制api?

115

如何在API flutter数据上实现if语句

10

如何在Flutter中缓存API调用的响应?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档