- 浏览: 243031 次
- 性别:
- 来自: 贵州
文章分类
最新评论
-
夏文权:
增加事务处理
spring + mybatis 框架 -
vs0029:
这也太小儿科了
android ViewPager 和 listview的共存问题 -
于自水:
大神,同上啊,没解决啊!appid跟1楼的一样,我也郁闷好几天 ...
android 微信分享 -
lihaolee:
前辈你好,我最近正在做微信分享,自己申请了appid,包名签名 ...
android 微信分享 -
410812571:
你就是救世主。
android listview 加载图片错乱(错位)
写道
从百度转载
一种方式:解析媒体文件 android.media.MediaMetadataRetriever是Andorid内部的用于抽取视频/音频包含的标题、格式、艺术家等信息工具类. //示例 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY); //时长 String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); //艺术家 String artist = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); //标题 String title = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); ------------其它可以抽取的信息--------- public static final int METADATA_KEY_CD_TRACK_NUMBER = 0; public static final int METADATA_KEY_ALBUM = 1; public static final int METADATA_KEY_ARTIST = 2; public static final int METADATA_KEY_AUTHOR = 3; public static final int METADATA_KEY_COMPOSER = 4; public static final int METADATA_KEY_DATE = 5; public static final int METADATA_KEY_GENRE = 6; public static final int METADATA_KEY_TITLE = 7; public static final int METADATA_KEY_YEAR = 8; public static final int METADATA_KEY_DURATION = 9; public static final int METADATA_KEY_NUM_TRACKS = 10; public static final int METADATA_KEY_IS_DRM_CRIPPLED = 11; public static final int METADATA_KEY_CODEC = 12; public static final int METADATA_KEY_RATING = 13; public static final int METADATA_KEY_COMMENT = 14; public static final int METADATA_KEY_COPYRIGHT = 15; public static final int METADATA_KEY_BIT_RATE = 16; public static final int METADATA_KEY_FRAME_RATE = 17; public static final int METADATA_KEY_VIDEO_FORMAT = 18; public static final int METADATA_KEY_VIDEO_HEIGHT = 19; public static final int METADATA_KEY_VIDEO_WIDTH = 20; public static final int METADATA_KEY_WRITER = 21; 二种方式:读取媒体文件数据库: 创建工具包:com.sky_dreaming.tools.media.provider 编写媒体信息封装类:MediaInfo.java package com.sky_dreaming.tools.media.provider; import java.io.UnsupportedEncodingException; import android.graphics.Bitmap; /** * Media info beans * * */ public class MediaInfo { /** * play total time */ private int playDuration = 0; /** * song name */ private String mediaName = ""; /** * album name */ private String mediaAlbum = ""; /** * artist name */ private String mediaArtist = ""; /** * mYear */ private String mediaYear = ""; /** * fileName */ private String mFileName = ""; /** * mFileType */ private String mFileType = ""; /** * mFileSize */ private String mFileSize = ""; /** * mFilePath */ private String mFilePath = ""; public Bitmap getmBitmap() { return mBitmap; } public void setmBitmap(Bitmap mBitmap) { this.mBitmap = mBitmap; } private Bitmap mBitmap = null; /** * getPlayDuration * * @return */ public int getPlayDuration() { return playDuration; } /** * setPlayDuration * * @param playDuration */ public void setPlayDuration(int playDuration) { this.playDuration = playDuration; } /** * getMediaName * * @param playDuration */ public String getMediaName() { return mediaName; } /** * setMediaName * * @param playDuration */ public void setMediaName(String mediaName) { try { mediaName =new String (mediaName.getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.mediaName = mediaName; } /** * getMediaAlbum * * @param playDuration */ public String getMediaAlbum() { return mediaAlbum; } /** * setMediaAlbum * * @param playDuration */ public void setMediaAlbum(String mediaAlbum) { try { mediaAlbum =new String (mediaAlbum.getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.mediaAlbum = mediaAlbum; } /** * getMediaArtist * * @param playDuration */ public String getMediaArtist() { return mediaArtist; } /** * setMediaArtist * * @param playDuration */ public void setMediaArtist(String mediaArtist) { try { mediaArtist =new String (mediaArtist.getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.mediaArtist = mediaArtist; } /** * getMediaYear * * @param playDuration */ public String getMediaYear() { return mediaYear; } /** * setMediaYear * * @param playDuration */ public void setMediaYear(String mediaYear) { this.mediaYear = mediaYear; } /** * getmFileName * * @param playDuration */ public String getmFileName() { return mFileName; } /** * setmFileName * * @param playDuration */ public void setmFileName(String mFileName) { this.mFileName = mFileName; } /** * getmFileType * * @param playDuration */ public String getmFileType() { return mFileType; } /** * setmFileType * * @param playDuration */ public void setmFileType(String mFileType) { this.mFileType = mFileType; } /** * getmFileSize * * @param playDuration */ public String getmFileSize() { return mFileSize; } /** * setmFileSize * * @param playDuration */ public void setmFileSize(String mFileSize) { this.mFileSize = mFileSize; } /** * getmFilePath * * @param playDuration */ public String getmFilePath() { return mFilePath; } /** * setmFilePath * * @param playDuration */ public void setmFilePath(String mFilePath) { this.mFilePath = mFilePath; } } 编写数据提供工具类:MediaInfoProvider package com.sky_dreaming.tools.media.provider; import java.io.File; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; import android.util.Log; import android.widget.Toast; /** * tools to get media file info * * */ public class MediaInfoProvider { /** * context */ private Context mContext = null; /** * data path */ private static final String dataPath = "/mnt"; /** * query column */ private static final String[] mCursorCols = new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.YEAR, MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.SIZE, MediaStore.Audio.Media.DATA }; /** * MediaInfoProvider * @param context */ public MediaInfoProvider(Context context) { this.mContext = context; } /** * get the media file info by path * @param filePath * @return */ public MediaInfo getMediaInfo(String filePath) { /* check a exit file */ File file = new File(filePath); if (file.exists()) { Toast.makeText(mContext, "sorry, the file is not exit!", Toast.LENGTH_SHORT); } /* create the query URI, where, selectionArgs */ Uri Media_URI = null; String where = null; String selectionArgs[] = null; if (filePath.startsWith("content://media/")) { /* content type path */ Media_URI = Uri.parse(filePath); where = null; selectionArgs = null; } else { /* external file path */ if(filePath.indexOf(dataPath) < 0) { filePath = dataPath + filePath; } Media_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; where = MediaColumns.DATA + "=?"; selectionArgs = new String[] { filePath }; } /* query */ Cursor cursor = mContext.getContentResolver().query(Media_URI, mCursorCols, where, selectionArgs, null); if (cursor == null || cursor.getCount() == 0) { return null; } else { cursor.moveToFirst(); MediaInfo info = getInfoFromCursor(cursor); printInfo(info); return info; } } /** * get the media info beans from cursor * @param cursor * @return */ private MediaInfo getInfoFromCursor(Cursor cursor) { MediaInfo info = new MediaInfo(); /* file name */ if(cursor.getString(1) != null) { info.setmFileName(cursor.getString(1)); } /* media name */ if(cursor.getString(2) != null) { info.setMediaName(cursor.getString(2)); } /* play duration */ if(cursor.getString(3) != null) { info.setPlayDuration(cursor.getInt(3)); } /* artist */ if(cursor.getString(4) != null) { info.setMediaArtist(cursor.getString(4)); } /* album */ if(cursor.getString(5) != null) { info.setMediaAlbum(cursor.getString(5)); } /* media year */ if (cursor.getString(6) != null) { info.setMediaYear(cursor.getString(6)); } else { info.setMediaYear("undefine"); } /* media type */ if(cursor.getString(7) != null) { info.setmFileType(cursor.getString(7).trim()); } /* media size */ if (cursor.getString(8) != null) { float temp = cursor.getInt(8) / 1024f / 1024f; String sizeStr = (temp + "").substring(0, 4); info.setmFileSize(sizeStr + "M"); } else { info.setmFileSize("undefine"); } /* media file path */ if (cursor.getString(9) != null) { info.setmFilePath(cursor.getString(9)); } return info; } /** * print media info * @param info */ private void printInfo(MediaInfo info) { // TODO Auto-generated method stub Log.i("playDuration","" + info.getPlayDuration()); Log.i("mediaName","" + info.getMediaName()); Log.i("mediaAlbum","" + info.getMediaAlbum()); Log.i("mediaArtist","" + info.getMediaArtist()); Log.i("mediaYear","" + info.getMediaYear()); Log.i("fileName","" + info.getmFileName()); Log.i("fileType","" + info.getmFileType()); Log.i("fileSize","" + info.getmFileSize()); Log.i("filePath","" + info.getmFilePath()); } } 可以避免乱码
相关推荐
传智播客_Andorid_20天精通Android开发视频_第14天视频_视频_15_MediaPlayer播放网络音频.avi
首先,需要配置`AudioRecord`,包括采样率、通道数、音频格式等。然后,启动录音,读取音频数据,并将其保存到文件。Android还提供了`MediaRecorder`类,它提供了一种更简单的录音方式,但在这个DEMO中可能更侧重于...
【标题】"传智播客_Andorid_Android基础视频video_第一天修"指的是一个由传智播客教育机构推出的Android基础知识教学视频课程的第一部分。这个系列可能旨在帮助初学者或者对Android编程有一定兴趣的人建立坚实的...
在本资源中,“传智播客_Andorid_Android项目手机卫士视频video_day09视频.rar”是一个针对Android开发的教程,特别是关于构建“手机卫士”项目的第九天教学内容。这个压缩包可能包含了多个视频文件,这些文件通常会...
传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_07_bindservice开启服务.avi
传智播客_Andorid_Android基础视频video_下载必看.doc
这个过程涉及到多个关键步骤,包括请求权限、启动相机应用、读取相册、显示图片以及执行裁剪操作。下面我们将详细探讨这些知识点。 1. **权限管理**: 在Android 6.0(API级别23)及更高版本,系统实行了运行时...
在本课程"传智播客_Andorid_Android项目手机卫士视频video_day07"中,我们将深入探讨Android应用程序开发的关键技术,特别是在构建类似“手机卫士”这样的实用工具应用时所需的知识点。该课程可能包括多个视频教程,...
JNI在Android中的应用广泛,包括性能优化、调用C/C++库、访问硬件设备以及实现某些特定功能等。"传智播客_Andorid_JNI视频_day01视频"很可能是对这一主题的初级教程,旨在帮助开发者入门JNI编程。 JNI的核心是提供...
FFmpeg 是一个强大的开源命令行工具,用于处理各种多媒体文件,包括视频、音频、图片等。在Android平台上,FFmpeg可以被集成到应用程序中,实现视频的解析、转码、剪辑等多种功能。本篇文章将深入探讨如何在Android...
1. **布局设计**:XML布局文件描述了各个界面元素的位置和样式,可能包括主页面、详细信息页、设置页等。 2. **自定义控件**:为了实现独特效果,源码可能包含了自定义View或自定义Adapter,如天气图标、滑动刷新...
"传智播客_Andorid_智慧北京视频_Day05视频" 这个标题表明这是一个关于Android开发的教育课程,由知名的IT培训机构“传智播客”提供。主题是“智慧北京”,可能涉及到如何利用Android技术为北京的城市智能化服务。...
在本课程"传智播客_Andorid_20天精通Android开发视频_第10天视频"中,我们深入探讨了Android应用开发的核心概念和技术。这个压缩包包含的资源是第10天的视频教程,是整个学习路径中的一个重要阶段。通过这天的学习,...
Intent分为显式Intent和隐式Intent,前者指定要启动的Activity,后者则基于Action、Category等信息匹配能处理请求的Activity。 Service是运行在后台的组件,不提供用户界面,可以长时间执行任务。服务有两种启动...
"传智播客_Andorid_智慧北京视频_Day06视频.zip" 描述部分提供了文件格式信息,这是一个ZIP压缩包,里面包含的是“Day06视频”。这通常意味着这些视频是连续教学的一部分,存储在一个压缩文件中以便于下载和管理。...