Android 扫描 U 盘歌曲

在 Android 设备上,我们经常需要扫描 U 盘或外部存储设备上的歌曲文件。本文将介绍如何使用 Android 的媒体库扫描 U 盘中的歌曲,并展示了一个示例代码来实现这个功能。

媒体库扫描

Android 提供了一个媒体库(MediaStore)来管理设备上的多媒体文件。它允许我们以统一的方式访问设备上的音频、视频和图片等文件。在扫描 U 盘中的歌曲时,我们可以通过向媒体库添加新的音频文件来实现。

首先,我们需要声明读取存储权限。在 AndroidManifest.xml 文件中添加以下权限声明:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

然后,我们可以使用 MediaStore 来扫描 U 盘中的歌曲,并将它们添加到媒体库中。下面是一个示例代码:

private void scanUsbSongs(String usbPath) {
    File usbFolder = new File(usbPath);
    if (usbFolder.exists() && usbFolder.isDirectory()) {
        File[] songFiles = usbFolder.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                String fileName = file.getName();
                return fileName.endsWith(".mp3") || fileName.endsWith(".wav");
            }
        });

        if (songFiles != null && songFiles.length > 0) {
            for (File songFile : songFiles) {
                ContentValues values = new ContentValues();
                values.put(MediaStore.Audio.Media.DATA, songFile.getAbsolutePath());
                values.put(MediaStore.Audio.Media.TITLE, songFile.getName());
                values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp3");

                getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
            }
        }
    }
}

在上述代码中,我们首先通过指定 U 盘的路径来获取 U 盘的文件夹。然后,我们使用 listFiles() 方法过滤出所有以 .mp3 或 .wav 结尾的文件。接下来,我们将每个歌曲文件的路径、标题和 MIME 类型插入到媒体库中。

示例应用

现在,我们来创建一个简单的示例应用,演示如何扫描 U 盘中的歌曲。

首先,我们需要在布局文件中添加一个按钮,用于触发扫描操作:

<Button
    android:id="@+id/scanButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Scan USB Songs" />

然后,我们在活动(Activity)中获取按钮的引用,并设置点击事件监听器:

Button scanButton = findViewById(R.id.scanButton);
scanButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String usbPath = "/mnt/usb"; // 替换为实际 U 盘的路径
        scanUsbSongs(usbPath);
        Toast.makeText(MainActivity.this, "Scan completed!", Toast.LENGTH_SHORT).show();
    }
});

在点击事件监听器中,我们调用 scanUsbSongs() 方法来扫描 U 盘中的歌曲,并使用 Toast 来显示扫描完成的消息。

类图

下面是示例应用中涉及的主要类的类图:

classDiagram
    MainActivity --|> AppCompatActivity : extends
    MainActivity --|> View.OnClickListener : implements
    MainActivity ..> Toast
    MainActivity ..> Button
    MainActivity ..> File
    MainActivity ..> ContentValues
    File --|> Serializable
    ContentValues --|> HashMap
    MediaStore.Audio.Media --|> MediaStore

结论

本文介绍了如何使用 Android 的媒体库扫描 U 盘中的歌曲。我们学习了如何声明存储权限、使用 MediaStore 来添加新的音频文件,并展示了一个示例应用来演示这个功能。希望本文对你理解和实现这个功能有所帮助。

private void scanUsbSongs(String usbPath) {
    //...
}
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<Button
    android:id="@+id/scanButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Scan USB Songs" />