【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器

通过调用安卓的MediaPlayer可以直接完成Mp3等主流音频的播放,同时利用ContentResolver与Cursor可以直接读取安卓内在数据库的信息,直接获取当前sdcard中所有音频的列表,无须像《【Android】内存卡图片读取器,图库app》(点击打开链接)一样利用原始的Java代码去遍历整个sdcard卡,直接调用安卓固有的类既便捷又快速。最后,读取出来的Mp3可以通过适配器直接加载到ListView列表,做出如下所示的内存卡Mp3播放器app效果。本app在自己的真实的16G内存卡上真机测试通过。

首先,假设在内存卡上有如下的5个mp3文件,这里顺带提一句,利用DDMS拷贝文件到内存卡的时候注意,亲测发现,无法送PC上一个中文命名的文件到安卓虚拟机AVD,只能送英文文件。不嫌麻烦,可以先改名再传输,到安卓虚拟机AVD再改名。或者直接用英文歌曲。DDMS的使用可以参考《【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,并且在AVD中浏览sdcard的文件》(点击打开链接)。

之后,如下图所示,实现一个mp3播放器的大致功能,可以调节音量,上一首、下一首、播放等等,在没有选定音乐这些按钮禁用。

制作过程如下:

1、首先在res\values\strings.xml设置各个按钮与菜单的字体如下:

<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">内存卡mp3播放器</string><string name="action_settings">Settings</string><string name="button1">上一首</string><string name="button2">暂停</string><string name="button3">停止</string><string name="button4">下一首</string><string name="menu_author">作者:yongh701</string><string name="menu_exit">退出</string></resources>2、其次,如《【Android】日期拾取器、时间拾取器与菜单》(点击打开链接)一样,对res\menu\main.xml进行修改,设定一个很简单的菜单:

<menu xmlns:android="" ><itemandroid:id="@+id/menu_exit"android:title="@string/menu_exit"/><item android:title="@string/menu_author"/></menu>3、然后,由于设置sdcard的操作与改变系统的媒体音量,需要到AndroidManifest.xml申请权限,此文件修改之后如下:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.mp3player"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!– 要求向SDCard读取数据权限 –><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!– 要求向SDCard写入数据权限 –><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!– 要求改变音量的权限 –><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.mp3player.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>4、之后,修改res\layout\activity_main.xml对MainActivity.java进行布局。

思想如下图:

在一个自上而下垂直的线性布局下,摆两个横向的水平线性布局与一个列表视图ListView,宽度皆匹配父布局。其中,第一个横向的水平线性布局通过《【Android】利用相对布局布置更新软件的style为主题对话框的Activity,利用layout_weight属性对表格布局的行划分》(点击打开链接)提及到的方式,等分放置四个按钮,其次,在第二个横向的水平线性布局,放置一个仅包裹内容的,用于文字显示音量的TextView与一个进度条SeekBar。这两个横向的水平线性布局的高度都是仅包裹内容即可。最后的ListView的高度直接匹配父布局。因此,代码如下:

<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/button1"android:layout_width="0dip"android:layout_height="match_parent"android:layout_weight="1"android:text="@string/button1" /><Buttonandroid:id="@+id/button2"android:layout_width="0dip"android:layout_height="match_parent"android:layout_weight="1"android:text="@string/button2" /><Buttonandroid:id="@+id/button3"android:layout_width="0dip"android:layout_height="match_parent"android:layout_weight="1"android:text="@string/button3" /><Buttonandroid:id="@+id/button4"android:layout_width="0dip"android:layout_height="match_parent"android:layout_weight="1"android:text="@string/button4" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><SeekBarandroid:id="@+id/seekBar1"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><ListViewandroid:id="@+id/listView1"android:layout_width="match_parent"android:layout_height="match_parent" ></ListView></LinearLayout>5、最后,是本app实现的核心,对MainActivity.java进行编写,大体上分为三部分:各个组件的代码实现、菜单的实现与返回按键的监听。之所以对返回物理按钮的监听,是因为需要要求,用户在按返回物理按钮是彻底退出程序。退出程序时候,还要释放被本app占用系统的MediaPlayer,因此还要重写onDestory方法,释放资源。否则在程序退出之后,播放的音乐依然会“绕梁三日”。

每天告诉自己一次,『我真的很不错』

【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器

相关文章:

你感兴趣的文章:

标签云: