我有一些媒体播放器程序,从设备获取所有歌曲,然后显示它们。
当我尝试用MediaPlayer
播放一些歌曲时,我收到错误,因为我没有正确的资源ID(我在res/raw
中没有文件)。
问题:我可以从res/raw
获取正确的资源ID吗?
这是我在Song
对象中读取和保存的代码,我可以从中获取res id,还是可以在res/raw
中保存设备中的音频文件?
public class MainMediaPlayerActivity extends AppCompatActivity {
private ListView songList;
private ArrayList<Song> songs;
int currentPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_media_player);
songList = (ListView) findViewById(R.id.listOfMusic);
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri uri1 = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
Cursor cursor1 = getContentResolver().query(uri1,null, null, null, null);
songs = new ArrayList<>();
if (cursor == null || cursor1 == null) {
Toast.makeText(this, "Query failed", Toast.LENGTH_SHORT).show();
} else if (!cursor.moveToFirst() || !cursor1.moveToFirst()) {
Toast.makeText(this, "No media on device", Toast.LENGTH_SHORT).show();
} else {
int titleColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int artistColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int durationColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
int albumColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int id = cursor.getColumnIndex(MediaStore.Audio.Media._ID);
int album_artColumn = cursor1.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART);
do {
Drawable img = Drawable.createFromPath(cursor1.getString(album_artColumn));
songs.add(new Song(cursor.getString(titleColumn),
cursor.getString(artistColumn),
cursor.getString(durationColumn),
cursor.getString(albumColumn),
img,
cursor.getLong(id)));
} while (cursor.moveToNext());
}
final SongAdapter songAdapter = new SongAdapter(this, songs);
songList.setAdapter(songAdapter);
答案 0 :(得分:0)
从res/raw
文件夹播放文件不是必需的。您可以从任何路径或网址播放媒体文件。
在您的情况下,可以使用 -
String path = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)));
path
将包含媒体文件的完全限定路径。您可以使用此文件路径使用MediaPlayer播放音频。
MediaPlayer mp = MediaPlayer.create(LauncherActivity.this, Uri.parse(path));
mp.start();
希望这有帮助。