之前在工作的过程中,遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。 因为需求的原因,要求拍照上传或者从相册中选择图片上传,而且图片是需要经过压缩的,大小不能超过2M。...最关键的来了,如果通过 URI 来获取文件呢?...比如,现在 URI 为 content://media/extenral/images/media/17766 ,而我们需要得到对应的文件路径。...因为在 Android 4.4 及以上的手机上,获取到的 URI 变成了 content://com.android.providers.media.documents/document/image%3A235700...这是因为在 Android 4.4 及以上的机型,使用了 DocumentUri 来代表获取到文件的 URI 。 所以我们又要对于 DocumentUri 进行适配。
问题描述 How to get actual path from Uri xamarin android BitmapFactory.decodeFile() returning null xamarin.android...需求 已获取 Android 文件的 Uri,现在需要根据此 Uri 获取文件的真实路径。.... public static bool isExternalStorageDocument(Android.Net.Uri uri) { return "com.android.externalstorage.documents...(Android.Net.Uri uri) { return "com.android.providers.downloads.documents".Equals(uri.Authority);...uri) { return "com.android.providers.media.documents".Equals(uri.Authority); } //Whether the Uri
内部存储路径/data/data/youPackageName/,在程序安装的时候创建,在卸载的时候被删除。...其他一些路径的标准写法 Environment.getDataDirectory() = /data Environment.getDownloadCacheDirectory() = /cache Environment.getExternalStorageDirectory...system context.getCacheDir() = /data/data/com.mt.mtpp/cache context.getExternalCacheDir() = /mnt/sdcard/Android
import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Bundle...uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); }...public boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents...".equals(uri.getAuthority()); } } AndroidMainfest文件增加权限 android="http://schemas.android.com...demo是早期的,可能跟上面的不同,但是测试过unity打包出apk能浏览到文件的真实路径
我们知道在安卓4.4以后是不能把文件的真实路径直接给别的应用的,所以返回的uri是经过封装的,所以我们要进行解析取出里面的路径。...content类型的uri通过getImagePath这个方法来获取真实路径,真实路径通过displayImage这个方法就可以展示出来了。所以主要的工作就是怎么拿到真实路径。...不了解的读者可以查看这篇博客Android中的Cursor。然后通过这个Cursor对象的MediaStore.Images.Media.DATA这个参数就可以获取到真实路径了。...类型的uri或者真实路径的String。...首先是版本低于4.4的,因为返回的是真实的uri,也就是content开头的那个,所以直接通过getImagePath获取真实路径再通过displayImage展示即可。
android:layout_gravity="center_horizontal" /> 获取控件并绑定事件 @Override protected void onCreate(Bundle...} //判断系统版本,低于7.0会将file对象转换为uir对象否则调用getUriForFile将file对象转化为一个封装过的uir对象 //因为7.0开始直接使用本地真实路径会被认为是不安全的会抛出...Uri,直接获取图片路径即可 imgPath = uri.getPath(); } displayImage(imgPath);//显示选中的图片 } private void handleImageOnKiKat...; //通过 Uri 和 selection 来获取真实的图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
拓展:获取图片方式 4.1 通过绝对路径获取图片 4.2 通过Uri获取资源流 4.3 通过cursor获取图片 相机 以下,调用相机的代码出自开源项目 SelectImgAsWechath 。...而从 Android N 开始,将不允许在 App 间,使用 file:// 的方式,传递一个 File ,否者会抛出 FileUriExposedException的错误,会直接引发 Crash。...当我们代码中使用的绝对路径,(如 “DCIM/camerademo”)匹配到了install.mxl中设置到的path字段的内容(path=“DCIM/camerademo”),Uri中显示路径就会被对应的...拓展:获取图片方式 4.1 通过绝对路径获取图片 image.setImageBitmap(BitmapFactory.decodeFile(takeImageFile.getAbsolutePath(...和selection来获取真实路径 Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider
从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行裁剪,返回uri,再对这个uri执行一系列操纵。...根据Uri获取真实路径 还是因为机型适配的问题,以下提供两种方法,大家自己尝试: 方法一 public static String getRealPathFromURI(final Context context...takePhoto; /** 从Intent获取图片路径的KEY */ public static final String KEY_PHOTO_PATH = "photo_path"...4.4后通过Uri获取路径以及文件名一种方法 public static String getRealPathFromURI(final Context context, final Uri...设计的从Uri获取文件绝对路径,以前的方法已不好使 @SuppressLint("NewApi") public static String getPathByUri4kitkat(final
给其他应用传递 file:// URI 类型的Uri,可能会导致接受者无法访问该路径。...因为上述指定的path为path="",所以content://com.jph.takephoto.fileprovider/camera_photos/代表的真实路径就是根目录,即:/storage/...content://com.jph.takephoto.fileprovider/camera_photos/temp/1474960080319.jpg代表的真实路径是:/storage/emulated...另外,推荐大家使用开源工具库TakePhoto, TakePhoto是一款在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。...设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。
Android7.0后Uri uri=Uri.fromFile(file) ——> Uri uri=FileProvider.getUriForFile(content,authority,file)获取...--name:就是给 path 属性所指定的子目录名称取一个别名,后续生成 content:// URI 时, 会使用这个别名代替真实目录名。...--:内部存储空间应用私有目录下的 files/ 目录,等同于 Context.getFilesDir() 所获取的目录路径;--> :内部存储空间应用私有目录下的 cache/ 目录,等同于 Context.getCacheDir() 所获取的目录路径;--> :外部存储空间根目录,等同于 Environment.getExternalStorageDirectory() 所获取的目录路径;--> <!
,将 File 转换成 Uri 对象,这个 uri 对象表示这本地真实路径。...复制代码 在 7.0 后,这种通过真实路径来获取的 Uri 被认为是不安全的,所以提供了一种新的解决方案,就是通过 FileProvide 来实现文件的访问,FileProvider 是一种比较特殊的内容提供器...就是 Android 系统对 SD 卡做了很大的限制,从 10.0 开始,每个程序只能有权在自己的外置存储空间关联的目录下读取和创建相应的文件,也称作沙箱。...获取改目录的代码是:getExternalFilesDir() ,关联的目录路径大致如下: /storage/emulated/0/Android/data//files 复制代码 将数据放在这个目录下...,需要注意的是:共享文件夹可以通过 uri 进行访问,如拿到输入/输出流等。
实际效果图: 代码实现: 权限配置 点击事件绑定 相册访问 根据路径设置图片 其他方法 权限 首先,现在 mainfest.xml 文件中添加以下权限: android...:name="android.permission.READ_EXTERNAL_STORAGE"/> android:name="android.permission.WRITE_EXTERNAL_STORAGE...("file".equalsIgnoreCase(uri.getScheme())){ //如果file类型位uri直街获取图片路径即可 imagePath...(filePathColumn[0]); path = cursor.getString(columnIndex); //获取照片路径...//通过Uri和selection来获取真实图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null
如:/sdcard/Android/data/com.yc.helper 第三种:其它目录 比如各个App在/sdcard/目录下创建的目录,如支付宝创建的目录:alipay/,高德创建的目录:amap...,通过MediaStore获取Uri。...路径可以直接构造也可以通过MediaStore获取。 2、通过Uri访问。Uri可以通过MediaStore或者SAF(存储访问框架,通过intent调用startActivity访问)获取。...如下所示,下面构造后,第三方应用收到此Uri后,并不能从路径看出我们传递的真实路径,这就解决了第一个问题。...//如此构造后,第三方应用收到此Uri后,并不能从路径看出我们传递的真实路径,这就解决了第一个问题: //发送方传递的文件路径接收方完全知晓,一目了然,
@TargetApi(19) private void handleImageOnKitKat(Intent data) { //其实这个方法的目标很简单,就是要获取图片的真实路径...我们获取的图片uri不是真实的图片uri,是封装过的,不能直接用来显示图片,我们要进行解析 Uri uri = data.getData();//通过传入intent参数来获取信息,图片的内容...//进行数据库查询是作为参数,主要是约束我们的查询条件 //getImagepath()方法是我们自己提供的用来获取图片真实路径...displayImage(imagepath); } //获取图片路径的方法 private String getImagepath(Uri...uri, String selection) { String path = null; //通过uri和selection获取真实的图片路径 //其实selection
Authority为包名+provider的类型名,如: com.example.android.storageprovider.documents android:exported属性的值为ture...注意:从MediaStore接口中查询到的DATA字段将在Android Q开始废弃,不应该利用它来访问文件或者判断文件是否存在;从 MediaStore接口或者SAF获取到文件Uri后,请利用Uri打开...解决方案2: 从MediaStore接口获取公共目录多媒体文件Uri后,打开OutputStream或FD时,注意catch RecoverableSecurityException,然后向用户申请该多媒体文件的删改权限...设备从Android Q之前的版本升级到Android Q,已安装的APP获得Legacy View视图。...字段开始废弃,不再表示文件的真实路径。
最近在Android上做了拍照功能的开发。...业务场景是:点击界面(HTML5)上的拍照按钮会调用拍照的JS API,获取其返回照片文件的存储路径、扩展名以及照片文件的Base64字符串,然后在界面上显示图片。...* 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图 * 如果不实用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰 */ ContentValues values..., photoUri); startActivityForResult(intent, ACTION_TAKE_PHOTO); 3、如何获取图片的存储路径,以字符串的形式返回: private Uri...4、如何从Uri获取到图片的Bitmap对象: private Uri photoUri; byte[] photoContent = readStream(this.context.getContentResolver
通过调用系统Action,从图库中选择图片,并展示到界面上 2....API19前后获取相册图片路径 详见(仅客户端代码),请移步:本人GITHUB Intent intent = new Intent(); // Set an explicit MIME data...System.out.println("path:" + path); // path_above19:/storage/emulated/0/girl.jpg 这里才是获取的图片的真实路径...* @param uri */ private String getFilePath_below19(Uri uri) { //这里开始的第二部分,获取图片的路径...+ column_index); //将光标移至开头 ,这个很重要,不小心很容易引起越界 cursor.moveToFirst(); //最后根据索引值获取图片路径
selectedImage = data.getData(); //获取系统返回的照片的Uri String[] filePathColumn = {MediaStore.Images.Media.DATA...(filePathColumn[0]); path = cursor.getString(columnIndex); //获取照片路径...("file".equalsIgnoreCase(uri.getScheme())){ //如果file类型位uri直街获取图片路径即可 imagePath...path = null; //通过Uri和selection来获取真实图片路径 Cursor cursor = getContentResolver().query(uri...--获取照片权限--> android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission
6.0以后对某些涉及用户隐私权限的获取需要动态获取,所以首先是检查权限,如没有权限则动态申请权限,这里我们需要用到的权限是WRITE_EXTERNAL_STORAGE和CAMERA。...自Android 7.0后系统禁止应用向外部公开file://URI , * 因此需要FileProvider来向外界传递URI,传递的形式是content : //Uri,使用时需要在清单文件中注册。..., 上述方法的title、description参数只是插入数据库中的字段, 真实的图片名称系统会自动分配。...video /** * 从相册中选择视频 */ private void choiceVideo() { Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI...); } catch (IOException e) { e.printStackTrace(); } //获取一些图片信 //Uri uri = data.getData(); //Cursor cursor