Android编程实现获取多媒体库视频、音频、图片的方法

本文实例讲述了Android编程实现获取多媒体库视频、音频、图片的方法。分享给大家供大家参考,具体如下:

从媒体库中查找音频、视频、图片文件的相关信息,并获取视频、图片、专辑图片的缩略图

和一些文件操作

package com.uwatch.swconnectservice.util;

import java.io.File;

import java.io.FileDescriptor;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import android.content.ContentResolver;

import android.content.ContentUris;

import android.content.Context;

import android.content.Intent;

import android.database.Cursor;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.media.MediaScannerConnection;

import android.media.MediaScannerConnection.OnScanCompletedListener;

import android.media.ThumbnailUtils;

import android.net.Uri;

import android.os.ParcelFileDescriptor;

import android.provider.MediaStore;

import android.util.Log;

public class FileOper {

public static final String [] IMAGE_COLUMN = {MediaStore.Images.Media.DATA,MediaStore.Images.Media.SIZE};

public static final String [] AUDIO_COLUMN = {MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.DURATION,

MediaStore.Audio.Media._ID,MediaStore.Audio.Media.ALBUM_ID};

public static final String [] VIDEO_COLUMN = {MediaStore.Video.Media.DATA,MediaStore.Video.Media.SIZE,MediaStore.Audio.Media.DURATION};

private static final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");

///创建文件夹

public static void createFile(String path){

File file = new File(path);

if(!file.exists()){

file.mkdirs();

}

}

//删除文件,并刷新媒体库

public static void deleteFile(String path,final Context context,final int type){

File file = new File(path);

if(file.exists()){

if(file.isFile()){

file.delete();

}else if(file.isDirectory()){

deleteDirs(file);

}

}

///监听媒体库刷新情况

MediaScannerConnection.scanFile(context, new String[]{"/storage/sdcard0"}, null,new OnScanCompletedListener(){

@Override

public void onScanCompleted(String path, Uri uri) {////刷新完后做相应处理

if(type == 1){

String lists = FileOper.getVideoFile(context);

SentMessage.SendToBluetooth(context, SentMessage.WATCH_PATH, lists);

}else if(type == 2){

String lists = FileOper.getAudioFiles(context);

SentMessage.SendToBluetooth(context, SentMessage.WATCH_PATH, lists);

}else if(type == 3){

String lists = FileOper.getImageFiles(context);

SentMessage.SendToBluetooth(context, SentMessage.WATCH_PATH, lists);

}

}

});/////

}

public static void deleteDirs(File file){

if(file.isDirectory()){

File[]files = file.listFiles();

if(files == null || files.length == 0){

file.delete();

}else {

for(int i = 0;i<files.length;i++){

if(files[i].isDirectory()){

deleteDirs(files[i]);

}else{

files[i].delete();

}

}

}

file.delete();

}

}

///获取相应目录下的文件、文件夹

public static String getFileInfoList(String path) {

File file = new File(path);

String lists = "";

File[] files = file.listFiles();

if(files != null){

if(files.length>0){

for(int i = 0;i<files.length;i++){

if(file.exists()){

if(files[i].isFile()){

lists = lists+"1,"+Util.encodeBase64(files[i].getName())+","+Util.encodeBase64(files[i].getAbsolutePath())+","+getFileSize(files[i])+"}";

}else if(files[i].isDirectory()){

lists = lists+"0,"+Util.encodeBase64(files[i].getName())+","+Util.encodeBase64(files[i].getAbsolutePath())+",0}";

}

}

}

}

}

return lists;

}

////查询视频文件

public static String getVideoFile(Context context){

ContentResolver resolver = context.getContentResolver();

Cursor cursor = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, VIDEO_COLUMN, null, null, null);

String tp = "video}";

if(cursor != null){

if(cursor.moveToFirst()){

String path = cursor.getString(cursor.getColumnIndex(VIDEO_COLUMN[0]));

String size = cursor.getString(cursor.getColumnIndex(VIDEO_COLUMN[1]));

String duration = cursor.getString(cursor.getColumnIndex(VIDEO_COLUMN[2]));

//String thumbnail = Util.bitmaptoString(getVideoThumbnail(path, 96, 96, MediaStore.Images.Thumbnails.MICRO_KIND));

//tp = tp+Util.encodeBase64(path)+","+size+","+duration+","+thumbnail+"}";

tp = tp+Util.encodeBase64(path)+","+size+","+duration+"}";

while(cursor.moveToNext()){

path = cursor.getString(cursor.getColumnIndex(VIDEO_COLUMN[0]));

size = cursor.getString(cursor.getColumnIndex(VIDEO_COLUMN[1]));

duration = cursor.getString(cursor.getColumnIndex(VIDEO_COLUMN[2]));

//tp = tp+Util.encodeBase64(path)+","+size+","+duration+","+thumbnail+"}";

tp = tp+Util.encodeBase64(path)+","+size+","+duration+"}";

}

}

}

return tp;

}

//查询音频文件

public static String getAudioFiles(Context context){

ContentResolver resolver = context.getContentResolver();

Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, AUDIO_COLUMN, null, null, null);

String tp = "audio}";

if(cursor != null){

if(cursor.moveToFirst()){

String path = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[0]));

String size = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[1]));

String duration = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[2]));

/*String id = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[3]));

String albumid = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[4]));

Bitmap bt = getMusicBitemp(context,Long.valueOf(id),Long.valueOf(albumid));

String thumbnail = "audio";

if(bt != null){

thumbnail = Util.bitmaptoString(getAudioThumbnail(bt, 96, 96));

}

tp = tp+Util.encodeBase64(path)+","+size+","+duration+","+thumbnail+"}";*/

tp = tp+Util.encodeBase64(path)+","+size+","+duration+"}";

while(cursor.moveToNext()){

path = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[0]));

size = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[1]));

duration = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[2]));

/*id = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[3]));

albumid = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[4]));

bt = getMusicBitemp(context,Long.valueOf(id),Long.valueOf(albumid));

thumbnail = "audio";

if(bt != null){

thumbnail = Util.bitmaptoString(getAudioThumbnail(bt, 96, 96));

}

tp = tp+Util.encodeBase64(path)+","+size+","+duration+","+thumbnail+"}";*/

tp = tp+Util.encodeBase64(path)+","+size+","+duration+"}";

}

}

}

return tp;

}

////查询图片

public static String getImageFiles(Context context){

ContentResolver resolver = context.getContentResolver();

Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_COLUMN, null, null, null);

String tp = "image}";

if(cursor != null){

if(cursor.moveToFirst()){

String path = cursor.getString(cursor.getColumnIndex(IMAGE_COLUMN[0]));

String size = cursor.getString(cursor.getColumnIndex(IMAGE_COLUMN[1]));

/*String thumbnail = Util.bitmaptoString(getImageThumbnail(path, 96, 96));

tp = tp+Util.encodeBase64(path)+","+size+","+thumbnail+"}";*/

tp = tp+Util.encodeBase64(path)+","+size+"}";

while(cursor.moveToNext()){

path = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[0]));

size = cursor.getString(cursor.getColumnIndex(AUDIO_COLUMN[1]));

/*thumbnail = Util.bitmaptoString(getImageThumbnail(path, 96, 96));

tp = tp+Util.encodeBase64(path)+","+size+","+thumbnail+"}";*/

tp = tp+Util.encodeBase64(path)+","+size+"}";

}

}

}

return tp;

}

///获取音频文件专辑图片

public static Bitmap getMusicBitemp(Context context, Long songid,

Long albumid) {

Bitmap bm = null;

if (albumid < 0 && songid < 0) {

throw new IllegalArgumentException(

"Must specify an album or a song id");

}

try {

if (albumid < 0) {

Uri uri = Uri.parse("content://media/external/audio/media/"

+ songid + "/albumart");

ParcelFileDescriptor pfd = context.getContentResolver()

.openFileDescriptor(uri, "r");

if (pfd != null) {

FileDescriptor fd = pfd.getFileDescriptor();

bm = BitmapFactory.decodeFileDescriptor(fd);

}

} else {

Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid);

ParcelFileDescriptor pfd = context.getContentResolver()

.openFileDescriptor(uri, "r");

if (pfd != null) {

FileDescriptor fd = pfd.getFileDescriptor();

bm = BitmapFactory.decodeFileDescriptor(fd);

} else {

return null;

}

}

} catch (FileNotFoundException ex) {

return null;

}

return bm;

}

////获取图片缩略图

public static Bitmap getImageThumbnail(String imagePath, int width, int height) {

Bitmap bitmap = null;

BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

bitmap = BitmapFactory.decodeFile(imagePath, options);

options.inJustDecodeBounds = false;

int h = options.outHeight;

int w = options.outWidth;

int beWidth = w / width;

int beHeight = h / height;

int be = 1;

if (beWidth < beHeight) {

be = beWidth;

} else {

be = beHeight;

}

if (be <= 0) {

be = 1;

}

options.inSampleSize = be;

bitmap = BitmapFactory.decodeFile(imagePath, options);

bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,

ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

return bitmap;

}

////获取音频专辑图片的缩略图

public static Bitmap getAudioThumbnail(Bitmap bitmap, int width, int height) {

BitmapFactory.Options options = new BitmapFactory.Options();

int h = bitmap.getHeight();

int w = bitmap.getWidth();

int beWidth = w / width;

int beHeight = h / height;

int be = 1;

if (beWidth < beHeight) {

be = beWidth;

} else {

be = beHeight;

}

if (be <= 0) {

be = 1;

}

bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,

ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

return bitmap;

}

/////获取视频文件缩略图

public static Bitmap getVideoThumbnail(String videoPath, int width, int height,

int kind) {

Bitmap bitmap = null;

bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);

System.out.println("w"+bitmap.getWidth());

System.out.println("h"+bitmap.getHeight());

bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,

ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

return bitmap;

}

///获取文件大小

public static int getFileSize(File file){

InputStream is=null;

int size=0;

try {

is=new FileInputStream(file);

size= is.available();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(is!=null){

try {

is.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

return size;

}

}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作json格式数据技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

以上是 Android编程实现获取多媒体库视频、音频、图片的方法 的全部内容, 来源链接: utcz.com/z/324514.html

回到顶部