使用 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;
        }
    }
}

代码解释:

  1. 权限设置:在 AndroidManifest.xml 文件中添加 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,以允许应用程序访问设备的外部存储。
  2. 布局设计:在 activity_main.xml 中,我们使用 ListView 来显示音频列表,并添加一个 RelativeLayout 来显示播放器控件(播放按钮和标题)。
  3. 音频列表获取:在 MainActivity.javaonCreate 方法中,我们使用 MediaStore 获取外部存储中的音频文件路径,并将其添加到一个 ArrayList 中。
  4. ArrayAdapter 适配器:我们使用 ArrayAdapter 将音频文件路径列表显示在 ListView 中。
  5. 点击事件处理:在 ListViewsetOnItemClickListener 中,我们处理点击事件。当用户点击一个音频文件时,我们停止当前播放的音频(如果存在),创建一个新的 MediaPlayer 实例,并设置其数据源为所选的音频文件。
  6. updatePlayer 方法:该方法用于更新播放器控件的状态,包括显示当前播放的音频文件名和更新播放/暂停按钮的图标。
  7. 释放资源:在 onDestroy 方法中,我们释放 MediaPlayer 资源以避免内存泄漏。

注意:

  • 请确保将 ic_play_arrow_black_24dpic_pause_black_24dp 替换为您实际使用的资源文件。
  • 确保您在 Android Studio 中为项目创建了一个新的 drawable 文件夹,并添加了这些资源文件。

本教程展示了如何使用 Android 构建一个简单的音频播放器,它可以查找设备中的所有音频文件并允许您点击播放。您可以根据自己的需求进一步扩展和改进此音频播放器,例如添加音量控制、播放进度条、背景播放等功能。

Android 音频文件播放器:查找设备所有音频并实现点击播放

原文地址: https://www.cveoy.top/t/topic/nd9a 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录