AndroidのContentResolver
を使用して新しいPlaylist
を作成しようとしていますが、コードが実行されたときにプレイリストに挿入されるとnullが返されますUri
)、音楽プレーヤーのプレイリストを確認すると、私の新しいPlaylist
エントリはありません。 がnullを返す理由は、プレイリストを正しく作成していないためです。誰かが私のコードがうまくいかない場合、新しいプレイリストを動的に作成する方法を明確にすることができますか? (私の検索では、私がプレイリストを照会するには、いくつかの方法を見つけましたが、何も実際に新しいものを作成しません)ContentResolverを使用して新しいプレイリストを作成する方法
ここに私のコードだ...
ContentResolver resolver = getActivity().getContentResolver();
Uri playlists = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
Log.d(A.TAG, "Checking for existing playlist for " + chart.getName());
Cursor c = resolver.query(playlists, new String[] {"*"}, null, null, null);
long playlistId = 0;
c.moveToFirst();
do {
String plname = c.getString(c.getColumnIndex(MediaStore.Audio.Playlists.NAME));
if (plname.equalsIgnoreCase(chart.getName())) {
playlistId = c.getLong(c.getColumnIndex(MediaStore.Audio.Playlists._ID));
break;
}
} while (c.moveToNext());
c.close();
if (playlistId!=0) {
Uri deleteUri = ContentUris.withAppendedId(playlists, playlistId);
Log.d(A.TAG, "REMOVING Existing Playlist: " + playlistId);
// delete the playlist
resolver.delete(deleteUri, null, null);
}
Log.d(A.TAG, "CREATING PLAYLIST: " + chart.getName());
ContentValues v = new ContentValues();
v.put(MediaStore.Audio.Playlists.NAME, chart.getName());
v.put(MediaStore.Audio.Playlists.DATE_MODIFIED, System.currentTimeMillis());
Uri newpl = resolver.insert(playlists, v);
Log.d(A.TAG, "Added PlayLIst: " + newpl);
Uri insUri = Uri.withAppendedPath(newpl, MediaStore.Audio.Playlists.Members.CONTENT_DIRECTORY);
int order = 1;
Log.d(A.TAG, "Playlist Members Url: " + insUri);
c = getContentManager().queryWhere(getActivity(), Song.class, Song.Fields.LIBRARYID + " != 0 and " + Song.Fields.CHARTID + " = " + chart.getId(), (String[])null);
if (c.moveToFirst()) {
Log.d(A.TAG, "Adding Songs to PlayList **");
do {
long id = c.getLong(c.getColumnIndex(Song.Fields.LIBRARYID));
ContentValues cv = new ContentValues();
cv.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, order++);
cv.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, id);
Uri u = resolver.insert(insUri, cv);
Log.d(A.TAG, "Added Playlist Item: " + u + " for AUDIO_ID " + id);
} while (c.moveToNext());
}
c.close();
はUPDATE:一部解決**
上記のコードは、4.0.3
に新しいプレイリストを正しく追加しますが、2.3
には追加しません。 4.0.3
の唯一の問題領域は、DATE_MODIFIED
がプレイリストに設定され、プレイリスト項目にPLAY_ORDER
が設定されていることを確認する必要があるということでした。
2.xでプレイリストが作成されない理由はまだ分かりません。だれかがそれについて考えているなら、私は知りたいと思います。
ありがとう@MarkG。私は最終的にこれを働かせました。私の2.xデバイスで動作していなかったのは、miuiを実行していたということでした。私はmiuiが標準のプレイリストコンテンツプロバイダを使用していないと推測しています。私がシアン色のモジュレーションでデバイスをリフレッシュしたとき、それはすべて機能しました。 – stuckless
この行でアプリがクラッシュする mPlaylistId = c.getInt(c.getColumnIndex(MediaStore.Audio.Playlists._ID)); –
nevermind私は自分の必要に応じて変更しました。確認するには カーソルc = mCR.query(mUri、PROJECTION_PLAYLIST、null、null、MediaStore.Audio.Playlists.DATE_MODIFIED); if(c!= null){ \t c.moveToLast(); –