2014-11-17 13 views
7

Tôi là người mới sử dụng Java và lập trình Android, vì vậy mọi thứ hơi lạ với tôi! Tôi chủ yếu đến từ một nền tảng trong C++/C# để nói chuyện công nghệ!Lập trình Android - Tạo URI để nhận vị trí âm thanh

Dù sao đi nữa.

Tôi đang cố gắng tạo một lớp đơn giản xử lý âm thanh cho trình phát nhạc tùy chỉnh mà tôi đang thiết kế. Tôi đã có tất cả các sự kiện keypress xử lý, vì vậy bây giờ tôi đang làm việc trên các chức năng.

Tôi đang sử dụng lớp học MediaPlayer để xử lý hầu hết các nội dung khó, nhưng tôi hơi bối rối về cách truy cập âm thanh được lưu trên thiết bị di động của người dùng.

Tôi đã nghiên cứu một chút và dường như thiết bị Android có cơ sở dữ liệu sẵn có quản lý vị trí của tất cả âm thanh và truy cập dữ liệu này tôi phải sử dụng Uri?

Nếu ai đó có thể đăng một số mẫu mã về cách sử dụng Uri để truy cập, thì tôi chắc chắn tôi sẽ có thể xây dựng trên đó để thêm dữ liệu vào bất kỳ vùng chứa nào tôi muốn.

Chỉ cần làm rõ - thư mục vị trí âm nhạc không được người dùng biết và tôi không tạo thư mục thô, tôi muốn có quyền truy cập vào TẤT CẢ nhạc được lưu trữ trên thiết bị của người dùng nơi phần mềm có thể phát nó.

Hoặc nếu điều đó không thành công, một hướng dẫn hay ... Tôi đã xem tài liệu do google cung cấp, nhưng không có bất kỳ mã mẫu nào để tôi không thực sự biết bắt đầu từ đâu!

Cảm ơn tất cả.

+0

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

+0

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á –

Trả lời

4

Dưới đây là một ví dụ về cách sử dụng một Uri để truy cập các tập tin âm thanh, tìm kiếm mã này cho các bài hát trên thiết bị người dùng & cửa hàng các chi tiết trong songsList.

ArrayList<HashMap<String, String>> songsList = new ArrayList<>(); 
String[] STAR = {"*"}; 

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 
Cursor cursor = managedQuery(uri, STAR, selection, null, null); 

if (cursor != null) { 
    if (cursor.moveToFirst()) { 
     do { 
      String songName = cursor.getString(cursor. 
        getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); 
      String path = cursor.getString(cursor 
        .getColumnIndex(MediaStore.Audio.Media.DATA)); 
      String albumName = cursor.getString(cursor 
        .getColumnIndex(MediaStore.Audio.Media.ALBUM)); 
      int albumId = cursor.getInt(cursor 
        .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); 

      HashMap<String, String> song = new HashMap<String, String>(); 
      song.put("songTitle", albumName + " " + songName + "___" + albumId); 
      song.put("songPath", path); 
      songsList.add(song); 
     } while (cursor.moveToNext()); 
    } 
} 
2

Bạn có thể sẽ sử dụng số MediaStore được cung cấp và truy vấn nó cho tất cả âm thanh đã tìm thấy. Đó là ContentProvider đi kèm với hệ thống và bạn có thể truy cập nó bằng cách sử dụng ContentResolver của riêng bạn. Hãy xem MediaStore.Audio.Media và xem các mục nhập Uri tại đó. Ngoài ra, hãy xem this page, "Truy xuất phương tiện từ Trình phân giải nội dung" cho một số mã ví dụ đơn giản.

2

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:

  1. 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)
  2. 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ác vấn đề liên quan