当前位置: 首页 > news >正文

制作网站编程公众号二次开发

制作网站编程,公众号二次开发,给个网站能用的2022,厦门网站建设厦门前言最近在工作的过程中#xff0c;遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。因为需求的原因#xff0c;要求拍照上传或者从相册中选择图片上传#xff0c;而且图片是需要经过压缩的#xff0c;大小不能超过2M。很快#xff0c;拍照的这部分就搞定…前言最近在工作的过程中遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。因为需求的原因要求拍照上传或者从相册中选择图片上传而且图片是需要经过压缩的大小不能超过2M。很快拍照的这部分就搞定了。那么相册中选择图片的也是一样的道理应该也是轻松解决了。至于选择图片的代码如下所示intent new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType(image/*);startActivityForResult(intent, FILE_CHOOSER_RESULT_CODE);之后就是在 onActivityResult(int requestCode, int resultCode, Intent data)中获取到 URI 。最关键的来了如果通过 URI 来获取文件呢比如现在 URI 为 content://media/extenral/images/media/17766 而我们需要得到对应的文件路径。if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {Cursor cursor context.getContentResolver().query(uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null);if (cursor ! null) {if (cursor.moveToFirst()) {int columnIndex cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);if (columnIndex -1) {path cursor.getString(columnIndex);}}cursor.close();}return path;}原以为万事大吉但是在 Android 4.4 及以上的手机上一试发现根本不行。因为在 Android 4.4 及以上的手机上获取到的 URI 变成了 content://com.android.providers.media.documents/document/image%3A235700 和之前我们预期的不是同一种类型。这是因为在 Android 4.4 及以上的机型使用了 DocumentUri 来代表获取到文件的 URI 。所以我们又要对于 DocumentUri 进行适配。if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {if (DocumentsContract.isDocumentUri(context, uri)) {if (isExternalStorageDocument(uri)) {// ExternalStorageProviderfinal String docId DocumentsContract.getDocumentId(uri);final String[] split docId.split(:);final String type split[0];if (primary.equalsIgnoreCase(type)) {path Environment.getExternalStorageDirectory() / split[1];return path;}} else if (isDownloadsDocument(uri)) {// DownloadsProviderfinal String id DocumentsContract.getDocumentId(uri);final Uri contentUri ContentUris.withAppendedId(Uri.parse(content://downloads/public_downloads),Long.valueOf(id));path getDataColumn(context, contentUri, null, null);return path;} else if (isMediaDocument(uri)) {// MediaProviderfinal 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]};path getDataColumn(context, contentUri, selection, selectionArgs);return path;}}}private 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;}private static boolean isExternalStorageDocument(Uri uri) {return com.android.externalstorage.documents.equals(uri.getAuthority());}private static boolean isDownloadsDocument(Uri uri) {return com.android.providers.downloads.documents.equals(uri.getAuthority());}private static boolean isMediaDocument(Uri uri) { return com.android.providers.media.documents.equals(uri.getAuthority());}好了上面的代码还是容易看懂的。这下就解决了对于 Android 4.4 及以上的机型适配。顺便把以 file:// 开头的 URI 适配也补上if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {path uri.getPath();return path;}完美了下面就贴出完整的 FileUtils 代码拿去用吧public final class FileUtils {public static String getFilePathByUri(Context context, Uri uri) {String path null;// 以 file:// 开头的if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {path uri.getPath();return path;}// 以 content:// 开头的比如 content://media/extenral/images/media/17766if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()) Build.VERSION.SDK_INT Build.VERSION_CODES.KITKAT) {Cursor cursor context.getContentResolver().query(uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null);if (cursor ! null) {if (cursor.moveToFirst()) {int columnIndex cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);if (columnIndex -1) {path cursor.getString(columnIndex);}}cursor.close();}return path;}// 4.4及之后的 是以 content:// 开头的比如 content://com.android.providers.media.documents/document/image%3A235700if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()) Build.VERSION.SDK_INT Build.VERSION_CODES.KITKAT) {if (DocumentsContract.isDocumentUri(context, uri)) {if (isExternalStorageDocument(uri)) {// ExternalStorageProviderfinal String docId DocumentsContract.getDocumentId(uri);final String[] split docId.split(:);final String type split[0];if (primary.equalsIgnoreCase(type)) {path Environment.getExternalStorageDirectory() / split[1];return path;}} else if (isDownloadsDocument(uri)) {// DownloadsProviderfinal String id DocumentsContract.getDocumentId(uri);final Uri contentUri ContentUris.withAppendedId(Uri.parse(content://downloads/public_downloads),Long.valueOf(id));path getDataColumn(context, contentUri, null, null);return path;} else if (isMediaDocument(uri)) {// MediaProviderfinal 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]};path getDataColumn(context, contentUri, selection, selectionArgs);return path;}}}return null;}private 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;}private static boolean isExternalStorageDocument(Uri uri) {return com.android.externalstorage.documents.equals(uri.getAuthority());}private static boolean isDownloadsDocument(Uri uri) {return com.android.providers.downloads.documents.equals(uri.getAuthority());}private static boolean isMediaDocument(Uri uri) { return com.android.providers.media.documents.equals(uri.getAuthority());}}讲完了讲完了。总结以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作具有一定的参考学习价值如果有疑问大家可以留言交流谢谢大家对脚本之家的支持。
http://www.yutouwan.com/news/36700/

相关文章:

  • app手机端电子商务网站功能静安网站建设公司
  • 活动策划公司网站高端美食网站建设
  • 网站建设调研问卷wordpress图片数据库
  • 建设企业网站e路护航官网下载wordpress图片乱码
  • 网址跳转网站襄阳百度开户
  • 网站制作公司 首推万维科技网站平均停留时间
  • 六安公司做网站试描述一下网站建设的基本流程图
  • 农产品网络营销模式福州百度快速优化
  • 陕西网站推广公司分销渠道管理
  • 成品源码网站asp.net新建网站
  • 跨境外贸网抖音seo优化怎么做
  • 如何做网站页面赚钱网站关键词 查询
  • 什么语言建手机网站培训网站
  • 网站产品整合推广网站制作产品资料
  • 网站制作与美育融合酒店机票搜索量暴涨
  • 做网站外包公司名称大全wordpress数据统计
  • 提高网站收录软件开发流程八个步骤模板
  • 微商怎么做网站阿里云官方网站
  • 做网站吉林上海建筑设计院招聘
  • 南宁本地网站有哪些阿里云搭建公司网站
  • 网站违规关键词长沙房地产价格
  • 电线电缆技术支持中山网站建设wordpress新用户提醒
  • 番禺网站建设wwiw网站开发培训
  • 平面设计可以自学吗优化方案范文
  • 大型网站开发教程wordpress 标签 中文
  • 佛山做外贸网站服务自己做的网站显示不安全怎么回事
  • 室内设计网站案例wordpress 模拟数据库
  • 站酷网入口龙口市最新公告
  • 怎么注册网站名称深圳ui设计师工资
  • 云阳一平米网站建设网络营销是干嘛的