⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicutils.java

📁 Android平台上的media player, iPhone风格
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.android.imusic;import java.io.File;import java.io.FileDescriptor;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Arrays;import java.util.Formatter;import java.util.HashMap;import java.util.Locale;import android.app.Activity;import android.app.ExpandableListActivity;import android.content.ComponentName;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.content.res.Resources;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.ColorFilter;import android.graphics.PixelFormat;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.media.MediaFile;//import android.media.MediaScanner;import android.net.Uri;import android.os.RemoteException;import android.os.Environment;import android.os.ParcelFileDescriptor;import android.provider.MediaStore;import android.provider.Settings;import android.util.Log;import android.view.SubMenu;import android.view.Window;import android.widget.TextView;import android.widget.Toast;public class MusicUtils {    private static final String TAG = "MusicUtils";    public interface Defs {        public final static int OPEN_URL = 0;        public final static int ADD_TO_PLAYLIST = 1;        public final static int USE_AS_RINGTONE = 2;        public final static int PLAYLIST_SELECTED = 3;        public final static int NEW_PLAYLIST = 4;        public final static int PLAY_SELECTION = 5;        public final static int GOTO_START = 6;        public final static int GOTO_PLAYBACK = 7;        public final static int PARTY_SHUFFLE = 8;        public final static int SHUFFLE_ALL = 9;        public final static int DELETE_ITEM = 10;        public final static int SCAN_DONE = 11;        public final static int CHILD_MENU_BASE = 12;        public final static int QUEUE = 13;    }        public static String makeAlbumsSongsLabel(Context context, int numalbums, int numsongs, boolean isUnknown) {        // There are several formats for the albums/songs information:        // "1 Song"   - used if there is only 1 song        // "N Songs" - used for the "unknown artist" item        // "1 Album"/"N Songs"         // "N Album"/"M Songs"        // Depending on locale, these may need to be further subdivided                StringBuilder songs_albums = new StringBuilder();        if (numsongs == 1) {            songs_albums.append(context.getString(R.string.onesong));        } else {            Resources r = context.getResources();            if (! isUnknown) {                String f = r.getQuantityText(R.plurals.Nalbums, numalbums).toString();                sFormatBuilder.setLength(0);                sFormatter.format(f, Integer.valueOf(numalbums));                songs_albums.append(sFormatBuilder);                songs_albums.append(context.getString(R.string.albumsongseparator));            }            String f = r.getQuantityText(R.plurals.Nsongs, numsongs).toString();            sFormatBuilder.setLength(0);            sFormatter.format(f, Integer.valueOf(numsongs));            songs_albums.append(sFormatBuilder);        }        return songs_albums.toString();    }        public static IMediaPlaybackService sService = null;    private static HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();    public static boolean bindToService(Context context) {        return bindToService(context, null);    }    public static boolean bindToService(Context context, ServiceConnection callback) {        context.startService(new Intent(context, MediaPlaybackService.class));        ServiceBinder sb = new ServiceBinder(callback);        sConnectionMap.put(context, sb);        return context.bindService((new Intent()).setClass(context,                MediaPlaybackService.class), sb, 0);    }        public static void unbindFromService(Context context) {        ServiceBinder sb = (ServiceBinder) sConnectionMap.remove(context);        if (sb == null) {            Log.e("MusicUtils", "Trying to unbind for unknown Context");            return;        }        context.unbindService(sb);    }    private static class ServiceBinder implements ServiceConnection {        ServiceConnection mCallback;        ServiceBinder(ServiceConnection callback) {            mCallback = callback;        }                public void onServiceConnected(ComponentName className, android.os.IBinder service) {            sService = IMediaPlaybackService.Stub.asInterface(service);            initAlbumArtCache();            if (mCallback != null) {                mCallback.onServiceConnected(className, service);            }        }                public void onServiceDisconnected(ComponentName className) {            if (mCallback != null) {                mCallback.onServiceDisconnected(className);            }            sService = null;        }    }        public static int getCurrentAlbumId() {        if (sService != null) {            try {                return sService.getAlbumId();            } catch (RemoteException ex) {            }        }        return -1;    }    public static int getCurrentArtistId() {        if (MusicUtils.sService != null) {            try {                return sService.getArtistId();            } catch (RemoteException ex) {            }        }        return -1;    }    public static int getCurrentAudioId() {        if (MusicUtils.sService != null) {            try {                return sService.getAudioId();            } catch (RemoteException ex) {            }        }        return -1;    }        public static int getCurrentShuffleMode() {        int mode = MediaPlaybackService.SHUFFLE_NONE;        if (sService != null) {            try {                mode = sService.getShuffleMode();            } catch (RemoteException ex) {            }        }        return mode;    }        /*     * Returns true if a file is currently opened for playback (regardless     * of whether it's playing or paused).     */    public static boolean isMusicLoaded() {        if (MusicUtils.sService != null) {            try {                return sService.getPath() != null;            } catch (RemoteException ex) {            }        }        return false;    }    private final static int [] sEmptyList = new int[0];        public static int [] getSongListForCursor(Cursor cursor) {        if (cursor == null) {            return sEmptyList;        }        int len = cursor.getCount();        int [] list = new int[len];        cursor.moveToFirst();        int colidx = cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID);        if (colidx < 0) {            colidx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);        }        for (int i = 0; i < len; i++) {            list[i] = cursor.getInt(colidx);            cursor.moveToNext();        }        return list;    }    public static int [] getSongListForArtist(Context context, int id) {        final String[] ccols = new String[] { MediaStore.Audio.Media._ID };        String where = MediaStore.Audio.Media.ARTIST_ID + "=" + id + " AND " +         MediaStore.Audio.Media.IS_MUSIC + "=1";        Cursor cursor = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                ccols, where, null,                MediaStore.Audio.Media.ALBUM_KEY + ","  + MediaStore.Audio.Media.TRACK);                if (cursor != null) {            int [] list = getSongListForCursor(cursor);            cursor.close();            return list;        }        return sEmptyList;    }    public static int [] getSongListForAlbum(Context context, int id) {        final String[] ccols = new String[] { MediaStore.Audio.Media._ID };        String where = MediaStore.Audio.Media.ALBUM_ID + "=" + id + " AND " +                 MediaStore.Audio.Media.IS_MUSIC + "=1";        Cursor cursor = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                ccols, where, null, MediaStore.Audio.Media.TRACK);        if (cursor != null) {            int [] list = getSongListForCursor(cursor);            cursor.close();            return list;        }        return sEmptyList;    }    public static int [] getSongListForPlaylist(Context context, long plid) {        final String[] ccols = new String[] { MediaStore.Audio.Playlists.Members.AUDIO_ID };        Cursor cursor = query(context, MediaStore.Audio.Playlists.Members.getContentUri("external", plid),                ccols, null, null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER);                if (cursor != null) {            int [] list = getSongListForCursor(cursor);            cursor.close();            return list;        }        return sEmptyList;    }        public static void playPlaylist(Context context, long plid) {        int [] list = getSongListForPlaylist(context, plid);        if (list != null) {            playAll(context, list, -1, false);        }    }    public static int [] getAllSongs(Context context) {        Cursor c = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                new String[] {MediaStore.Audio.Media._ID}, MediaStore.Audio.Media.IS_MUSIC + "=1",                null, null);        try {            if (c == null || c.getCount() == 0) {                return null;            }            int len = c.getCount();            int[] list = new int[len];            for (int i = 0; i < len; i++) {                c.moveToNext();                list[i] = c.getInt(0);            }            return list;        } finally {            if (c != null) {                c.close();            }        }    }    /**     * Fills out the given submenu with items for "new playlist" and     * any existing playlists. When the user selects an item, the     * application will receive PLAYLIST_SELECTED with the Uri of     * the selected playlist, NEW_PLAYLIST if a new playlist     * should be created, and QUEUE if the "current playlist" was     * selected.     * @param context The context to use for creating the menu items     * @param sub The submenu to add the items to.     */    public static void makePlaylistMenu(Context context, SubMenu sub) {        String[] cols = new String[] {                MediaStore.Audio.Playlists._ID,                MediaStore.Audio.Playlists.NAME        };        ContentResolver resolver = context.getContentResolver();        if (resolver == null) {            System.out.println("resolver = null");        } else {            String whereclause = MediaStore.Audio.Playlists.NAME + " != ''";            Cursor cur = resolver.query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,                cols, whereclause, null,                MediaStore.Audio.Playlists.NAME);            sub.clear();            sub.add(1, Defs.QUEUE, 0, R.string.queue);            sub.add(1, Defs.NEW_PLAYLIST, 0, R.string.new_playlist);            if (cur != null && cur.getCount() > 0) {                //sub.addSeparator(1, 0);                cur.moveToFirst();                while (! cur.isAfterLast()) {                    Intent intent = new Intent();                    intent.putExtra("playlist", cur.getInt(0));//                    if (cur.getInt(0) == mLastPlaylistSelected) {//                        sub.add(0, MusicBaseActivity.PLAYLIST_SELECTED, cur.getString(1)).setIntent(intent);//                    } else {                        sub.add(1, Defs.PLAYLIST_SELECTED, 0, cur.getString(1)).setIntent(intent);//                    }                    cur.moveToNext();                }            }            if (cur != null) {                cur.close();            }        }    }    public static void clearPlaylist(Context context, int plid) {        final String[] ccols = new String[] { MediaStore.Audio.Playlists.Members._ID };        Cursor cursor = query(context, MediaStore.Audio.Playlists.Members.getContentUri("external", plid),                ccols, null, null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER);                if (cursor == null) {            return;        }        cursor.moveToFirst();//        while (!cursor.isAfterLast()) {//            cursor.deleteRow();//        }//        cursor.commitUpdates();        cursor.close();        return;    }        public static void deleteTracks(Context context, int [] list) {                String [] cols = new String [] { MediaStore.Audio.Media._ID, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -