您的位置:首页 > 移动开发 > Android开发

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 图片 视频