从 Uri 打开文件,与 Android 中的位置无关

2023-12-24

我可以使用一些帮助来了解如何在 android 中打开文件。我的具体问题与打开图像文件有关。在我的应用程序中,用户使用他们选择的相机应用程序拍摄图像,然后我对返回的图像进行操作。根据手机、Android 版本和所选相机应用程序的不同,我会在 onActivityResult 中返回不同的参数。有时我会得到一个 URI,有时只是一个图像,有时两者兼而有之。

启动相机的代码是:

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, CAMERA_IMAGE); 

然后我收到的结果为:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_IMAGE && resultCode == Activity.RESULT_OK) {
        Log.d(TAG,"In onActivityResult");
        Bitmap imageBmp = null;
        Uri imageUri = data.getData();

        if (data.getExtras() != null) {
        imageBmp = (Bitmap)data.getExtras().get("data");
        Log.d(TAG,"Got Bitmap");
        }
        ...
    }
}

当我得到 URI 但没有图像时,我的问题就出现了。如果 imageBmp 为 null,那么我需要从 URI 加载图像。我已经测试了几种设备/应用程序组合。有时 URI 位于内部存储器上,有时位于 SD 卡上。如果文件位于 SD 卡上,那么我已使用 ManagedQuery 来获取该文件。

String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(imageUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);                        
cursor.moveToFirst();
imageFileName = cursor.getString(column_index);  
File imageFile = new File(imageFileName);
...

如果它位于内部存储上,那么我会收到 FileNotFoundException。

我的具体问题是:如何修改它以打开一个独立于文件系统上位置的文件,只知道 URI?我想做这样的事情:

File imageFile = new File(imageUri);

但 File 不接受 Uri 对象。我执行托管查询将其转换为字符串。

我更普遍的问题是为什么我需要首先进行查询?为什么我不能只使用返回的 URI?


您必须使用 contentResolver 来访问作为 uri 传递的内部文件

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

从 Uri 打开文件,与 Android 中的位置无关 的相关文章

  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • AdapterContextMenuInfo 始终为 null

    我尝试通过 android 开发文档中的书来做到这一点 this didn t create a menu i don t know why registerForContextMenu getListView setListAdapter
  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 没有用于警告的设置器/字段 Firebase 数据库检索数据填充列表视图

    我只是想将 Firebase 数据库中的数据填充到我的列表视图中 日志显示正在检索数据 但适配器不会将值设置为列表中单个列表项中的文本 它只说 没有二传手 场地插入值 这让我觉得我的设置器没有正确制作 但 Android Studio 自动
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne
  • 有没有任何代码可以在android中设置壁纸而无需裁剪和缩放?

    我正在创建一个画廊应用程序 我的第一个应用程序 这是我的代码 Bitmap bmd BitmapFactory decodeStream is try getApplicationContext setWallpaper bmd catch

随机推荐

  • d3.js 中的核密度平滑

    抱歉 我既不是统计专家 也不是 d3 js 专家 我试图叠加两个平滑的直方图以显示两个相关分布的重叠 我想知道 d3 js 中内核密度或其他平滑的可用性 大约一年前似乎有一些关于该主题的活动 但我无法在主线 d3 js 代码中找到该函数 关
  • 如何将 VS Code 调试器与 webpack-dev-server 结合使用(忽略断点)

    我只是想让 VS Code 的调试器与 webpack dev server 一起工作 而不忽略我的断点 现在 webpack dev server 从内存中提供捆绑文件 而如果我理解正确的话 VS Code 调试器会在磁盘上搜索它们 或者
  • 我无法让客户端脚本连接到本地主机服务器,TCP 连接永远不会发生

    我编写了一个简单的客户端程序 它使用以下命令创建套接字 CFSteamCreatePairWithSocketToHost function 并连接到在端口 8080 上的本地主机上运行的服务器 它很好地创建了套接字 但它从不连接到服务器
  • SQL Server XML 添加属性(如果不存在)

    我正在尝试添加一个属性 如果它不存在 它应该很简单 但我对 XML XPath XQuery 等还不熟悉 所以请原谅我的无知 我希望能够传递 XML 数据并修改它 ALTER FUNCTION dbo ConvertXmlData xmlD
  • Kendo UI 网格插入/更新(再次)创建重复记录

    我在这个主题中遇到了与丹尼尔相同的问题 但他的解决方案对我不起作用 http www kendoui c om forums ui grid kendo ui grid inserts updates create duplicate re
  • Gmail 中添加了一个间隙,位于 Outlook 的 html 签名内

    我创建了一个需要在 Outlook 中使用的 html 签名 根据建议 我使用了表格布局 给定所有图像 甚至 td tr 和表格本身的特定高度和宽度 0 填充和边距 甚至尝试在 css 和旧式方式中添加这些内容实际标签 在 Outlook
  • 如何使用 LibGit2Sharp 向 VSTS 进行身份验证?

    我正在尝试使用 LibGit2Sharp 克隆 VSTS Visual Studio Team Services 存储库 我正在设置一个CredentialsHandler and UsernamePasswordCredentials代表
  • Primefaces 保存/传递过滤后的数据表结果列表

    目前 我正在使用具有排序 过滤功能的数据表成功地显示数据库中的图像元数据 在我的数据表下方 我使用第三方图像封面成功地显示了我的图像 http www jacksasylum eu ContentFlow http www jacksasy
  • 引导日期选择器

    我试图让引导日期选择器突出显示在下拉日期选择器中选择的日期 它目前没有这样做 我错过了什么 div class input append date div
  • 根据控制器中的变量显示或隐藏元素 - Ionic

    据我所知 这可能更多的是 AngularJS 问题 而不是 Ionic 特定问题 我的一个视图中有一个按钮
  • 获取个人应用代码并显示

    我正在尝试获取应用程序代码并显示它 例如 如果按钮 X 启动一个新活动 则 textView 显示整个方法 我只到达了如何以 HTML 格式显示代码这个问题 https stackoverflow com questions 1529068
  • 跟踪电子中的窗口大小

    我今天才开始玩 Electron 我需要能够获取可用的窗口大小 并在窗口大小调整时更新它 看起来这并不像传统的 JS 应用程序那么简单 跟踪窗口大小的推荐方法是什么 目前 我有我的主进程和一个渲染器 不打算一次打开超过 1 个渲染器 窗口
  • 如何从命令行发送电子邮件?

    我想从命令行快速发送电子邮件 我意识到可能有多种不同的方法可以做到这一点 我正在寻找一种从 Linux 终端 可能是 bash shell 但任何东西都可以 执行此操作的简单方法 以及在 Windows 上执行此操作的替代方法 我希望能够直
  • 如何在 UML 序列图中表示监听器

    在序列图中 如何表示事件触发的侦听器 它不仅仅是常规方法调用 因此这样显示似乎不正确 我尝试制作包含 JMS 侦听器的系统的序列图 我可以通过系统对 JMS 队列的 send 调用来启动生命线 将调用 send 的系统显示为业务参与者 或者
  • Django 克隆递归对象

    以前 当我想递归地克隆对象时 我遇到了问题 我知道克隆对象的简单方法是这样的 obj Foo objects get pk
  • Swift 中何时使用静态常量和变量?

    有一些帖子介绍如何编写代码static constant and static variable在斯威夫特 但不清楚什么时候使用static constant and static variable而不是constant and varia
  • (InvalidRequestException) 调用 GetQueryResults 时...从 Lambda Python 查询 Athena...无法读取结果

    我一直在尝试从我的 lambda 函数 Python3 8 查询 Athena 但尽管尝试添加 if else 语句来检查执行状态 但我不断收到相同的错误 并且在 aws 控制台和 cli 上总是出现相同的错误本地 这是 lambda 函数
  • 根据用户用于浏览的设备(android tab、iphone、ipad)动态更改 zend 中的布局和模板

    我正在开发一个应用程序 PC 杂志商店 我已经完成了 PC 的大部分工作 但客户端也希望在其他 Android 设备上有同样的东西 作为 Web 视图加载 由于这些设备的高度和宽度与PC不同 所以我需要以最简单的方式获取设备的尺寸和高度 以
  • 我也应该连接到 QNetworkReply::error() 吗?

    我创建了一个 POST 请求并连接到完成的 http qt project org doc qt 5 0 qtnetwork qnetworkreply html finished signal QNetworkReply reply ma
  • 从 Uri 打开文件,与 Android 中的位置无关

    我可以使用一些帮助来了解如何在 android 中打开文件 我的具体问题与打开图像文件有关 在我的应用程序中 用户使用他们选择的相机应用程序拍摄图像 然后我对返回的图像进行操作 根据手机 Android 版本和所选相机应用程序的不同 我会在