2012-03-12 8 views
11

Tôi đang cố gắng truy vấn danh sách phát do ứng dụng "Google Play Âm nhạc" tạo nhưng không thể thực hiện được. Tôi đã tạo danh sách phát bằng nội dung được lưu trữ cục bộ. Tôi đã sử dụng mã sau đây để truy vấn:Truy vấn cơ sở dữ liệu Google Play Âm nhạc trong Android

Cursor c = managedQuery(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 
             new String[] {MediaStore.Audio.Playlists._ID, 
                MediaStore.Audio.Playlists.NAME 
                }, null, null, null); 

Điều này làm việc tốt cho Winamp chứ không phải cho Google Play Âm nhạc. Trên thực tế, Winamp không hiển thị danh sách phát được tạo bằng Google Play Âm nhạc. Tuy nhiên, Google Play Âm nhạc hiển thị danh sách phát được tạo bằng Winamp. Tôi đoán là Google Play Âm nhạc đang sử dụng cơ sở dữ liệu của riêng mình để lưu trữ danh sách phát khi những người chơi khác sử dụng Nhà cung cấp nội dung với MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI để lưu trữ danh sách phát của họ. Có cách nào để tạo danh sách phát được tạo bằng Google Play Âm nhạc không?

Trả lời

0

tôi đã cố gắng truy vấn ContenProvider như bạn có thể nhìn thấy nó trong Logcat khi bạn bắt đầu ứng dụng google Âm nhạc:

getContentResolver() truy vấn (Uri.parse ("Nội dung:. //com.google.android.music .MusicContent/playlist "), null, null, null, null);

nhưng tôi đã không có kết quả :-(lẽ Im làm s.th. sai, didnt làm việc nhiều với contentproviders trước, hoặc có thể là contentprovider không được công khai cho các ứng dụng khác.

+2

Điều này thực sự làm việc cho tôi với một thay đổi nhỏ. Thay vì sử dụng phép chiếu "null", tôi đã sử dụng {MediaStore.Audio.Playlists.NAME, MediaStore.Audio.Playlists._ID}. Tôi chỉ cần ID và tên danh sách phát. Vì vậy, điều này phục vụ nhu cầu của tôi. –

+0

Thx, Mẹo hay! Tôi sẽ thử đôi khi. – VinoRosso

1

Hãy thử điều này.

String[] proj = {MediaStore.Audio.AudioColumns.TITLE,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media._ID}; 
Uri gMusicUri = Uri.parse("content://com.google.android.music.MusicContent/audio"); 
Cursor cursor = getApplicationContext().getContentResolver() 
      .query(gMusicUri, 
        proj, null, null, null); 
+2

Thanx user1411426, là cách tương tự để truy xuất album nghệ thuật cho một id bài hát cụ thể? – AndroidGuy

13

tôi biết chủ đề này là cũ, nhưng tôi đã phải vật lộn với vấn đề này quá.

Google play Âm nhạc cho thấy danh sách nhạc của mình tại đây Nội dung không đúng tiêu chuẩn URI

// list all playlists with their ID and Name 
Cursor cursor = getContentResolver().query(
    "content://com.google.android.music.MusicContent/playlists", 
    new String[] {"_id", "playlist_name" }, 
    null, null, null); 

nhạc của Google Play cung cấp nội dung sử dụng các tên cột sau

  • isAllLocal
  • playlist_owner_name
  • hasLocal
  • hasRemote
  • hasAny
  • KeepOnId
  • playlist_art_url
  • playlist_share_token
  • _id
  • _count
  • playlist_owner_profile_photo_url
  • keeponSongCount
  • playlist_description
  • playlist_type
  • playlist_id
  • keeponDownloadedSongCount
  • PLAYLIST_NAME

Tôi sẽ không bao giờ figured này ra mà không cần ứng dụng thực sự hữu ích này Content Provider Helper

+1

Bạn có thể vui lòng đăng các tên cột của một đối tượng theo dõi không? Tôi vừa cài đặt Trình trợ giúp của nhà cung cấp nội dung, nhưng "nội dung: //com.google.android.music.MusicContent/playlists" không được liệt kê ở đó. – Chrizzor

+1

@Chriszzor, nếu bạn vượt qua null cho đối số thứ hai của truy vấn (thay vì truyền danh sách các cột), kết quả sẽ chứa tất cả các cột. Sau đó, bạn có thể kiểm tra giá trị của con trỏ (nó có một thuộc tính mCursor với một thuộc tính mColumns) để xem tất cả các tên cột. Tôi sẽ liệt kê chúng ở đây, nhưng có 47 trong số chúng! – arlomedia

+0

Nó chỉ trả về một bản ghi tức là danh sách phát được tạo lần cuối. Không trả lại tất cả các bản ghi. –