android 从相册选取图片在小米手机报错的解决办法
在跳转到系统相册选取照片的时候,用如下代码跳转:
Intent albumIntent = new Intent(Intent.ACTION_PICK, null);/*** 下面这句话,与其它方式写是一样的效果,如果:* intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);* intent.setType(""image/*");设置数据类型* 要限制上传到服务器的图片类型时可以直接写如:"image/jpeg 、 image/png等的类型"*/albumIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");startActivityForResult(albumIntent, CHOOSE_BIG_PICTURE);
之后在onActivityResult里拿到回调的里,通过:
Uri uri = data.getData();
拿到了Uri,从而用cursor在数据库里查询真实路径,但是查询到的真实路径在我的红米Note4X上是用不了的,别的机型还没测,但在我的三星手机上真实 路径是可以用的,解决办法如下,通过一个工具类来查询真实路径:
public class GetPathFromUri4kitkat {/*** 专为Android4.4设计的从Uri获取文件绝对路径,以前的方法已不好使*/@SuppressLint("NewApi")public static String getPath(final Context context, final Uri uri) {final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;// DocumentProviderif (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {// ExternalStorageProviderif (isExternalStorageDocument(uri)) {final String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final String type = split[0];if ("primary".equalsIgnoreCase(type)) {return Environment.getExternalStorageDirectory() + "/" + split[1];}// TODO handle non-primary volumes}// DownloadsProviderelse if (isDownloadsDocument(uri)) {final String id = DocumentsContract.getDocumentId(uri);final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));return getDataColumn(context, contentUri, null, null);}// MediaProviderelse if (isMediaDocument(uri)) {final String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final String type = split[0];Uri contentUri = null;if ("image".equals(type)) {contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;} else if ("video".equals(type)) {contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;} else if ("audio".equals(type)) {contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;}final String selection = "_id=?";final String[] selectionArgs = new String[] { split[1] };return getDataColumn(context, contentUri, selection, selectionArgs);}}// MediaStore (and general)else if ("content".equalsIgnoreCase(uri.getScheme())) {return getDataColumn(context, uri, null, null);}// Fileelse if ("file".equalsIgnoreCase(uri.getScheme())) {return uri.getPath();}return null;}/*** Get the value of the data column for this Uri. This is useful for* MediaStore Uris, and other file-based ContentProviders.* * @param context* The context.* @param uri* The Uri to query.* @param selection* (Optional) Filter used in the query.* @param selectionArgs* (Optional) Selection arguments used in the query.* @return The value of the _data column, which is typically a file path.*/public static String getDataColumn(Context context, Uri uri, String selection,String[] selectionArgs) {Cursor cursor = null;final String column = "_data";final String[] projection = { column };try {cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,null);if (cursor != null && cursor.moveToFirst()) {final int column_index = cursor.getColumnIndexOrThrow(column);return cursor.getString(column_index);}} finally {if (cursor != null)cursor.close();}return null;}/*** @param uri* The Uri to check.* @return Whether the Uri authority is ExternalStorageProvider.*/public static boolean isExternalStorageDocument(Uri uri) {return "com.android.externalstorage.documents".equals(uri.getAuthority());}/*** @param uri* The Uri to check.* @return Whether the Uri authority is DownloadsProvider.*/public static boolean isDownloadsDocument(Uri uri) {return "com.android.providers.downloads.documents".equals(uri.getAuthority());}/*** @param uri* The Uri to check.* @return Whether the Uri authority is MediaProvider.*/public static boolean isMediaDocument(Uri uri) {return "com.android.providers.media.documents".equals(uri.getAuthority());}
}
直接把这个工具类拿去用就可以,使用方法,在onActivityForResult里面:
String path= GetPathFromUri4kitkat.getPath(context,data.getData());
这个path就是最终的图片路径
android 从相册选取图片在小米手机报错的解决办法相关推荐
- android --拍照相册选取图片[兼容小米等其他手机]
前几天做项目中选择图片的过程中遇到小米手机出现不能够选取把图片放入到view中,这里是因为小米采用的是树形结构,而其他手机普遍是图形结构,本质就是url结构有些不同,小米的是绝对路径 1.定义常量: ...
- flutter重新配置sdk路径_Android studio 切换flutterSDK之后报错及解决办法(推荐)
Windows系统上面修改了flutter sdk的环境变量地址之后Android studio上面运行flutter项目就会报错 类似于: Could not read script XXX\flu ...
- 记录webView接入h5界面时,调起相册、文件、相机无效的解决办法
记录webView接入h5界面时,调起相册.文件.相机无效的解决办法. 在开发项目时,接入一个h5界面.使用webview时,发现界面显示正常,但是按钮不论怎么点都无效,但是m站和ios都正常.后来上 ...
- Android应用启动时白色闪屏原因及解决办法
白色闪屏现象: 如果OnCreate().onStart().onResume()中操作太多,耗时较久.那么就会在主界面显示出来之前出现白色闪屏.为了更清晰的看出白色闪屏,这里在代码中执行50000次 ...
- 【Android教程】Android Studio找不到连接的手机完全解决办法
Android Studio找不到连接的手机完全解决办法 1.问题背景 现在Android大多都用谷歌的Android Studio来开发 但是 一开始使用Android Studio都不会那么顺利 ...
- windows10下,from skimage import morphology 报错的解决办法
windows10下,from skimage import morphology 报错的解决办法 报错原因 没有安装numpy+mkl库 解决方法 卸载skimage pip uninstall s ...
- Xamarin开发安装Visual Studio 2015 update2报错的解决办法
Xamarin开发安装Visual Studio 2015 update2报错的解决办法 错误信息:update 2 requires a member of the visual studio 20 ...
- source insight删除保存路径为中文的project工程项目报错的解决办法
http://blog.csdn.net/yixilee/archive/2010/09/01/5855663.aspx source insight删除已加载的project工程项目报错的解决办法 ...
- 图解Myeclipse 导入Java Web项目报错的解决办法听语音
图解Myeclipse 导入Java Web项目报错的解决办法听语音 https://jingyan.baidu.com/article/046a7b3e953ef3f9c27fa93d.html
最新文章
- Python最抢手、Go最有前途,7000位程序员揭秘2019软件开发现状
- scipy和statsmodels处理回归
- 电子商务之网购魅力何在?(网购用户行为分析)
- 霸榜Github第一!谷歌重磅开源的“海啸”,我服了
- Scribe应用实例
- Redis分布式锁解决抢购问题
- python正则匹配ip_[求助] 正则表达式匹配 IP 地址的问题求助
- Android 系统(126)---Android的死机、重启问题分析方法
- 高合HiPhi Z,参透豪华电动车的终极奥义?
- 导致溢出_邯郸一司机,溢出的“5毫克”导致A2被降级,老司机自吞“苦酒”
- Activity生命周期(略记)
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
- python和nodejs哪个写爬虫好_PythonNodejs 哪个比较适合写爬虫
- 用户行为分析面面观之二
- JavaCV入门教程目录(JavaCV从入门到实战,JavaCV指南手册,免费JavaCV教程)
- CSRF跨站请求伪造漏洞
- 状态栏RAT信号图标显示
- 如何用c语言插入(背景)音乐
- 插入目录后 正文页码重新怎么从1开始
- 使用VLC把视频转换为一帧一帧的图片
热门文章
- HTML5/jQuery界面控件:Ignite UI
- 带工作流的springboot后台管理项目,一个企业级快速开发解决方案
- 007 总结:极限三种情况及性质(唯一性、有界性、保号性);无穷小及无穷大
- c# .NET中调用mysql数据库出错:“给定关键字不在字典中”,解决方案
- InputStreamReader和BufferedReader
- 游戏工作室使用的手机多控系统
- 渗透测试抓包神器BurpSuite2022.5
- 【HMS Core】运动健康服务查询步数,卡路里,距离,中高强度接口,没有返回创建时间
- 替换npm仓库地址为淘宝镜像地址
- 高等数学(第七版)同济大学 习题10-3 (前9题)个人解答