Android 音频文件播放器:查找设备所有音频并实现点击播放
使用 Android 制作一个查找设备中所有音频文件,并实现点击播放的音频播放器
本教程将指导您使用 Android 构建一个简单的音频播放器,它可以查找设备中的所有音频文件并允许您点击播放。我们将提供完整的源代码,包括布局文件、权限设置和 MainActivity.java 中的逻辑。
1. 权限设置
由于涉及到文件读取和播放的功能,需要申请相关权限,因此在 AndroidManifest.xml 文件中添加以下代码:
<uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE' />
<uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE' />
2. 布局文件 (activity_main.xml)
接下来,我们需要在布局文件中添加一个 ListView 组件用于显示所有音频文件,以及一个 MediaPlayer 组件用于播放音频。在 activity_main.xml 中添加以下代码:
<?xml version='1.0' encoding='utf-8'?>
<RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android'
xmlns:tools='http://schemas.android.com/tools'
android:id='@+id/activity_main'
android:layout_width='match_parent'
android:layout_height='match_parent'
tools:context='.MainActivity'>
<ListView
android:id='@+id/listview'
android:layout_width='match_parent'
android:layout_height='match_parent'
android:layout_above='@+id/player'
android:divider='@null'
android:dividerHeight='0dp' />
<RelativeLayout
android:id='@+id/player'
android:layout_width='match_parent'
android:layout_height='60dp'
android:layout_alignParentBottom='true'
android:background='@android:color/white'
android:padding='10dp'>
<ImageView
android:id='@+id/play'
android:layout_width='40dp'
android:layout_height='40dp'
android:layout_centerVertical='true'
android:src='@drawable/ic_play_arrow_black_24dp' />
<TextView
android:id='@+id/title'
android:layout_width='match_parent'
android:layout_height='wrap_content'
android:layout_centerVertical='true'
android:layout_marginLeft='10dp'
android:layout_toRightOf='@+id/play'
android:text='Title'
android:textSize='16sp' />
</RelativeLayout>
</RelativeLayout>
3. 实现代码 (MainActivity.java)
接下来,我们需要在 MainActivity.java 中实现查找所有音频文件的功能,并将其显示在 ListView 中。在 onCreate 方法中添加以下代码:
public class MainActivity extends AppCompatActivity {
private ListView listView;
private MediaPlayer mediaPlayer;
private int currentPosition = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
ArrayList<String> musicList = new ArrayList<String>();
String[] projection = new String[]{
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA};
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
musicList.add(path);
}
cursor.close();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, musicList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
String path = (String) parent.getItemAtPosition(position);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
mediaPlayer.start();
currentPosition = position;
updatePlayer();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private void updatePlayer() {
TextView title = (TextView) findViewById(R.id.title);
ImageView play = (ImageView) findViewById(R.id.play);
String name = ((String) listView.getItemAtPosition(currentPosition)).substring(((String) listView.getItemAtPosition(currentPosition)).lastIndexOf('/') + 1);
title.setText(name);
if (mediaPlayer.isPlaying()) {
play.setImageResource(R.drawable.ic_pause_black_24dp);
} else {
play.setImageResource(R.drawable.ic_play_arrow_black_24dp);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
}
代码解释:
- 权限设置:在
AndroidManifest.xml文件中添加READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,以允许应用程序访问设备的外部存储。 - 布局设计:在
activity_main.xml中,我们使用ListView来显示音频列表,并添加一个RelativeLayout来显示播放器控件(播放按钮和标题)。 - 音频列表获取:在
MainActivity.java的onCreate方法中,我们使用MediaStore获取外部存储中的音频文件路径,并将其添加到一个ArrayList中。 ArrayAdapter适配器:我们使用ArrayAdapter将音频文件路径列表显示在ListView中。- 点击事件处理:在
ListView的setOnItemClickListener中,我们处理点击事件。当用户点击一个音频文件时,我们停止当前播放的音频(如果存在),创建一个新的MediaPlayer实例,并设置其数据源为所选的音频文件。 updatePlayer方法:该方法用于更新播放器控件的状态,包括显示当前播放的音频文件名和更新播放/暂停按钮的图标。- 释放资源:在
onDestroy方法中,我们释放MediaPlayer资源以避免内存泄漏。
注意:
- 请确保将
ic_play_arrow_black_24dp和ic_pause_black_24dp替换为您实际使用的资源文件。 - 确保您在 Android Studio 中为项目创建了一个新的
drawable文件夹,并添加了这些资源文件。
本教程展示了如何使用 Android 构建一个简单的音频播放器,它可以查找设备中的所有音频文件并允许您点击播放。您可以根据自己的需求进一步扩展和改进此音频播放器,例如添加音量控制、播放进度条、背景播放等功能。
原文地址: https://www.cveoy.top/t/topic/nd9a 著作权归作者所有。请勿转载和采集!