콘텐츠 확인자를 사용하여 노래를 검색하는 2 개의 별도 방법이 있습니다. 하나는 내가 전화에서 모든 노래를 얻으려면 사용하고 하나는 내 휴대 전화에서 모든 재생 목록을 검색하는 데 사용하고, 각 재생 목록에 대해 나는 그것에 노래를 가져 와서 재생 목록 개체에 추가합니다. 재생 목록의 ID와 일치하는 ID의 모든 노래 목록을 검색하여이 작업을 수행합니다. 문제는 ID가 일치하지 않는다는 것입니다. 나는 전직을 확실히 압니다. 하나의 재생 목록에는 3 곡이 있지만 ID는 찾은 노래와 완전히 다릅니다. 이 내가 모든 노래 검색에 사용하는 방법입니다 :미디어에서 검색 할 때보 다 재생 목록에서 검색 할 때 Android 노래 ID가 다릅니다.
public ArrayList<Song> getSongList(){
ArrayList<Song> songs = new ArrayList<Song>();
//query external audio
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
//iterate over results if valid
if(musicCursor!=null && musicCursor.moveToFirst()){
//get columns
int titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);
int albumColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ALBUM);
int durationColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DURATION);
int dataColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DATA);
int displayNameColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DISPLAY_NAME);
//add songs to list
do {
String name;
if(musicCursor.getString(titleColumn)==null || musicCursor.getString(titleColumn).isEmpty()) name=musicCursor.getString(displayNameColumn);
else name=musicCursor.getString(titleColumn);
songs.add(new Song(musicCursor.getLong(idColumn), name, musicCursor.getString(albumColumn), musicCursor.getString(artistColumn), musicCursor.getString(durationColumn), musicCursor.getString(dataColumn)));
}
while (musicCursor.moveToNext());
}
을 그리고 이것은 재생 목록의 하나입니다
public void getPlayists() {
playlists = new ArrayList<Playlist>();
// query external audio
String[] projection = {
android.provider.MediaStore.Audio.Playlists._ID,
android.provider.MediaStore.Audio.Playlists.NAME };
String[] projectionPl = {
android.provider.MediaStore.Audio.Media._ID,
android.provider.MediaStore.Audio.Media.TITLE };
ContentResolver resolver = context.getContentResolver();
Uri playlistsUri = android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
Cursor playlistsCursor = resolver.query(playlistsUri, projection, null,
null, null);
// iterate over results if valid
if (playlistsCursor != null && playlistsCursor.moveToFirst()) {
// get columns
int idColumn = playlistsCursor
.getColumnIndex(android.provider.MediaStore.Audio.Playlists._ID);
int nameColumn = playlistsCursor
.getColumnIndex(android.provider.MediaStore.Audio.Playlists.NAME);
// add songs to list
do {
long id = playlistsCursor.getLong(idColumn);
Playlist pl = new Playlist(
playlistsCursor.getString(nameColumn), id);
Cursor plCursor = resolver.query(
android.provider.MediaStore.Audio.Playlists.Members
.getContentUri("external", id), projectionPl,
null, null, null);
if (plCursor != null && plCursor.moveToFirst()) {
// get columns
int idColumna = plCursor
.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
int nameColumna = plCursor
.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
// add songs to list
do {
long ida = plCursor.getLong(idColumna);
String title = plCursor.getString(nameColumna);
for (Song song : songs) {
if (song.id == ida) {
pl.addSong(song);
}
}
} while (plCursor.moveToNext());
}
playlists.add(pl);
} while (playlistsCursor.moveToNext());
}
누군가가 노래 ID가 작동 정확히 어떻게 설명 할 수 또는 내가 어떻게 수정할 수 있습니다 내 그것들을 작동시키는 방법? 감사.
네위한 Google Play를 아마존 앱 스토어에서 내 응용 프로그램의 재생 목록 관리자에서 봐 재생 목록을 생성하는 코드를 게시, 그 원인이었다. 나는 또한 혼자서 문제를 발견했지만 질문을 한 지 8 시간 만에 대답 할 수 없었다. 또한 귀하의 제안에 감사드립니다. – user3808318