一切都运行良好,但最近在4.4我开始在Photos / Google应用程序中得到一个例外,因为它期望内容URI而不是文件URI.
所以我的问题是,如果有人知道如何将完整的文件路径/ URI(文件://)转换为内容样式URI(内容://)?
很抱歉缺少源代码,我远离拥有源代码的计算机,但我希望没有它的问题是有道理的,从完整的路径获取内容样式uri.
编辑:
图像将复制到系统的图库或媒体库中,而不会保存在我的应用内部存储中.
以下是我想要转换的示例:
file:///storage/emulated/0/Pictures/Rockstar/image.jpg
至
content://media/internal/images/media/445
编辑2:
以下是我从Google应用中获得的错误:
04-21 10:50:35.090: E/AndroIDRuntime(7220): FATAL EXCEPTION: main04-21 10:50:35.090: E/AndroIDRuntime(7220): Process: com.Google.androID.apps.plus,PID: 722004-21 10:50:35.090: E/AndroIDRuntime(7220): java.lang.RuntimeException: Unable to resume activity{com.Google.androID.apps.plus/com.Google.androID.apps.photos.phone.SetWallpaperActivity}: java.lang.IllegalArgumentException: Image URI must be of the content scheme type
这是我用来让用户设置壁纸的代码:
String uriString = c.getString(c.getColumnIndex(DownloadManager.ColUMN_LOCAL_URI));Uri u = Uri.parse(uriString);Intent wall_intent = new Intent(Intent.ACTION_ATTACH_DATA);wall_intent.setDataAndType(u,"image/*");wall_intent.putExtra("mimeType","image/*");Intent chooserIntent = Intent.createChooser(wall_intent,"Set As");chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { context.startActivity(chooserIntent);}
uriString的位置是:
file:///storage/emulated/0/Pictures/Rockstar/image.jpg解决方法 我弄清楚了.它是这里找到的代码的组合: Converting android image URI并在下载后扫描媒体文件.
所以在文件完成下载后,我得到了路径并执行以下 *** 作:
String uriString = c.getString(c.getColumnIndex(DownloadManager.ColUMN_LOCAL_URI));//Update the SystemUri u = Uri.parse(uriString); context.sendbroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_file,u));//Get the abs path using a file,this is important file wallpaper_file = new file(u.getPath());Uri contentURI = getimageContentUri(context,wallpaper_file.getabsolutePath());
出于某种原因启动媒体扫描仪,新建文件,获取绝对路径很重要,我不确定为什么,但我不能再花这么多时间了!
从文件URI转换为内容URI的方法如下(取自链接的StackOver流程帖子:
public static Uri getimageContentUri(Context context,String absPath) { Log.v(TAG,"getimageContentUri: " + absPath); Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[] { MediaStore.Images.Media._ID },MediaStore.Images.Media.DATA + "=? ",new String[] { absPath },null); if (cursor != null && cursor.movetoFirst()) { int ID = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID)); return Uri.withAppendedpath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,Integer.toString(ID)); } else if (!absPath.isEmpty()) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA,absPath); return context.getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values); } else { return null; }}
也许这将有助于未来的人.
总结以上是内存溢出为你收集整理的android – 从文件URI获取内容URI?全部内容,希望文章能够帮你解决android – 从文件URI获取内容URI?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)