Android工具类(时间格式化、获取地址)
2017-05-02 16:19
357 查看
Android工具类
时间格式化输出(ms -> hh:mm:ss)及Android4.4及以上根据系统返回的data获取图片及视频地址的方法:import android.annotation.TargetApi; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; /** * Created by admin on 2017/5/2. * 系统工具类 */ public class SystemUtil { /** * 获取媒体文件的播放时间,格式化输出 * * @param ms 毫秒 * @return 格式化后的结果: hh:mm:ss */ public static String getMediaTime(int ms) { int hour, minute, second; //计算小时 1h = 3600_000 ms hour = ms / 3600_000; //计算分钟 1min = 60_000 ms minute = (ms - hour * 3600_000) / 60_000; //计算秒钟 1s = 1000 ms second = (ms - hour * 3600_000 - minute * 60_000) / 1000; //格式化输出,补零操作 String sHour, sMinute, sSecond; if (hour < 10) { sHour = "0" + String.valueOf(hour); } else { sHour = String.valueOf(hour); } if (minute < 10) { sMinute = "0" + String.valueOf(minute); } else { sMinute = String.valueOf(minute); } if (second < 10) { sSecond = "0" + String.valueOf(second); } else { sSecond = String.valueOf(second); } return sHour + ":" + sMinute + ":" + sSecond; } /** * <br>功能简述:4.4及以上获取图片及视频地址的方法 * <br>功能详细描述: * <br>注意: * * @param context 上下文 * @param uri 待解析的 Uri * @return 真实路径 */ @TargetApi(Build.VERSION_CODES.KITKAT) public static String getPath(final Context context, final Uri uri) { //判断是否高于版本4.4 final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; //DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { //ExternalStorageProvider if (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]; } } //DownloadsProvider else if (isDownloadsDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId)); return getDataColumn(context, contentUri, null, null); } //MediaProvider else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("iamge".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 the remote address if (isGooglePhotosUri(uri)) { return uri.getLastPathSegment(); } else { return getDataColumn(context, uri, null, nu 4000 ll); } } //File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } 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 index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } return null; } /** * @param uri The Uri to check. * @return Whether the Uri authority is ExtermalStorageProvider */ 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.media.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos */ public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); } }
使用示例:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); //设置类型,例:image/* video/* /*取得视频资源后返回(intent, 1)*/ startActivityForResult(intent, VIDEO_REQUEST);
打开系统文档管理选择文件,返回结果。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { try { super.onActivityResult(requestCode, resultCode, data); if (requestCode == VIDEO_REQUEST && data != null) { //进入播放页面 Intent intent = new Intent(); intent.setClass(MainActivity.this, VLCPlayerActivity.class); intent.putExtra("VideoType", "Local"); intent.putExtra("VideoUrl", SystemUtil.getPath(MainActivity.this, data.getData())); startActivity(intent); } } catch (Exception e) { Log.d("Local", e.toString()); } }
根据返回的data通过SystemUtil.getPath()获取String格式的地址
相关文章推荐
- android 字符串工具类 格式化日期字符串 拼接数组 判断字符串是否为空 转换时间显示 转换文件大小 获取中英文字符个数
- [置顶] Android开发之java代码中获取当前系统的时间工具类
- android 获取时间的工具类
- Android 获取当天零点的毫秒值并将时间格式化
- android 时间获取以及时间格式化
- Android在代码中获取当前系统的时间并格式化
- 生成本地文件/格式化时间/获取时间差 工具类
- Android 获取当天零点的毫秒值并将时间格式化
- android 时间获取以及时间格式化
- Android工具类之时间日期格式化代码大全
- android 时间获取以及时间格式化
- Android 最简单的获取系统时间并且格式化的方法
- android常用工具类 获取本机ip地址
- Android 获取年月日时分秒 格式化指定时间字符串
- Android清除外部和内部缓存,数据库,SharedPreference,指定路径下的文件,获取缓存大小,格式化储存单位工具类
- android 获取日期/时间格式化及注意
- Android工具类之时间日期格式化代码大全
- 获取时间/日期工具类:格式化日期,获取当前时间,指定时间,上一月,指定时间的毫秒数
- android 时间获取以及时间格式化
- android 时间获取以及时间格式化