如何获取没有原始目录的资源ID

时间:2016-03-15 20:26:05

标签: java android

我有一些媒体播放器程序,从设备获取所有歌曲,然后显示它们。 当我尝试用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);

1 个答案:

答案 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();

希望这有帮助。