【发布时间】:2022-12-16 06:29:37
【问题描述】:
我创建了一个简单的活动来播放存储在原始文件夹中的音乐列表,但我想创建另一个活动,例如,MainActivity - 2008 年的歌曲,其他活动 1 - 2009 年的歌曲,其他活动 2 - 2010 年的歌曲等。那么我如何只从原始文件夹中读取某些文件或者是否可以创建子目录或从其他新文件夹中读取?
以下是我到目前为止所做的代码:
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.lang.reflect.Field;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView musicListView;
ArrayList<String> arrayList;
ArrayAdapter musicAdapter;
MediaPlayer musicplayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
musicListView = findViewById(R.id.musicListView);
arrayList = new ArrayList<String>();
Field[] fields = R.raw.class.getFields();
for (int i= i=0; i<fields.length; i++) {
arrayList.add(fields[i].getName());
}
musicAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
musicListView.setAdapter(musicAdapter);
musicListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (musicplayer != null) {
musicplayer.release();
}
int resId = getResources().getIdentifier(arrayList.get(i), "raw", getPackageName());
musicplayer = MediaPlayer.create(MainActivity.this, resId);
musicplayer.start();
}
});
}
}
【问题讨论】:
-
原始文件夹与其他任何文件夹一样资源文件夹 - 您可以通过 ID 访问其中的内容,例如
R.raw.my_thing,因此没有层次结构。您可能想通过Resources.getAssets().open("songs/2009/macarena.mp3")使用assets文件夹 -
@cactustictacs 我找到了一种使用
AssetFileDescriptor的方法,但它似乎不适用于子文件夹。我也试过没有任何文件夹,但有时播放的音频与代码中提到的不一样,例如getAssets().openFd("macarena.mp3")但谢谢你,我决定改为按名称过滤它们。
标签: java android android-studio