取得方法は、我らがAndroid 名古屋つ部部長の塚田氏の著書を見ていただくとして
「AndroidSDK開発のレシピ―104個のレシピで学ぶAndroidアプリ開発の極意」
一気に本題いきます。
まず、気をつけなければいけないのが Galaxyシリーズ。なんと行ってもこれ。
Android携帯に登録されているプレイリストを取得する時の罠で、紹介したとおり情報を取得する時のURIが違います。
そしてプレイリストを操作するときもこのURIを使用します。
なので注意です。
サンプルコード的にはこんな感じです
public boolean isGalaxy(){
return true;
}
/**
* プレイリストを新規作成する
* @param name プレイリストの名前
* @param images_uri サムネイル画像のURI(Galaxyのみ)
* @param thumb サムネイル画像のURIの文字列(Galaxyのみ)
*
* 基本的に名前を指定してクエリー実行でOKです。
* Galaxyの場合は、サムネイル画像を指定する事ができます。
*
*/
public void addPlaylist(String name, Uri images_uri, String thumb){
ContentValues contentvalues = null;
ContentResolver contentResolver = getContentResolver();
Uri result_uri = null;
Uri playlist_uri = null;
int result = -1;
if(isGalaxy()){
//Galaxyの場合の必要データ作成
//URI
playlist_uri = Uri.parse("content://media/external/audio/music_playlists");
//データ作成
int image_index = -1;
if(images_uri != null){
image_index = (int)ContentUris.parseId(images_uri);
}
contentvalues = new ContentValues();
contentvalues.put("name", name);
contentvalues.put("images_id", image_index);
contentvalues.put("thumbnail_uri", "");
}else{
//標準的な端末の必要データ作成
//URI
playlist_uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
//データ作成
contentvalues = new ContentValues();
contentvalues.put("name", name);
}
//追加
result_uri = contentResolver.insert(playlist_uri, contentvalues);
if(result_uri == null){
//NG
Log.d("test", "fail add playlist : " + name + ", is null");
}else if((result = (int)ContentUris.parseId(result_uri)) == -1){
//NG
Log.d("test", "fail add playlist : " + name + ", " + result_uri.toString());
}else{
//OK
Log.d("test", "add playlist : " + name + "," + result);
}
}
/**
* プレイリストの名前を変更する
* @param id プレイリストのID
* @param name 新しい名前
*/
public void updatePlaylist(int id, String name){
ContentResolver contentResolver = getContentResolver();
ContentValues contentvalues = null;
Uri uri = null;
String as[];
int result = -1;
//URIの作成
if(isGalaxy()){
uri = Uri.parse("content://media/external/audio/music_playlists");
}else{
uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
}
//登録データの作成
contentvalues = new ContentValues(1);
contentvalues.put("name", name);
as = new String[1];
as[0] = Integer.toString(id);
//変更
result = contentResolver.update(uri, contentvalues, "_id = ?", as);
if(result != 1){
Log.d("test", "fail update playlist : " + name + ", " + result);
}else{
Log.d("test", "update playlist : " + name + ", " + result);
}
}
/**
* プレイリストの最大のplay_orderを取得する
* @param playlist_id
* @return
*/
public int getUserListMaxPlayOrder(int playlist_id){
int ret = -1;
ContentResolver contentResolver = getContentResolver();
Uri uri = null;
if(isGalaxy()){
uri = Uri.parse("content://media/external/audio/music_playlists/" + playlist_id + "/members");;
}else{
uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlist_id);
}
String as[] = new String[1];
as[0] = " max(play_order)";
String s = "playlist_id = " + playlist_id;
Cursor cursor = contentResolver.query(uri, as, s, null, null);
if(cursor == null){
}else{
cursor.moveToFirst();
ret = cursor.getInt(0);
cursor.close();
}
return ret;
}
/**
* プレイリストへ曲を追加する
* @param playlist_id 追加対象のプレイリストのID(標準端末・Galaxyの共通で使用します)
* @param audio_id 追加する曲のID(標準端末で使用します)
* @param data 追加する曲のフルパスの文字列(Galaxyで使用します)
* @param data_hash 追加する曲のハッシュコード(Galaxyで使用します)
*/
public void addMusicToPlaylist(int playlist_id, int audio_id, String data, int data_hash){
ContentResolver contentResolver = getContentResolver();
ContentValues contentvalues = new ContentValues();
Uri uri = null;
if(contentResolver == null){
}else{
Uri result_uri = null;
contentvalues.put("play_order", getUserListMaxPlayOrder(playlist_id) + 1);
if(isGalaxy()){
uri = Uri.parse("content://media/external/audio/music_playlists/" + playlist_id + "/members");;
contentvalues.put("audio_data", data);
contentvalues.put("audio_data_hashcode", data_hash);
}else{
uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlist_id);
contentvalues.put("audio_id", Integer.valueOf(audio_id));
}
//追加
result_uri = contentResolver.insert(uri, contentvalues);
if(result_uri == null){
//NG
Log.d("test", "fail add music : " + playlist_id + ", " + audio_id + ", is null");
}else if(((int)ContentUris.parseId(result_uri)) == -1){
//NG
Log.d("test", "fail add music : " + playlist_id + ", " + audio_id + ", " + result_uri.toString());
}else{
//OK
Log.d("test", "add music : " + playlist_id + ", " + audio_id + ", " + result_uri.toString());
}
}
}
/**
* プレイリストから曲を削除する
* @param ids 削除対象のIDの配列
*/
public void removeMusicFromPlaylists(int playlist_id, int[] ids){
Uri uri = null;
if(isGalaxy()){
uri = Uri.parse("content://media/external/audio/music_playlists/" + playlist_id + "/members");
}else{
uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlist_id);
}
removeItems(uri, ids);
}
/**
* プレイリストを削除する
* @param ids 削除対象のIDの配列
*/
public void removePlaylists(int[] ids){
Uri uri = null;
if(isGalaxy()){
uri = Uri.parse("content://media/external/audio/music_playlists");
}else{
uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
}
removeItems(uri, ids);
}
/**
* 登録されているアイテムを削除する
* @param uri 削除URI
* @param ids 削除するIDの配列
*/
protected void removeItems(Uri uri, int[] ids){
ContentResolver contentResolver = getContentResolver();
if(uri == null || ids == null){
}else{
String where = "_id IN(";
for(int i=0; i<ids.length; i++){
where += Integer.valueOf(ids[i]);
if(i < (ids.length -1)){
where += ", ";
}
}
where += ")";
//削除
contentResolver.delete(uri, where, null);
}
}
コメント