如何扫描出Android系统媒体库中视频文件

如何扫描出Android系统媒体库中视频文件,第1张

android系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息:

public static List<VideoInfo> sysVideoList = null;// 视频信息集合

sysVideoList = new ArrayList<VideoInfo>();

setVideoList();

private void setVideoList() {

// MediaStoreVideoThumbnailsDATA:视频缩略图的文件路径

String[] thumbColumns = { MediaStoreVideoThumbnailsDATA,

MediaStoreVideoThumbnailsVIDEO_ID };

// MediaStoreVideoMediaDATA:视频文件路径;

// MediaStoreVideoMediaDISPLAY_NAME : 视频文件名,如 testVideomp4

// MediaStoreVideoMediaTITLE: 视频标题 : testVideo

String[] mediaColumns = { MediaStoreVideoMedia_ID,

MediaStoreVideoMediaDATA, MediaStoreVideoMediaTITLE,

MediaStoreVideoMediaMIME_TYPE,

MediaStoreVideoMediaDISPLAY_NAME };

cursor = managedQuery(MediaStoreVideoMediaEXTERNAL_CONTENT_URI,

mediaColumns, null, null, null);

if(cursor==null){

ToastmakeText(SystemVideoChooseActivitythis, "没有找到可播放视频文件", 1)show();

return;

}

if (cursormoveToFirst()) {

do {

VideoInfo info = new VideoInfo();

int id = cursorgetInt(cursor

getColumnIndex(MediaStoreVideoMedia_ID));

Cursor thumbCursor = managedQuery(

MediaStoreVideoThumbnailsEXTERNAL_CONTENT_URI,

thumbColumns, MediaStoreVideoThumbnailsVIDEO_ID

+ "=" + id, null, null);

if (thumbCursormoveToFirst()) {

infosetThumbPath(thumbCursorgetString(thumbCursor

getColumnIndex(MediaStoreVideoThumbnailsDATA)));

}

infosetPath(cursorgetString(cursor

getColumnIndexOrThrow(MediaStoreVideoMediaDATA)));

infosetTitle(cursorgetString(cursor

getColumnIndexOrThrow(MediaStoreVideoMediaTITLE)));

infosetDisplayName(cursorgetString(cursor

getColumnIndexOrThrow(MediaStoreVideoMediaDISPLAY_NAME)));

LogUtillog(TAG, "DisplayName:"+infogetDisplayName());

infosetMimeType(cursor

getString(cursor

getColumnIndexOrThrow(MediaStoreVideoMediaMIME_TYPE)));

sysVideoListadd(info);

} while (cursormoveToNext());

}

}

有一点需要注意的是:系统的媒体库并不会在我们添加视频文件后自动更新,我们如何去手动扫描媒体库,或者重启系统才能从媒体库中得到更新的视频文件:

sendBroadcast(new Intent(IntentACTION_MEDIA_MOUNTED, Uriparse("file://"

+ EnvironmentgetExternalStorageDirectory())));

Android自带的音乐播放器中,在获取音乐文件信息的时候是通过扫描得到相关信息的。扫描时使用扫描器MediaScanner完成。

Android系统提供了MediaScanner、MediaProvider、MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件,如audio、video、等,将相应的信息放到定义好的数据库表格中。在这个程序中,我们不需要关心如何去扫描手机中的文件,只要了解如何查询和使用这些信息就可以了。

MediaStore中定义了一系列的数据表格,通过Android ContentResolver提供的查询接口,我们可以得到各种需要的信息。下面我们重点介绍查询SD卡上的音乐文件信息。

先来了解一下ContentResolver的查询接口:

Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

Uri:指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数。

Projection: 指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。Null则返回所有信息。

selection: 指定查询条件

selectionArgs:参数selection里有 ?这个符号是,这里可以以实际值代替这个问号。如果selection这个没有?的话,那么这个String数组可以为null。

SortOrder:指定查询结果的排列顺序

下面的命令将返回所有在外部存储卡上的音乐文件的信息:

Cursor cursor = query(MediaStoreAudioMediaEXTERNAL_CONTENT_URI, null, null, null, MediaStoreAudioMediaDEFAULT_SORT_ORDER);

得到cursor后,我们可以调用Cursor的相关方法具体的音乐信息:

歌曲ID:MediaStoreAudioMedia_ID

Int id = cursorgetInt(cursorgetColumnIndexOrThrow(MediaStoreAudioMedia_ID));

歌曲的名称:MediaStoreAudioMediaTITLE

String tilte = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaTITLE));

歌曲的专辑名:MediaStoreAudioMediaALBUM

String album = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaALBUM));

歌曲的歌手名:MediaStoreAudioMediaARTIST

String artist = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaARTIST));

歌曲文件的路径:MediaStoreAudioMediaDATA

String url = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaDATA));

歌曲的总播放时长:MediaStoreAudioMediaDURATION

Int duration = cursorgetInt(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaDURATION));

歌曲文件的大小:MediaStoreAudioMediaSIZE

Int size = cursorgetLong(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaSIZE));

保存到本地的Lua代码需要经过以下步骤:

1 导入相关库文件

首先需要导入相关库文件,包括cocos2d-x库和io库。这可以通过在代码开头添加以下代码实现:

local FileUtils = ccFileUtils:getInstance()

local io = require("io")

2 获取数据

接下来需要获取需要保存的的数据。这可以通过使用cocos2d-x中的Sprite类来实现:

local sprite = ccSprite:create("imagepng")

local texture2D = sprite:getTexture()

local size = texture2D:getContentSizeInPixels()

local data = texture2D:getData()

3 将数据写入文件

最后一步是将获取到的数据写入文件。这可以通过使用io库中的文件 *** 作函数来实现:

local path = FileUtils:getWritablePath() "imagepng"

local file = ioopen(path, "wb")

file:write(data, size)

file:close()

这段代码会将获取到的数据写入一个名为imagepng的文件中,保存在应用的可写目录下。需要注意的是,在写入文件之前需要先创建一个io文件对象,并且在写入完成之后需要关闭文件对象。

以上就是将保存到本地的Lua代码的详细步骤。

用下面这种方式能实现查询实现查询sd卡某一个子目录下的文件详细信息 :

//selection: 指定查询条件

String selection = MediaStoreImagesMediaDATA + " like %";

//设定查询目录

String path="/mnt/sdcard/youpicpath";

//定义selectionArgs:

String[] selectionArgs = {path+"%"};

c = thisgetContentResolver()query(MediaStoreImagesMediaEXTERNAL_CONTENT_URI, null,

selection, selectionArgs, null);

其实原理就是改变了下查询语句,在查询条件中增加了MediaStoreImagesMediaDATA字段的限制条件,必须是和指定目录能匹配的才被查询,注意selection和selectionArgs参数是配合使用的。

安卓系统在开机的时候就会自动检测SD卡的文件,并将音乐文件搜集生成一个数据库文件。我们只需访问数据库表中的信息就能得到所需的文件

代码如下

<span style="font-size:14px; white-space: pre;"> </span><span style="font-size:14px;">// 获取所有歌曲

Cursor cursor = crquery(

MediaStoreAudioMediaEXTERNAL_CONTENT_URI, null, null,

null, MediaStoreAudioMediaDEFAULT_SORT_ORDER);</span>

得到cursor对象就能访问cursor里的媒体资源

 

if (cursormoveToFirst()) {

do {

String title = cursorgetString(cursor

getColumnIndex(MediaStoreAudioMediaTITLE));

String singer = cursorgetString(cursor

getColumnIndex(MediaStoreAudioMediaARTIST));

String album = cursorgetString(cursor

getColumnIndex(MediaStoreAudioMediaALBUM));

long size = cursorgetLong(cursor

getColumnIndex(MediaStoreAudioMediaSIZE));

long time = cursorgetLong(cursor

getColumnIndex(MediaStoreAudioMediaDURATION));

String url = cursorgetString(cursor

getColumnIndex(MediaStoreAudioMediaDATA));

int _id = cursorgetInt(cursor

getColumnIndex(MediaStoreAudioMedia_ID));

String name = cursorgetString(cursor

getColumnIndex(MediaStoreAudioMediaDISPLAY_NAME));

String sbr = namesubstring(namelength() - 3,

namelength());

} while (cursormoveToNext());

<p>

</p>

<p>

<span style="font-size:14px; color:#3366ff; background-color:rgb(255,255,255)">但是如果你的手机在开机后又下载了新的歌曲文件通过上面的方法是访问不到的,因为它还没有被加到数据表中,这样我们就要重写文件搜索的方法。</span>

</p>

<p>

<br>

</p>

<pre name="code" class="java">//获取该路径下的所有文件

public static List<String> getAllFile(String path){

List<String> fileList = new ArrayList<String>();

File folder = new File(path);

addFile(fileList, folder);

return fileList;

}

public static void addFile(List<String> fileList,File f){

if(fisDirectory()){

File[] files = flistFiles();

for(File f1 : files){

addFile(fileList, f1);

}

}else{

String filename = fgetName();

if(filenamelength()>4&&filenamesubstring(filenamelength()-4)equalsIgnoreCase("mp3")){

fileListadd(fgetAbsolutePath());

}

}

}</pre><span style="font-size:14px"><br>

</span>我们只需在需要的地方调用<pre name="code" class="java">getAllFile(EnvironmentgetExternalStorageDirectory()getAbsolutePath());</pre><br>

<br>

<pre></pre>

<p></p>

<pre></pre>

android MediaPlayer类可以得到播放档案位元速率不

MediaPlayer 能不能得到我不知道,但是android系统可以帮你解析到。

方法:在目录data/data/anroidcontentprovidersmedia 这个包里面有一个数据库,是关于各种多媒体的,然后里面有个表,有全部音乐档案(android能识别的格式)的相关属性,比如歌曲名称,歌手,歌曲路径,还有歌曲时间。当然也有位元速率的。你可以利用这个。可以用contentProvider去查询这张表,表的Url是:MediaStoreAudioMediaEXTERNAL_CONTENT_URI这个你可去网上查一下,先关资料多的是。

Cursor cursor = getContentResolver()query(

MediaStoreAudioMediaEXTERNAL_CONTENT_URI, null,

"duration > 60000", null, MediaStoreAudioMediaTITLE);

怎样可以得到免费的QQ播放器

是QQ空间的的播放器吗

在QQ商城搜寻栏输入BLUE,会有免费的

android mediaplayer能播放什么格式的档案

Android官方公布的文件显示MediaPlayer支援如下视讯格式:

Video H263 X X 3GPP (3gp) and MPEG-4 (mp4)

H264 AVC X 3GPP (3gp) and MPEG-4 (mp4)

MPEG-4 SP X 3GPP (3gp)

这些格式的视讯,基本上属于手机支援的视讯格式。如果想观看其他型别格式的视讯,比如flv等,需要下载暴风、迅雷等播放器。

android mediaplayer可以播放flash吗

Android22之后才支援安装Flash外挂并在WebView播放Flash视讯,初步想法是给Activity设定一个全屏的WebView,然后传入一个Flash地址。MediaPlayer类实质上是一个控制器,用于播放OSMF中所支援的任何媒体元素型别。

因此,如果为一个MediaPlayer物件提供ImageElement物件,则它可以生成一幅影象;如果为一个MediaPlayer物件传递VideoElement物件,则它可以渲染一个视讯。

下面列出了由MediaPlayer物件所呈现的每一个公共属性。

● audioPan:一个数字,表示媒体的pan属性。

● autoDynamicStreamSwitch:一个布林值,指示媒体是否自动在动态流之间切换。

● autoPlay:一个布林值,定义媒体是否在载入 *** 作成功完成后立即开始播放。

● autoRewind:一个布林值,定义媒体在回放完成后是否返回到回放起始位置。

● buffering:一个布林值,指示媒体当前是否正在缓冲。

● bufferLength:一个数字,指示当前媒体缓冲区中的内容长度,以秒为单位。

● bufferTime:一个数字,指示媒体缓冲区的适宜长度,以秒为单位。

● bytesLoaded:一个数字,返回媒体已经载入内容的位元组数。

● bytesLoadedUpdateInterval:一个数字,表示为bytesLoaded属性分派改变事件的间隔时间。

● bytesTotal:一个数字,表示媒体将要载入的总位元组数。

● canBuffer:一个布林值,指示媒体是否可以缓冲。

● canLoad:一个布林值,指示媒体是否可以载入。

● canPause:一个布林值,指示媒体是否可以暂停。

● canPlay:一个布林值,指示媒体是否可以播放。

● canSeek:一个布林值,指示媒体是否可以定址。

● currentDynamicStreamIndex:一个整数,代表当前正在渲染的动态媒体流的索引。

● currentTime:一个数字,返回播放头的当前时间,以秒为单位。

● currentTimeUpdateInterval:一个数字,定义当前时间分派变化事件之间的时间间隔,以毫秒为单位。

● displayObject:媒体的DisplayObject物件。

● drmEndDate:一个日期,指示回放视窗的结束日期。

● drmPeriod:一个数字,返回回放视窗的长度,以秒为单位。

● drmStartDate:一个日期,指示回放视窗的开始日期。

● drmState:一个字串,指示该媒体DRM的当前状态。

● duration:一个数字,表示媒体回放的持续时间,以秒为单位。

● dynamicStreamSwitching:一个布林值,指示当前是否正在进行动态媒体流切换。

● hasAudio:一个布林值,指示媒体是否包含音讯。

● hasDRM:一个布林值,指示媒体元素是否具有DRMTrait。

● isDVRRecording:一个布林值,指示媒体是否支援DVR以及当前是否正在录制。

● isDynamicStream:一个布林值,指示媒体是否由动态流组成。

● loop:一个布林值,指示媒体是否应该在回放完成之后再次播放。

● maxAllowedDynamicStreamIndex:一个整数,表示最大允许的动态流索引。

● media:一个MediaElement物件,定义媒体播放器当前正在控制的源媒体元素。

● mediaHeight:一个数字,定义媒体的高度,以画素为单位。

● mediaWidth:一个数字,定义媒体的宽度,以画素为单位。

● muted:一个布林值,指示媒体当前是否静音。

● numDynamicStreams:一个整数,表示动态流索引的总数。

● paused:一个布林值,指示媒体当前是否暂停。

● playing:一个布林值,指示当前媒体是否正在播放。

● seeking:一个布林值,指示媒体当前是否正在定址。

● state:一个字串,表示媒体的当前状态。

● temporal:一个布林值,指示媒体是否为暂时性的。

● volume:一个数字,表示媒体的音量。

MediaPlayer还提供了许多方便的函式用于控制媒体,包括

● authenticate(username:String = null, password:String = null):用于认证媒体。

● authenticateWithToken(token:Object):使用用做令牌的物件来认证媒体。

● canSeekTo(seconds:Number):用于确定媒体是否可定址到指定时间,以秒为单位。

● getBitrateForDynamicStreamIndex(index:int):用于获取指定动态流索引的位元速率,以千位元组为单位。

● pause():用于暂停媒体,如果它还没有暂停的话。

● play():用于播放媒体,如果当前它没有处于播放状态的话。

● seek(time:Number):用于跳转到媒体档案中的指定时间。

● s():用于停止回放并返回到媒体档案的开头。

● switchDynamicStreamIndex(index:int):用于切换到特定动态流索引。

对于OSMF专案,将需要汇入MediaPlayer;它可以在o fmedia包中找到。

import o fmediaMediaPlayer;

为了利用一个AudioElement物件,需要建立一个MediaPlayer物件,然后将AudioElement物件赋值给MediaPlayer物件的media属性。

如果将MediaPlayer升级到可以播放rm档案

永远不可以

你可以下暴风影音,这样就可以播放很多格式的档案了,而且占用资源少

暴风影音(Media Player Classic)是大家最常用的视讯播放软体之一,除了支援RealOne、Windows Media Player等多媒体格式外,暴风影音还支援QuickTime、DVDRip以及APE等格式。所以,她又有“万能播放器”的美称。可是,在使用过程中,我们经常会碰到这样或那样问题,其实通过简单的设定就可以解决这些问题。

技巧例项一:播放RM档案不正常

有时在播放RM、RMVB档案的时候出现不正常,比如有的时候不能播放,有时播放没有影象,有时无法通过暂停、停止按钮来控制播放。该问题可能是由于暴风影音所支援的Real格式模式的设定造成的,要解决该问题,可以尝试如下的 *** 作:执行暴风影音,依次单击“检视→选项”,在开启的选项视窗左侧选择“格式”。接着,在右侧的副档名列表中选择“Real媒体档案”,将实时媒体流协议控制代码设定改为“DirectShow”。最后,单击“确定”按钮即可。

友情提示:不过要使用暴风影音线上播放RM、RMVB流媒体档案,需要将“DirectShow”改回“RealMedia”。

技巧例项二:无法播放MP4档案

在播放采用QuickTime Pro制作的MP4档案时,暴风影音无法进行播放。这是由于预设情况下,标准的MP4档案采用了DirectShow渲染,而采用QuickTime Pro制作的MP4档案采用了QuickTime渲染。具体的设定方法如下:在“开始”选单中,执行“暴风影音综合设定”。接着,在开启的视窗左侧“任务”中选中“MPEG-4解码设定”,单击“下一步”按钮。然后,在开启的视窗中将“MP4渲染方式”改为“QuickTime”。最后,单击“确定”按钮即可。

友情提示:在下次观看标准MP4档案的时候,别忘了将MP4渲染方式改回“DirectShow”。

技巧例项三:无法载入字幕

预设情况下,在暴风影音中是无法给RMVB档案载入字幕的,要新增字幕必须进行相应的设定。比如播放本地的RMVB档案,可以开启选项视窗,在左侧选择“回放”下的“输出”。接着,在右侧的视窗中,在“DirectShow视讯”中选择“WMR7(无转换)”。

如果要播放线上视讯,同样是在该视窗中,将“RealMedia视讯”选项设定为“DirectX 7”,单击“确定”按钮即可。这样,回到暴风影音主视窗,依次单击“档案→载入字幕”,然后选择字幕档案,单击“开启”按钮即可完成字幕的载入。

技巧例项四:双语**问题

在使用暴风影音播放双语压制的影片的时候,很多人不知道如何去切换声道?其实, *** 作方法很简单:开启选项视窗,在左侧选择“滤镜”下的“音讯切换器”。接着,在右侧的视窗中选择“启用自定义声道对映”复选框,在下面我们可以看到有两个声道,可以按住Shift键单击其中一个声道,这样可以切换声道。最后,单击“确定”按钮即可。

津政发[1987]106号档案从哪里可以得到

你可以到当地劳动人事局查询,或者到当地档案局付费查询还有当地的一些老企业中的文书档案(长期卷)中都有存档的.

上传档案可以得到多少财富值

如果成功上传,每当被人下载一次就增加财富值

标价非0分文件被别人下载

+标价/被下载 1 次

每份文件可以通过文件被下载获得财富值奖励的上限为 200 分。

当单份文件下载量超过 500 时, 500-600 次下载之间,每被下载 1 次,可以获得:文件标价分 + 系统奖励 1 分

标价为0分文件被别人下载

1-200 次下载,每被下载 1 次,使用者获得:系统奖励 1 分。

当单份文件下载量超过 500 时,500-600 次下载之间,每被下载 1 次,获得:系统奖励 2 分。

PS:自己下载自己资源不扣分、不加分

以上就是关于如何扫描出Android系统媒体库中视频文件全部的内容,包括:如何扫描出Android系统媒体库中视频文件、android 怎么获取手机内存里的音乐信息、保存图片到本地lua代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9553980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存