从 Google 相册应用获取视频(非本地)

2024-03-15

随着谷歌照片应用程序,我正在尝试选择一个未缓存在设备上的视频。

我正在使用ACTION_获取_内容意图,启动选项对话框,然后从那里我选择 Google Photos 应用程序。

选择本地视频时,它会返回这种形式的 Uri。

内容://媒体/外部/视频/媒体/6708

然后,我查询内容提供程序以检索实际文件位置,然后从那里继续。文件位置如下所示。

/存储/模拟/0/WhatsApp/媒体/WhatsApp 视频/VID-20131102-WA0000.mp4

现在,当我选择一个在线视频,即:我的设备上尚不可用的视频,需要下载才能使用时,返回的 Uri 如下所示:

内容://com.google.android.apps.photos.content/1/https://lh6.googleusercontent.com/_RD-QTO_SK5jlaPldTe2n5GANqMc3h-ukcbNoFlF1NLy=s0-d https://lh6.googleusercontent.com/_RD-QTO_SK5jlaPldTe2n5GANqMc3h-ukcbNoFlF1NLy=s0-d

现在,没有记录的 ContentProvider 可以帮助我获取该视频的实际链接。即使我执行查询,除了 DISPLAY_NAME 和 SIZE 列之外,它不会返回任何内容。

显示名称包含 video.mpeg (不同视频的显示名称相同)

SIZE可能告诉我实际文件的大小。

参考了这篇文章。 https://stackoverflow.com/questions/19805966/download-image-from-new-google-plus-photos-application

我检查了各种帖子,并认为我必须通过内容提供商获取视频的 InputStream,保存文件并使用该文件。然而,选择图像文件效果很好,但对于视频文件则不然。

因此,为了将流复制到文件,我有这段代码。



InputStream inputStream = context.getContentResolver().openInputStream(Uri.parse(path));
  

最后写入临时文件。文件已创建,但格式似乎不正确。 VLC 播放文件,但自始至终仅显示第一帧。

如果我从上面给出的 URI 的最后部分获取 URL,并尝试在浏览器上查看它,它会下载一个 GIF 文件。我猜这就是问题所在。但我不知道如何获得mpeg视频的格式。

有人有过同样的经历吗?


终于找到了解决问题的方法。这适用于图像和视频。

参考了这个视频:

DevBytes:Android 4.4 存储访问框架:客户端

https://www.youtube.com/watch?v=UFj9AEz0DHQ https://www.youtube.com/watch?v=UFj9AEz0DHQ



Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
  

获取 Uri,然后访问并保存文件,如下所示:



ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver()
               .openFileDescriptor(Uri.parse(path),"r");

FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();

InputStream inputStream = new FileInputStream(fileDescriptor);

BufferedInputStream reader = new BufferedInputStream(inputStream);

// Create an output stream to a file that you want to save to
BufferedOutputStream outStream = new BufferedOutputStream(
                    new FileOutputStream(filePath));
byte[] buf = new byte[2048];
int len;
while ((len = reader.read(buf)) > 0) {
    outStream.write(buf, 0, len);
}
  

由于某种原因,在不使用 ParcelFileDescriptor 的情况下获取输入流不起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Google 相册应用获取视频(非本地) 的相关文章

  • 如何使用 ProGuard 将所有方法保留在类中

    我使用 ProGuard 来优化我的 Android 应用程序 然而 对于 Android 仪器测试 我需要一些 但不是全部 类来保留所有成员 我尝试了各种方法 最后一个是 keepclassmembers public class com
  • Android 上有哪些字体可用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道安卓有一个字体集合 http www ascenderfonts com store search
  • 强制用户在 Android 中的 EditText 中输入内容

    我的活动中有几个编辑文本 我希望我的用户在提交表单之前正确输入 我该怎么做 我还有旋转器和 RadioGroup 按钮 你可以加验证在提交按钮上单击 private boolean validateFields int yourDesire
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • 安卓无法玩ogg

    有人知道这是什么意思吗 ogg使用phonegap is Media播放 它使用MediaPlayer 05 26 15 41 50 007 1160 3631 E AudioFlinger no more track names avai
  • 在 Android 中长按时从操作模式中删除后退/主页按钮

    我已经在里面长按实现了上下文操作模式recycler view 为此我打电话给ActionModeCallback从创建动作模式开始 创建动作模式时 默认显示后退箭头 检查如下 单击后退箭头 操作模式将关闭 现在我想要hide or rem
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • Android:应用内计费V3超时返回哪个响应码?

    出现网络超时情况时 Google Play 应用内结算服务 ice er V3 将返回哪些响应状态代码 它的所有功能都是统一的吗 我将在这里描述我的发现 我通过拔掉主机插头 在安装了全功能 GP GP Store V3 10 10 GP S
  • 如何查看 Android 上的 Wi-Fi 是否已连接?

    我什至不希望我的用户尝试下载某些内容 除非他们连接了 Wi Fi 然而 我似乎只能判断是否启用了 Wi Fi 但他们仍然可以有 3G 连接 android net wifi WifiManager m WifiManager getSyst
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • 以编程方式将 TextView 添加到主屏幕小部件

    我想以编程方式将文本视图控件添加到我的主屏幕小部件 在下面的示例中 我使用 TextView 填充 Linearlayout 但是这里应该如何使用 RemoteView 它只接受 xml 资源布局作为参数 public class MyWi
  • 在 Jetpack Compose 中跨可组合函数重复使用一组预览注释

    在 Jetpack Compose 中迈出第一步 这非常令人惊奇 除了一个恼人的问题 我有一组固定的预览 正常 深色和 RTL Preview name Normal group Screen showBackground true Pre
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • onBackPressed 隐藏 不破坏 Activity

    我知道如何取消后退按键 以便活动 主窗口保持可见 public void onBackPressed return 我的目标是隐藏该活动 但是 在没有完成它的情况下 您如何在 onBackPressed 事件中做到这一点 即我想达到 onP
  • Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,仍无法安装 USB 驱动程序

    我正在尝试设置 Nexus 7 2013 进行调试 但我在安装 USB 驱动程序的步骤中陷入困境 到目前为止 这是我尝试过的 采取的步骤 在 Nexus 7 2013 上打开调试模式 连接设备至 PC 下载 Google USB 驱动程序于
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 直接使用从密钥库加载的 SecretKey 时,密钥用户未经过身份验证

    我正在尝试使用 Cipher 和在 KeyStore 中加载的 SecretKey 来加密数据 但总是收到此错误 导致 android security KeyStoreException 关键用户未经过身份验证 我尝试自己创建 Secre
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • Java Swing Mac OSX 首选项菜单

    我正在尝试将 首选项 菜单添加到我的 Java Swing 应用程序中 但事实证明它有点令人作呕 我读过很多关于这方面的帖子和文章 听起来很简单 但是 我看到参考文献com apple eawt Application在我找到的示例中 但是
  • PHP imagepng() 正在创建损坏的图像

    我到处寻找可能的解决方案来解决我的问题 不幸的是我似乎无法弄清楚 我有一个 php 文件 它根据其他图像创建图像 我让脚本完全按照现在的方式运行 没有任何缺陷 但在摆弄其他一些文件后 它突然停止工作 并在 Firefox Chrome 和
  • Android:MediaPlayer 已定稿但未发布

    我正在我当前正在开发的应用程序中使用 MediaPlayer 类 我想在 Activity 的生命周期内保留 MediaPlayer 类的实例 我在 Activity 的 onPause 方法中释放 MediaPlayer 类中的资源 但是
  • 在带有 webpack 的 Angular cli 中,如何关闭 ng 服务上的 typescript linting

    在带有 webpack 的 Angular cli 中 如何关闭 ng 服务上的 typescript linting 我遇到一些愚蠢的错误 需要跳过 我可以做他们的任何角度 cli 设置来关闭正在检查的打字稿吗 这是我使用的应用程序 ht
  • Android setRequestProperty 在 url.openConnection()

    我有一个 Android 应用程序需要在连接中设置请求属性 这是我的代码 URL url new URL sUrl HttpURLConnection connection HttpURLConnection url openConnect
  • 删除数字字符串python [重复]

    这个问题在这里已经有答案了 对于我的作业 我必须创建一个函数 该函数返回一个与给定字符串相同的新字符串 但删除了数字 示例 删除数字 abc123 将返回字符串 abc 我已经尝试了几乎所有我能想到的方法 但它不能正常工作 def test
  • AWS S3 Glacier - 以编程方式启动恢复

    我一直在编写一个网络应用程序 使用 s3 进行存储 使用 Glacier 进行备份 所以我设置了生命周期策略来存档它 现在我想编写一个列出存档文件的网络应用程序 用户应该能够从中启动恢复 然后在恢复完成后收到一封电子邮件 现在我遇到的麻烦是
  • 在使用 Docker 配置构建代理之前,Teamcity Build 不会运行?

    我为我的 Teamcity 管道创建了一个新版本 我第一次使用 Docker buildstep 设置完所有内容后 我意识到构建代理似乎还没有准备好 我知道我的代理似乎还没有准备好使用 docker 进行构建but没有人真正告诉我如何做到这
  • 在java中解析XML时没有工作ID属性

    我目前正在开发一个图形 XML 编辑器 对于该编辑器 我必须能够通过其 ID 属性访问各个元素 我已经建立了一个 XML 模式 在其中定义了 ID 属性 我使用 javax xml parsers DocumentBuilderFactor
  • 使用拆分器使 ItemsControl 子项可调整大小

    我想将小部件插入我的ItemsControl并使它们可调整大小 我该如何实现这一目标 这是我的 XAML
  • 使用 numpy 实现最大/平均池化(带步长)

    我想知道如何使用 numpy 实现简单的最大 均值池 我正在读书使用 numpy 进行最大池化和平均池化 https stackoverflow com questions 42463172 how to perform max mean
  • 如何动态更改 SQLAlchemy 声明性模型上的列类型?

    我在生产中运行 mysql 但想在内存数据库中的 sqlite 中运行简单的测试 旧版 mysql 数据库的表中包含 mysql 特定类型的列 这些列是在声明性模型中声明的 子类 declarative base 我想运行一些简单的测试而不
  • VB.Net Linq to Entities Null 比较 - 'Is Nothing' 或 '= Nothing'?

    我们在 VB Net 中有多个项目 使用 Net Framework 4 和 Linq to Entities 进行许多 SQL 查询 迁移到 EF 对我们来说是一个新的转变 使用它大约 4 6 个月 并且得到了高层管理人员的支持 因为我们
  • 获取函数的返回值

    假设我有一些运行一些代码的函数 然后return一些东西 像这样 function something some code return some whatever 因此 如果我想提取在函数中生成的数据 的新值 some 我该怎么办呢 例如
  • 如何将 Intl.NumberFormat 与本机反应一起使用?

    我试图在本机反应中将数字转换为价格格式 如何使用https developer mozilla org en US docs Web JavaScript Reference Global Objects NumberFormat http
  • 如何使类属性专属于超类

    我有一个关于行星的大师班 class Planet def init self name self name name def destroy self 我还有一些继承自的类Planet我想让其中之一无法被摧毁 而不是继承destroy功能
  • 使用动态 Linq 实体框架查询抛出奇怪的异常

    我有一个画廊实体框架类 我正在尝试使用 ScottGu 博客上发布的动态 Linq 库来查询实体集 失败的代码行如下 return context Galleries OrderBy sidx sord Skip page rows Tak
  • 二叉搜索树中节点的公平删除

    BST中删除节点的思路是 如果该节点没有子节点 则删除该节点并将父节点指向该节点的指针更新为空 如果该节点有一个子节点 则通过更新该节点的父节点指向其子节点的指针来用其子节点替换该节点 如果该节点有两个子节点 则找到该节点的前驱节点并将其替
  • SVG 中的动画虚线

    我需要为 SVG 中的虚线设置动画 My Work paths fill none stroke grey stroke dasharray 1440 stroke width 1440 stroke linejoin round mask
  • 从 Google 相册应用获取视频(非本地)

    随着谷歌照片应用程序 我正在尝试选择一个未缓存在设备上的视频 我正在使用ACTION 获取 内容意图 启动选项对话框 然后从那里我选择 Google Photos 应用程序 选择本地视频时 它会返回这种形式的 Uri 内容 媒体 外部 视频