下面列出了怎么用android.provider.MediaStore.Audio的API类实例代码及写法,或者点击链接到github查看源代码。
protected ParcelFileDescriptor openAudioThumbnailCleared(long id, CancellationSignal signal)
throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Albums.EXTERNAL_CONTENT_URI,
AudioThumbnailQuery.PROJECTION, Audio.Albums._ID + "=" + id,
null, null);
if (cursor.moveToFirst()) {
final String data = cursor.getString(AudioThumbnailQuery._DATA);
return ParcelFileDescriptor.open(
new File(data), ParcelFileDescriptor.MODE_READ_ONLY);
}
} finally {
IoUtils.closeQuietly(cursor);
}
return null;
}
protected ParcelFileDescriptor openAudioThumbnailCleared(long id, CancellationSignal signal)
throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Albums.EXTERNAL_CONTENT_URI,
AudioThumbnailQuery.PROJECTION, Audio.Albums._ID + "=" + id,
null, null);
if (cursor.moveToFirst()) {
final String data = cursor.getString(AudioThumbnailQuery._DATA);
return ParcelFileDescriptor.open(
new File(data), ParcelFileDescriptor.MODE_READ_ONLY);
}
} finally {
IoUtils.closeQuietly(cursor);
}
return null;
}
protected ParcelFileDescriptor openAudioThumbnailCleared(long id, CancellationSignal signal)
throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Albums.EXTERNAL_CONTENT_URI,
AudioThumbnailQuery.PROJECTION, Audio.Albums._ID + "=" + id,
null, null);
if (cursor.moveToFirst()) {
final String data = cursor.getString(AudioThumbnailQuery._DATA);
return ParcelFileDescriptor.open(
new File(data), ParcelFileDescriptor.MODE_READ_ONLY);
}
} finally {
IoUtils.closeQuietly(cursor);
}
return null;
}
private Cursor getQueryCursor(AsyncQueryHandler async, String filter) {
if (filter == null) {
filter = "";
}
String[] ccols = new String[] {
BaseColumns._ID, Audio.Media.MIME_TYPE, Audio.Artists.ARTIST, Audio.Albums.ALBUM,
Audio.Media.TITLE, "data1", "data2"
};
Uri search = Uri.parse("content://media/external/audio/search/fancy/" + Uri.encode(filter));
Cursor ret = null;
if (async != null) {
async.startQuery(0, null, search, ccols, null, null, null);
} else {
ret = MusicUtils.query(this, search, ccols, null, null, null);
}
return ret;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (Audio.Artists.CONTENT_TYPE.equals(mimeType)) {
menu.setHeaderTitle(R.string.image_edit_artists);
getMenuInflater().inflate(R.menu.music_context_artistimage, menu);
} else if (Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
menu.setHeaderTitle(R.string.image_edit_albums);
getMenuInflater().inflate(R.menu.music_context_albumimage, menu);
} else if (Playlists.CONTENT_TYPE.equals(mimeType)) {
menu.setHeaderTitle(R.string.image_edit_playlist);
getMenuInflater().inflate(R.menu.music_context_playlist_genreimage, menu);
}
else{
menu.setHeaderTitle(R.string.image_edit_genre);
getMenuInflater().inflate(R.menu.music_context_playlist_genreimage, menu);
}
}
public void onSearchWeb(){
String query = "";
if (Audio.Artists.CONTENT_TYPE.equals(mimeType)) {
query = getArtist();
} else if (Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
query = getAlbum() + " " + getArtist();
} else if (Playlists.CONTENT_TYPE.equals(mimeType)) {
query = bundle.getString(PLAYLIST_NAME);
}
else{
Long id = bundle.getLong(BaseColumns._ID);
query = MusicUtils.parseGenreName(this, MusicUtils.getGenreName(this, id, true));
}
final Intent googleSearch = new Intent(Intent.ACTION_WEB_SEARCH);
googleSearch.putExtra(SearchManager.QUERY, query);
startActivity(googleSearch);
}
private boolean makeAutoShuffleList() {
ContentResolver res = getContentResolver();
Cursor c = null;
try {
c = res.query(Audio.Media.EXTERNAL_CONTENT_URI, new String[] {
BaseColumns._ID
}, AudioColumns.IS_MUSIC + "=1", null, null);
if (c == null || c.getCount() == 0) {
return false;
}
int len = c.getCount();
long[] list = new long[len];
for (int i = 0; i < len; i++) {
c.moveToNext();
list[i] = c.getLong(0);
}
mAutoShuffleList = list;
return true;
} catch (RuntimeException ex) {
} finally {
if (c != null) {
c.close();
}
}
return false;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = new String[] {
BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST,
};
StringBuilder selection = new StringBuilder();
Uri uri = Audio.Media.EXTERNAL_CONTENT_URI;
String sortOrder = Audio.Media.DEFAULT_SORT_ORDER;
uri = Audio.Media.EXTERNAL_CONTENT_URI;
long[] mNowPlaying = MusicUtils.getQueue();
if (mNowPlaying.length == 0)
return null;
selection = new StringBuilder();
selection.append(BaseColumns._ID + " IN (");
if (mNowPlaying == null || mNowPlaying.length <= 0)
return null;
for (long queue_id : mNowPlaying) {
selection.append(queue_id + ",");
}
selection.deleteCharAt(selection.length() - 1);
selection.append(")");
return new AddIdCursorLoader(getActivity(), uri, projection, selection.toString(), null,
sortOrder);
}
/**
* Reload the queue after we remove a track
*/
private void reloadQueueCursor() {
String[] projection = new String[] {
BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST,
};
StringBuilder selection = new StringBuilder();
Uri uri = Audio.Media.EXTERNAL_CONTENT_URI;
String sortOrder = Audio.Media.DEFAULT_SORT_ORDER;
uri = Audio.Media.EXTERNAL_CONTENT_URI;
long[] mNowPlaying = MusicUtils.getQueue();
if (mNowPlaying.length == 0)
return;
selection = new StringBuilder();
selection.append(BaseColumns._ID + " IN (");
if (mNowPlaying == null || mNowPlaying.length <= 0)
return;
for (long queue_id : mNowPlaying) {
selection.append(queue_id + ",");
}
selection.deleteCharAt(selection.length() - 1);
selection.append(")");
mCursor = MusicUtils.query(getActivity(), uri, projection, selection.toString(), null,
sortOrder);
mQuickQueueAdapter.changeCursor(mCursor);
}
@Override
public void setupFragmentData() {
mAdapter = new AlbumListAdapter(getActivity(), R.layout.music_listview_items, null,
new String[] {}, new int[] {}, 0);
mProjection = new String[] {
BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST
};
StringBuilder where = new StringBuilder();
where.append(AudioColumns.IS_MUSIC + "=1")
.append(" AND " + MediaColumns.TITLE + " != ''");
long albumId = getArguments().getLong(BaseColumns._ID);
where.append(" AND " + AudioColumns.ALBUM_ID + "=" + albumId);
mWhere = where.toString();
mSortOrder = Audio.Media.TRACK + ", " + Audio.Media.DEFAULT_SORT_ORDER;
mUri = Audio.Media.EXTERNAL_CONTENT_URI;
mFragmentGroupId = 89;
mType = TYPE_ALBUM;
mTitleColumn = MediaColumns.TITLE;
}
public void setupFragmentData(){
mAdapter = new RecentlyAddedAdapter(getActivity(), R.layout.music_listview_items,
null, new String[] {}, new int[] {}, 0);
mProjection = new String[] {
BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST
};
StringBuilder where = new StringBuilder();
int X = MusicUtils.getIntPref(getActivity(), NUMWEEKS, 5) * 3600 * 24 * 7;
where.append(MediaColumns.TITLE + " != ''");
where.append(" AND " + AudioColumns.IS_MUSIC + "=1");
where.append(" AND " + MediaColumns.DATE_ADDED + ">"
+ (System.currentTimeMillis() / 1000 - X));
mWhere = where.toString();
mSortOrder = MediaColumns.DATE_ADDED + " DESC";
mUri = Audio.Media.EXTERNAL_CONTENT_URI;
mTitleColumn = MediaColumns.TITLE;
}
@Override
public void setupFragmentData(){
mAdapter = new ArtistListAdapter(getActivity(), R.layout.music_listview_items, null,
new String[] {}, new int[] {}, 0);
mProjection = new String[] {
BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ARTIST
};
StringBuilder where = new StringBuilder();
where.append(AudioColumns.IS_MUSIC + "=1")
.append(" AND " + MediaColumns.TITLE + " != ''");
long artist_id = getArguments().getLong(BaseColumns._ID);
where.append(" AND " + AudioColumns.ARTIST_ID + "=" + artist_id);
mWhere = where.toString();
mSortOrder = MediaColumns.TITLE;
mUri = Audio.Media.EXTERNAL_CONTENT_URI;
mFragmentGroupId = 88;
mType = TYPE_ARTIST;
mTitleColumn = MediaColumns.TITLE;
}
private int idForplaylist(String name) {
Cursor cursor = MusicUtils.query(this, Audio.Playlists.EXTERNAL_CONTENT_URI, new String[] {
Audio.Playlists._ID
}, Audio.Playlists.NAME + "=?", new String[] {
name
}, Audio.Playlists.NAME, 0);
int id = -1;
if (cursor != null) {
cursor.moveToFirst();
if (!cursor.isAfterLast()) {
id = cursor.getInt(0);
}
cursor.close();
}
return id;
}
private String nameForId(long id) {
Cursor cursor = MusicUtils.query(this, Audio.Playlists.EXTERNAL_CONTENT_URI, new String[] {
Audio.Playlists.NAME
}, Audio.Playlists._ID + "=?", new String[] {
Long.valueOf(id).toString()
}, Audio.Playlists.NAME);
String name = null;
if (cursor != null) {
cursor.moveToFirst();
if (!cursor.isAfterLast()) {
name = cursor.getString(0);
}
cursor.close();
}
return name;
}
private Uri getUriForDocumentId(String docId) {
final Ident ident = getIdentForDocId(docId);
if (TYPE_IMAGE.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Images.Media.EXTERNAL_CONTENT_URI, ident.id);
} else if (TYPE_VIDEO.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Video.Media.EXTERNAL_CONTENT_URI, ident.id);
} else if (TYPE_AUDIO.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Audio.Media.EXTERNAL_CONTENT_URI, ident.id);
} else {
throw new UnsupportedOperationException("Unsupported document " + docId);
}
}
private void includeAudioRoot(MatrixCursor result) {
int flags = Root.FLAG_LOCAL_ONLY;
if (isEmpty(Audio.Media.EXTERNAL_CONTENT_URI)) {
flags |= Root.FLAG_EMPTY;
sReturnedAudioEmpty = true;
}
final RowBuilder row = result.newRow();
row.add(Root.COLUMN_ROOT_ID, TYPE_AUDIO_ROOT);
row.add(Root.COLUMN_FLAGS, flags);
row.add(Root.COLUMN_TITLE, getContext().getString(R.string.root_audio));
row.add(Root.COLUMN_DOCUMENT_ID, TYPE_AUDIO_ROOT);
row.add(Root.COLUMN_MIME_TYPES, AUDIO_MIME_TYPES);
}
protected long getAlbumForPathCleared(String path) throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
AudioAlbumThumbnailQuery.PROJECTION, Audio.Media.DATA + " LIKE ?",
new String[] { path.replaceAll("'", "''") }, Audio.Media.DATE_MODIFIED + " DESC");
if (cursor.moveToFirst()) {
return cursor.getLong(AudioAlbumThumbnailQuery.ALBUM_ID);
}
} finally {
IoUtils.closeQuietly(cursor);
}
throw new FileNotFoundException("No Audio found for album");
}
protected long getAlbumForAudioCleared(long album) throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
AudioAlbumThumbnailQuery.PROJECTION, AudioColumns._ID + "=" + album,
null, AudioColumns.DATE_MODIFIED + " DESC");
if (cursor.moveToFirst()) {
return cursor.getLong(AudioAlbumThumbnailQuery.ALBUM_ID);
}
} finally {
IoUtils.closeQuietly(cursor);
}
throw new FileNotFoundException("No Audio found for album");
}
private Uri getUriForDocumentId(String docId) {
final Ident ident = getIdentForDocId(docId);
if (TYPE_IMAGE.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Images.Media.EXTERNAL_CONTENT_URI, ident.id);
} else if (TYPE_VIDEO.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Video.Media.EXTERNAL_CONTENT_URI, ident.id);
} else if (TYPE_AUDIO.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Audio.Media.EXTERNAL_CONTENT_URI, ident.id);
} else {
throw new UnsupportedOperationException("Unsupported document " + docId);
}
}
private void includeAudioRoot(MatrixCursor result) {
int flags = Root.FLAG_LOCAL_ONLY;
if (isEmpty(Audio.Media.EXTERNAL_CONTENT_URI)) {
flags |= Root.FLAG_EMPTY;
sReturnedAudioEmpty = true;
}
final RowBuilder row = result.newRow();
row.add(Root.COLUMN_ROOT_ID, TYPE_AUDIO_ROOT);
row.add(Root.COLUMN_FLAGS, flags);
row.add(Root.COLUMN_TITLE, getContext().getString(R.string.root_audio));
row.add(Root.COLUMN_DOCUMENT_ID, TYPE_AUDIO_ROOT);
row.add(Root.COLUMN_MIME_TYPES, AUDIO_MIME_TYPES);
}
protected long getAlbumForPathCleared(String path) throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
AudioAlbumThumbnailQuery.PROJECTION, Audio.Media.DATA + " LIKE ?",
new String[] { path.replaceAll("'", "''") }, Audio.Media.DATE_MODIFIED + " DESC");
if (cursor.moveToFirst()) {
return cursor.getLong(AudioAlbumThumbnailQuery.ALBUM_ID);
}
} finally {
IoUtils.closeQuietly(cursor);
}
throw new FileNotFoundException("No Audio found for album");
}
protected long getAlbumForAudioCleared(long album) throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
AudioAlbumThumbnailQuery.PROJECTION, AudioColumns._ID + "=" + album,
null, AudioColumns.DATE_MODIFIED + " DESC");
if (cursor.moveToFirst()) {
return cursor.getLong(AudioAlbumThumbnailQuery.ALBUM_ID);
}
} finally {
IoUtils.closeQuietly(cursor);
}
throw new FileNotFoundException("No Audio found for album");
}
private Uri getUriForDocumentId(String docId) {
final Ident ident = getIdentForDocId(docId);
if (TYPE_IMAGE.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Images.Media.EXTERNAL_CONTENT_URI, ident.id);
} else if (TYPE_VIDEO.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Video.Media.EXTERNAL_CONTENT_URI, ident.id);
} else if (TYPE_AUDIO.equals(ident.type) && ident.id != -1) {
return ContentUris.withAppendedId(
Audio.Media.EXTERNAL_CONTENT_URI, ident.id);
} else {
throw new UnsupportedOperationException("Unsupported document " + docId);
}
}
private void includeAudioRoot(MatrixCursor result) {
int flags = Root.FLAG_LOCAL_ONLY;
if (isEmpty(Audio.Media.EXTERNAL_CONTENT_URI)) {
flags |= Root.FLAG_EMPTY;
sReturnedAudioEmpty = true;
}
final RowBuilder row = result.newRow();
row.add(Root.COLUMN_ROOT_ID, TYPE_AUDIO_ROOT);
row.add(Root.COLUMN_FLAGS, flags);
row.add(Root.COLUMN_TITLE, getContext().getString(R.string.root_audio));
row.add(Root.COLUMN_DOCUMENT_ID, TYPE_AUDIO_ROOT);
row.add(Root.COLUMN_MIME_TYPES, AUDIO_MIME_TYPES);
}
protected long getAlbumForPathCleared(String path) throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
AudioAlbumThumbnailQuery.PROJECTION, Audio.Media.DATA + " LIKE ?",
new String[] { path.replaceAll("'", "''") }, Audio.Media.DATE_MODIFIED + " DESC");
if (cursor.moveToFirst()) {
return cursor.getLong(AudioAlbumThumbnailQuery.ALBUM_ID);
}
} finally {
IoUtils.closeQuietly(cursor);
}
throw new FileNotFoundException("No Audio found for album");
}
protected long getAlbumForAudioCleared(long album) throws FileNotFoundException {
final ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = null;
try {
cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
AudioAlbumThumbnailQuery.PROJECTION, AudioColumns._ID + "=" + album,
null, AudioColumns.DATE_MODIFIED + " DESC");
if (cursor.moveToFirst()) {
return cursor.getLong(AudioAlbumThumbnailQuery.ALBUM_ID);
}
} finally {
IoUtils.closeQuietly(cursor);
}
throw new FileNotFoundException("No Audio found for album");
}
/**
* Sets the ListView paddingLeft for the header
*
* @param fragment
* @param mListView
*/
public static void setListPadding(Fragment fragment, ListView mListView, int left, int top,
int right, int bottom) {
if (fragment.getArguments() != null) {
String mimetype = fragment.getArguments().getString(MIME_TYPE);
if (Audio.Albums.CONTENT_TYPE.equals(mimetype)) {
mListView.setPadding(AQUtility.dip2pixel(fragment.getActivity(), left), top,
AQUtility.dip2pixel(fragment.getActivity(), right), bottom);
} else if (Audio.Artists.CONTENT_TYPE.equals(mimetype)) {
mListView.setPadding(AQUtility.dip2pixel(fragment.getActivity(), left), top,
AQUtility.dip2pixel(fragment.getActivity(), right), bottom);
}
}
}
@Override
public Cursor loadInBackground() {
Cursor mediaCursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
mSelectionArgs, mSortOrder);
//Get cursor filled with Audio Id's
String [] projection = new String[] {
BaseColumns._ID, AlbumColumns.ALBUM
};
Uri uri = Audio.Albums.EXTERNAL_CONTENT_URI;
String sortOrder = Audio.Albums.DEFAULT_SORT_ORDER;
Cursor albumCursor = getContext().getContentResolver().query(uri, projection, null, null, sortOrder);
//Matrix cursor to hold final data to be returned to calling context
MatrixCursor cursor = new MatrixCursor( new String[]
{ BaseColumns._ID, MediaColumns.TITLE, AudioColumns.ARTIST, AudioColumns.ALBUM, AudioColumns.ALBUM_ID});
//Map data from Audio Id cursor to the ALbumName Colum
ContentQueryMap mQueryMap = new ContentQueryMap(albumCursor, AlbumColumns.ALBUM, false, null);
Map<String, ContentValues> data = mQueryMap.getRows();
if (mediaCursor != null) {
while(mediaCursor.moveToNext()) {
String id = mediaCursor.getString(mediaCursor.getColumnIndexOrThrow(BaseColumns._ID));
String title = mediaCursor.getString(mediaCursor.getColumnIndexOrThrow(MediaColumns.TITLE));
String artist = mediaCursor.getString(mediaCursor.getColumnIndexOrThrow(AudioColumns.ARTIST));
String album = mediaCursor.getString(mediaCursor.getColumnIndexOrThrow(AudioColumns.ALBUM));
ContentValues tData = data.get(album);
String albumid = (String) tData.get(BaseColumns._ID);
cursor.addRow(new String[] {id, title, artist, album, albumid});
}
mediaCursor.close();
}
if (cursor != null) {
// Ensure the cursor window is filled
registerContentObserver(cursor, mObserver);
}
return cursor;
}
/**
* Shuffle all the tracks
*/
public void shuffleAll() {
Uri uri = Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = new String[] {
BaseColumns._ID
};
String selection = AudioColumns.IS_MUSIC + "=1";
String sortOrder = "RANDOM()";
Cursor cursor = MusicUtils.query(this, uri, projection, selection, null, sortOrder);
if (cursor != null) {
MusicUtils.shuffleAll(this, cursor);
cursor.close();
cursor = null;
}
}
@Override
protected void onCreate(Bundle icicle) {
// This needs to be called first
super.onCreate(icicle);
// Control Media volume
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Bundle bundle = new Bundle();
bundle.putString(MIME_TYPE, Audio.Playlists.CONTENT_TYPE);
bundle.putLong(BaseColumns._ID, PLAYLIST_QUEUE);
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new QuickQueueFragment(bundle)).commit();
}