Trước tiên, bạn nên suy nghĩ xem bạn có thực sự muốn phát tệp âm thanh trực tiếp qua hệ thống tệp hay không. Cách phổ biến hơn để làm việc trên Android là truy cập các tệp phương tiện bằng cách truy vấn cơ sở dữ liệu phương tiện sẵn có thay vì làm việc trực tiếp với hệ thống tệp. Nếu bạn muốn làm việc với cơ sở dữ liệu phương tiện truyền thông bạn thường làm như vậy bởi:
- Thu hút một thể hiện của một trình giải quyết nội dung (thường được thực hiện bằng cách gọi
getContentResolver()
trong hoạt động của bạn)
- Sau đó, bạn có thể yêu cầu ContentResolver cho phương tiện có sẵn của một loại nhất định. Tại đây bạn có thể liên lạc với URI lần đầu tiên. Bạn nói với ContentResolver loại phương tiện nào bạn được xen vào bằng cách chỉ định một URI cụ thể cho truy vấn của bạn. Vì bạn quan tâm đến Âm nhạc, bạn sẽ truy vấn android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.
Bây giờ bạn có thể truy vấn ContentResolver của bạn như thế này:
Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
Đây là câu hỏi cơ bản nhất mà cung cấp cho bạn tất cả các đối tượng media đã đăng ký. Bằng cách chỉ định các tham số khác (NULL), bạn có thể chỉ định tiêu chí lọc, tiêu chí sắp xếp, v.v.
Truy vấn của bạn cung cấp cho bạn một phiên bản của Con trỏ. Với cá thể con trỏ của bạn, bạn về cơ bản có thể làm hai việc.
- Bạn có thể lặp qua các kết quả của truy vấn của bạn
- Bạn có thể yêu cầu nó về cấu trúc cột của kết quả của bạn (ví dụ như chỉ số của TITLE tên cột, tên Artist ARTIST và cuối cùng nhưng không kém phần quan ID cột).
Vì vậy, giả sử bạn chỉ quan tâm đến ID của bài hát đầu tiên. Bạn làm điều này bằng cách thiết lập con trỏ của bạn để bắt đầu nó bằng cách gọi:
cursor.moveToFirst();
Bạn bây giờ có thể chỉ cần gọi getters gõ của con trỏ để truy cập các cột mà bạn quan tâm, ví dụ như vậy cho ID của bài hát này, bạn sẽ gọi:
long mySongId=cursor.getLong(cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID));
Nếu bạn muốn biết tên album bạn sẽ làm gì:
cursor.getString(android.provider.MediaStore.Audio.Media.ALBUM);
Rõ ràng là tôi bỏ qua tất cả các xử lý cho ngắn gọn lỗi (trong một ví dụ thế giới thực bạn nên kiểm tra xem có bất kỳ bài hát nào trên thiết bị của bạn hay không, truy vấn đã thành công, ...).
Bây giờ, vì bạn có ID bài hát trong mySongId, bạn có thể truy cập điều URI lần thứ hai. Thời gian này bạn có thể tạo ra một URI đầy đủ cho bài hát của bạn bằng cách gọi:
Uri mySongUri=ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mySongsId);
này cung cấp cho bạn các URI của tập tin phương tiện truyền thông của bạn mà sau đó bạn có thể cung cấp cho MediaPlayer để bắt đầu chơi lại tập tin của bạn:
myMPlayer = new MediaPlayer();
myMPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
myMPlayer.setDataSource(getApplicationContext(), mySongUri);
Hãy chắc chắn để có một bài hát hay như ca khúc đầu tiên trên thiết bị của bạn để bạn có thể nghe vài bản nhạc tốt sau khi tất cả các công việc khó khăn :-)
btw .: nếu bạn muốn biết thêm về ContentProvider Android và các khái niệm ContentResolver bạn có thể kiểm tra gia sư này ial: http://www.grokkingandroid.com/android-tutorial-content-provider-basics/
Cách Stack Overflow làm việc là trước tiên bạn đăng mã mà bạn đã thử (nhưng không hoạt động). Sau đó, một người nào đó đến và đăng một giải pháp hoặc đề xuất để có được những thứ để làm việc. Tôi sợ yêu cầu hướng dẫn là tắt chủ đề. Điều này nói rằng, nó thường xử lý bạn để tìm kiếm SO trực tiếp và bạn có thể chạy vào các công cụ như [this] (http://stackoverflow.com/questions/1283499/setting-data-source-to-an-raw-id-in- Media Player). – MarsAtomic
Nội dung duy nhất tôi đã cố gắng sử dụng từ Internet luôn luôn làm hỏng chương trình của tôi, vì vậy tôi nghĩ rằng nó tốt nhất không quá –