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

📄 mediaplaybackactivity.java

📁 Android平台上的media player, iPhone风格
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        if (mService == null) {            return;        }        try {            int shuffle = mService.getShuffleMode();            if (shuffle == MediaPlaybackService.SHUFFLE_NONE) {                mService.setShuffleMode(MediaPlaybackService.SHUFFLE_NORMAL);                if (mService.getRepeatMode() == MediaPlaybackService.REPEAT_CURRENT) {                    mService.setRepeatMode(MediaPlaybackService.REPEAT_ALL);                    setRepeatButtonImage();                }                showToast(R.string.shuffle_on_notif);            } else if (shuffle == MediaPlaybackService.SHUFFLE_NORMAL ||                    shuffle == MediaPlaybackService.SHUFFLE_AUTO) {                mService.setShuffleMode(MediaPlaybackService.SHUFFLE_NONE);                showToast(R.string.shuffle_off_notif);            } else {                Log.e("MediaPlaybackActivity", "Invalid shuffle mode: " + shuffle);            }            setShuffleButtonImage();        } catch (RemoteException ex) {        }    }        private void cycleRepeat() {        if (mService == null) {            return;        }        try {            int mode = mService.getRepeatMode();            if (mode == MediaPlaybackService.REPEAT_NONE) {                mService.setRepeatMode(MediaPlaybackService.REPEAT_ALL);                showToast(R.string.repeat_all_notif);            } else if (mode == MediaPlaybackService.REPEAT_ALL) {                mService.setRepeatMode(MediaPlaybackService.REPEAT_CURRENT);                if (mService.getShuffleMode() != MediaPlaybackService.SHUFFLE_NONE) {                    mService.setShuffleMode(MediaPlaybackService.SHUFFLE_NONE);                    setShuffleButtonImage();                }                showToast(R.string.repeat_current_notif);            } else {                mService.setRepeatMode(MediaPlaybackService.REPEAT_NONE);                showToast(R.string.repeat_off_notif);            }            setRepeatButtonImage();        } catch (RemoteException ex) {        }            }        private void showToast(int resid) {        if (mToast == null) {            mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);        }        mToast.setText(resid);        mToast.show();    }    private void startPlayback() {        if(mService == null)            return;        Intent intent = getIntent();        String filename = "";        Uri uri = intent.getData();        if (uri != null && uri.toString().length() > 0) {            // If this is a file:// URI, just use the path directly instead            // of going through the open-from-filedescriptor codepath.            String scheme = uri.getScheme();            if ("file".equals(scheme)) {                filename = uri.getPath();            } else {                filename = uri.toString();            }            try {                mOneShot = true;                if (! mRelaunchAfterConfigChange) {                    mService.stop();                    mService.openfile(filename);                    mService.play();                }            } catch (Exception ex) {                Log.d("MediaPlaybackActivity", "couldn't start playback: " + ex);            }        }        updateTrackInfo();        long next = refreshNow();        queueNextRefresh(next);    }    private ServiceConnection osc = new ServiceConnection() {            public void onServiceConnected(ComponentName classname, IBinder obj) {                mService = IMediaPlaybackService.Stub.asInterface(obj);                if (MusicUtils.sService == null) {                    MusicUtils.sService = mService;                }                startPlayback();                try {                    // Assume something is playing when the service says it is,                    // but also if the audio ID is valid but the service is paused.                    if (mService.getAudioId() >= 0 || mService.isPlaying() ||                            mService.getPath() != null) {                        // something is playing now, we're done                        if (mOneShot) {                            mRepeatButton.setVisibility(View.INVISIBLE);                            mShuffleButton.setVisibility(View.INVISIBLE);                            mQueueButton.setVisibility(View.INVISIBLE);                        } else {                            mRepeatButton.setVisibility(View.VISIBLE);                            mShuffleButton.setVisibility(View.VISIBLE);                            mQueueButton.setVisibility(View.VISIBLE);                            setRepeatButtonImage();                            setShuffleButtonImage();                        }                        setPauseButtonImage();                        return;                    }                } catch (RemoteException ex) {                }                // Service is dead or not playing anything. If we got here as part                // of a "play this file" Intent, exit. Otherwise go to the Music                // app start screen.                if (getIntent().getData() == null) {                    Intent intent = new Intent(Intent.ACTION_MAIN);                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                    intent.setClass(MediaPlaybackActivity.this, MusicBrowserActivity.class);                    startActivity(intent);                }                finish();            }            public void onServiceDisconnected(ComponentName classname) {            }    };    private void setRepeatButtonImage() {        try {            switch (mService.getRepeatMode()) {                case MediaPlaybackService.REPEAT_ALL:                    mRepeatButton.setImageResource(R.drawable.ic_mp_repeat_all_btn);                    break;                case MediaPlaybackService.REPEAT_CURRENT:                    mRepeatButton.setImageResource(R.drawable.ic_mp_repeat_once_btn);                    break;                default:                    mRepeatButton.setImageResource(R.drawable.ic_mp_repeat_off_btn);                    break;            }        } catch (RemoteException ex) {        }    }        private void setShuffleButtonImage() {        try {            switch (mService.getShuffleMode()) {                case MediaPlaybackService.SHUFFLE_NONE:                    mShuffleButton.setImageResource(R.drawable.ic_mp_shuffle_off_btn);                    break;                case MediaPlaybackService.SHUFFLE_AUTO:                    mShuffleButton.setImageResource(R.drawable.ic_mp_partyshuffle_on_btn);                    break;                default:                    mShuffleButton.setImageResource(R.drawable.ic_mp_shuffle_on_btn);                    break;            }        } catch (RemoteException ex) {        }    }        private void setPauseButtonImage() {        try {            if (mService != null && mService.isPlaying()) {                mPauseButton.setImageResource(android.R.drawable.ic_media_pause);            } else {                mPauseButton.setImageResource(android.R.drawable.ic_media_play);            }        } catch (RemoteException ex) {        }    }        private AlbumView mAlbum;    private TextView mCurrentTime;    private TextView mTotalTime;    private TextView mArtistName;    private TextView mAlbumName;    private TextView mTrackName;    private ProgressBar mProgress;    private long mPosOverride = -1;    private long mDuration;    private int seekmethod;    private boolean paused;    private static final int REFRESH = 1;    private static final int QUIT = 2;    private static final int GET_ALBUM_ART = 3;    private static final int ALBUM_ART_DECODED = 4;    private void queueNextRefresh(long delay) {        if (!paused) {            Message msg = mHandler.obtainMessage(REFRESH);            mHandler.removeMessages(REFRESH);            mHandler.sendMessageDelayed(msg, delay);        }    }    private long refreshNow() {        if(mService == null)            return 500;        try {            long pos = mPosOverride < 0 ? mService.position() : mPosOverride;            long remaining = 1000 - (pos % 1000);            if ((pos >= 0) && (mDuration > 0)) {                mCurrentTime.setText(MusicUtils.makeTimeString(this, pos / 1000));                                if (mService.isPlaying()) {                    mCurrentTime.setVisibility(View.VISIBLE);                } else {                    // blink the counter                    int vis = mCurrentTime.getVisibility();                    mCurrentTime.setVisibility(vis == View.INVISIBLE ? View.VISIBLE : View.INVISIBLE);                    remaining = 500;                }                mProgress.setProgress((int) (1000 * pos / mDuration));            } else {                mCurrentTime.setText("--:--");                mProgress.setProgress(1000);            }            // return the number of milliseconds until the next full second, so            // the counter can be updated at just the right time            return remaining;        } catch (RemoteException ex) {        }        return 500;    }        private final Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case ALBUM_ART_DECODED:                    mAlbum.setArtwork((Bitmap)msg.obj);                    mAlbum.invalidate();                    break;                case REFRESH:                    long next = refreshNow();                    queueNextRefresh(next);                    break;                                    case QUIT:                    // This can be moved back to onCreate once the bug that prevents                    // Dialogs from being started from onCreate/onResume is fixed.                    new AlertDialog.Builder(MediaPlaybackActivity.this)                            .setTitle(R.string.service_start_error_title)                            .setMessage(R.string.service_start_error_msg)                            .setPositiveButton(R.string.service_start_error_button,                                    new DialogInterface.OnClickListener() {                                        public void onClick(DialogInterface dialog, int whichButton) {                                            finish();                                        }                                    })                            .setCancelable(false)                            .show();                    break;                default:                    break;            }        }    };    private BroadcastReceiver mStatusListener = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            if (action.equals(MediaPlaybackService.META_CHANGED)) {                // redraw the artist/title info and                // set new max for progress bar                updateTrackInfo();                setPauseButtonImage();                queueNextRefresh(1);            } else if (action.equals(MediaPlaybackService.PLAYBACK_COMPLETE)) {                if (mOneShot) {                    finish();                } else {                    setPauseButtonImage();                }            } else if (action.equals(MediaPlaybackService.PLAYSTATE_CHANGED)) {                setPauseButtonImage();            }        }    };    private void updateTrackInfo() {        if (mService == null) {            return;        }        try {            if (mService.getPath() == null) {                finish();                return;            }            String artistName = mService.getArtistName();            if (MediaFile.UNKNOWN_STRING.equals(artistName)) {                artistName = getString(R.string.unknown_artist_name);            }            mArtistName.setText(artistName);            String albumName = mService.getAlbumName();            int albumid = mService.getAlbumId();            if (MediaFile.UNKNOWN_STRING.equals(albumName)) {                albumName = getString(R.string.unknown_album_name);                albumid = -1;            }            mAlbumName.setText(albumName);            mTrackName.setText(mService.getTrackName());            mAlbumArtHandler.removeMessages(GET_ALBUM_ART);            mAlbumArtHandler.obtainMessage(GET_ALBUM_ART, albumid, 0).sendToTarget();            mDuration = mService.duration();            mTotalTime.setText(MusicUtils.makeTimeString(this, mDuration / 1000));        } catch (RemoteException ex) {            finish();        }    }        public class AlbumArtHandler extends Handler {        private int mAlbumId = -1;                public AlbumArtHandler(Looper looper) {            super(looper);        }        public void handleMessage(Message msg)        {            int albumid = msg.arg1;            if (msg.what == GET_ALBUM_ART && (mAlbumId != albumid || albumid < 0)) {                // while decoding the new image, show the default album art                Message numsg = mHandler.obtainMessage(ALBUM_ART_DECODED, null);                mHandler.removeMessages(ALBUM_ART_DECODED);                mHandler.sendMessageDelayed(numsg, 300);                Bitmap bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, albumid);                if (bm == null) {                    bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, -1);                    albumid = -1;                }                if (bm != null) {                    numsg = mHandler.obtainMessage(ALBUM_ART_DECODED, bm);                    mHandler.removeMessages(ALBUM_ART_DECODED);                    mHandler.sendMessage(numsg);                }                mAlbumId = albumid;            }        }    }        private class Worker implements Runnable {        private final Object mLock = new Object();        private Looper mLooper;                /**         * Creates a worker thread with the given name. The thread         * then runs a {@link android.os.Looper}.         * @param name A name for the new thread         */        Worker(String name) {            Thread t = new Thread(null, this, name);            t.setPriority(Thread.MIN_PRIORITY);            t.start();            synchronized (mLock) {                while (mLooper == null) {                    try {                        mLock.wait();                    } catch (InterruptedException ex) {                    }                }            }        }                public Looper getLooper() {            return mLooper;        }                public void run() {            synchronized (mLock) {                Looper.prepare();                mLooper = Looper.myLooper();                mLock.notifyAll();            }            Looper.loop();        }                public void quit() {            mLooper.quit();        }    }}

⌨️ 快捷键说明

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