package com.example.android.recipe093; import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.text.format.Time; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; public class Recipe093 extends Activity { private static final String TAG = "Recipe093"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 外部ストレージにある音楽データのUri Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; // 取得するカラム(今回は無指定=すべて) String[] projection = null; // 検索条件 String selection = null; // 検索条件の値 String[] selectionArgs = null; // ソート条件 String sortOrder = null; // 検索結果をCursorで取得しつつ、 // カーソルの管理をアクティビティに任せる Cursor cursor = managedQuery(uri, projection, selection, selectionArgs, sortOrder); for (String column : cursor.getColumnNames()) { Log.d(TAG, column); } // ListViewに表示するカラム名の配列 String[] from = { // タイトル MediaStore.Audio.AudioColumns.TITLE, // アーティスト名 MediaStore.Audio.AudioColumns.ARTIST, // 曲の長さ MediaStore.Audio.AudioColumns.DURATION }; // fromに対応するビューのリソースID int[] to = { R.id.title, R.id.artist, R.id.duration}; // SimpleCursorAdapterを生成 SimpleCursorAdapter adapter; adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.row, cursor, from, to); // Viewにセットする値を加工するためViewBinderをセット adapter.setViewBinder(new AudioListViewBinder()); // ListViewにAdapterをセット ListView listView = (ListView)findViewById(R.id.list_view); listView.setAdapter(adapter); } // Viewにセットする値を加工するクラス // SimpleCursorAdapter.ViewBinderインタフェースを実装します。 private class AudioListViewBinder implements SimpleCursorAdapter.ViewBinder { public boolean setViewValue(View view, Cursor cursor, int columnIndex) { // 各カラムのインデックスを取得 int titleIndex = cursor.getColumnIndex( // タイトル MediaStore.Audio.AudioColumns.TITLE); int artistIndex = cursor.getColumnIndex( // アーティスト名 MediaStore.Audio.AudioColumns.ARTIST); int durationIndex = cursor.getColumnIndex( // 再生時間 MediaStore.Audio.AudioColumns.DURATION); // 引数のcolumnIndexを比較する if (columnIndex == titleIndex || columnIndex == artistIndex) { // タイトルとアーティスト名はそのままセットする ((TextView)view).setText(cursor.getString(columnIndex)); } else if (columnIndex == durationIndex) { // 再生時間はミリ秒で取得できるので // mm:ssに加工 Time time = new Time(); time.set(cursor.getLong(columnIndex)); ((TextView)view).setText(time.format("%M:%S")); } return true; } } }