获取Android媒体库中的音乐文件
差不多结束了考试周(还剩一门英语听力),坐下来静静的看代码是一件多么令人感到愉悦的事情。随心所欲,在代码的世界里尽情的遨游。
想到之前写过的一个音乐播放器还没与完善,于是就想着把代码给优化一下。因为之前写音乐播放器急于求成,加上当时对SQLite数据库很陌生,在进行音乐加载时采用的是用递归对SD卡进行全部扫描的笨力搜索导致音乐播放器在打开的时候要加载很长时间。这两天学习了数据库的操作后尝试着从媒体库中直接去取音乐文件的方法,
结果成功了。废话不多说了,看看代码才是硬道理!!
上代码:
package com.example.testmediascanner; import java.util.Arrays; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.database.Cursor; import android.media.AudioManager; import android.os.Bundle; import android.provider.MediaStore; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { /** * 音乐的基本数据,用数组进行各个的存储 */ private int[] _ids; private int[] _album_id; private int[] durations; private String[]_titles; private String[] albums; private String[] artists; private String[] _path; /** * 提示框 */ private AlertDialog ad = null; private AlertDialog.Builder builder = null; //列表框,用来展示音乐名称 private ListView listView; //用来查询媒体库 private Cursor c; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 listView=(ListView)findViewById(R.id.listView1); //获取数据 setListData(); } /** * 从媒体库中查询音乐文件,将音乐名加载到列表框中 */ public void setListData(){ //查询数据库 c=this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{ MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID }, null, null, null); //若无音乐文件,提示用户没有音乐文件 if(c==null||count==0){ builder=new Builder(this); builder.setTitle("提示"); builder.setMessage("存储列表为空。。。"); ad=builder.create(); ad.show(); } //将游标放到第一处 c.moveToFirst(); //得到媒体库中音乐的个数 int count=c.getCount(); //初始化数组 _ids=new int[count]; _album_id=new int[count]; durations=new int[count]; _titles=new String[count]; albums=new String[count]; artists=new String[count]; _path=new String[count]; //为数组赋值 for (int i = 0; i < count; i++) { _ids[i] = c.getInt(3); _album_id[i]=c.getInt(6); durations[i]=c.getInt(1); _titles[i] = c.getString(0).trim(); albums[i] = c.getString(4).trim(); artists[i] = c.getString(2).trim(); _path[i] = c.getString(5).trim(); c.moveToNext(); } // 给列表加载数据 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, _titles)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
下面来看看效果:
相关推荐
本文将深入探讨如何在Android中实现录音、获取录音文件以及控制录音时间,同时也会提及与动画和文件操作相关的知识点。 一、Android录音机制 Android系统提供了MediaRecorder类来处理音频录制。MediaRecorder是一个...
这个"android媒体库使用demo及相关工具"的资源提供了关于如何利用Android的媒体库进行操作的实例和辅助工具,帮助开发者更好地理解和应用这些功能。 首先,我们要了解Android的媒体库主要由MediaStore类和...
从媒体库中查找音频、视频、图片文件的相关信息,并获取视频、图片、专辑图片的缩略图 和一些文件操作 package com.uwatch.swconnectservice.util; import java.io.File; import java.io.FileDescriptor; import ...
这些库允许Android应用连接到Windows文件服务器或NAS设备,读取共享目录中的多媒体文件。 实现步骤如下: 1. **建立网络连接**:使用SMB库创建一个SMBClient实例,配置网络连接参数,如服务器IP、用户名、密码和...
在Android平台上,拍照并更新媒体库以便用户能在相册中查看新拍摄的图片是一个常见的功能。这个过程涉及多个步骤,包括请求相机权限、启动相机应用、处理返回的图像数据、保存图片到设备以及通知媒体库更新。下面...
综上所述,开发一个Android音乐播放器涉及到的知识点广泛且深入,包括文件系统操作、媒体库管理、UI设计、多线程处理、权限控制以及性能优化等。在实践中,开发者需要不断学习和掌握这些技能,以提供流畅、功能完善...
- **模块化设计**:项目可能包含了多个模块,分别处理本地媒体库的访问、社交媒体接口以及用户界面等。这种分层架构使得代码可维护性更强。 - **本地媒体选择**:该选择器能浏览并选择设备上的图片和视频,可能...
在这个“vlc-android媒体播放AAR库”中,包含了两个关键的组件:libvlc-3.0.0.aar和medialibrary-release.aar。 首先,我们来详细了解一下`libvlc-3.0.0.aar`。这是VLC的核心库,它包含了VideoLAN Client (VLC)的...
通过预编译的`.SO`库文件(版本4.1.3),开发者可以直接在Android项目中集成FFmpeg,实现各种复杂的音视频操作,提升应用的功能性和用户体验。不过,正确地集成和使用FFmpeg需要对音视频处理有深入理解,并熟悉JNI...
可以使用Intent的ACTION_PICK操作,让用户从设备的媒体库中选择已有的音频文件。返回的Intent的data字段包含了选定文件的URI。 5. **文件操作**: 文件操作是上传的关键部分,需要读取选择的录音文件内容。可以...
5. **更新媒体库**:完成扫描后,MediaScannerService会将新发现或更新的媒体文件信息插入到媒体库数据库中,使得用户可以通过音乐、视频或图片应用浏览和播放这些媒体。 6. **通知系统**:最后,当扫描完成后,...
在Android应用开发中,经常需要集成文档选择功能,以便用户能够方便地从设备中选取各种类型的文件,如PDF、PPT、文本、Word文档或媒体文件。"android-doc-picker"就是这样一个开源项目,它为开发者提供了简单易用的...
- 要在Android项目中使用libyuv,首先需要将编译好的.so动态库文件放入项目的jniLibs目录下,对应不同的CPU架构。 - 接下来,在Java或Kotlin代码中,通过JNI接口调用libyuv的C++函数进行颜色空间转换。 4. **编译...
本文将深入探讨Android媒体库数据更新的方法,以便应用能正确显示新添加的内容。 首先,理解Android媒体库的工作原理是关键。Android系统在启动时会启动`MediaScannerService`,它会遍历设备上的所有多媒体文件(如...
综上所述,"Android sd卡音频文件列表显示+歌曲播放"的Demo涵盖了Android文件操作、UI设计、媒体播放、服务以及权限管理等多个关键知识点,是学习Android应用开发过程中不可或缺的一部分。通过对这个Demo的深入理解...
在Android系统中,读写文件权限分为内部存储和外部存储两种。内部存储权限用于访问应用私有的数据目录,而外部存储权限则允许访问公共的外部存储区域。在Qt中,可以使用QStandardPaths类来获取这些路径,并使用QFile...
总的来说,"android获取本地图片相册及图片"涉及的知识点包括:Android文件系统与权限管理、MediaStore API的使用、图片加载库的运用(如Glide)、多选功能的实现以及Intent的使用。开发者需要熟练掌握这些技术,...
"ijkplayer so库"是指ijkplayer的动态链接库文件,即Shared Object (SO) 文件。这些文件在Android系统中是二进制形式的,包含了ijkplayer的C/C++代码实现。在Android应用中,开发者通常需要将SO文件打包到APK中,...
- 由于访问存储和媒体库需要权限,因此需要在AndroidManifest.xml中声明`READ_EXTERNAL_STORAGE`权限,并在运行时检查并请求权限。 7. **事件处理和生命周期**: - 在Activity和Service中正确处理生命周期事件,...