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

📄 mediaplaybackactivity.java

📁 Android平台上的media player, iPhone风格
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            int shuffle = MusicUtils.getCurrentShuffleMode();            if (shuffle == MediaPlaybackService.SHUFFLE_AUTO) {                item.setIcon(R.drawable.ic_menu_party_shuffle);                item.setTitle(R.string.party_shuffle_off);            } else {                item.setIcon(R.drawable.ic_menu_party_shuffle);                item.setTitle(R.string.party_shuffle);            }        }        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        Intent intent;        try {            switch (item.getItemId()) {                case GOTO_START:                    intent = new Intent();                    intent.setClass(this, MusicBrowserActivity.class);                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK                            | Intent.FLAG_ACTIVITY_CLEAR_TOP);                    startActivity(intent);                    break;                case USE_AS_RINGTONE: {                    // Set the system setting to make this the current ringtone                    if (mService != null) {                        MusicUtils.setRingtone(this, mService.getAudioId());                    }                    return true;                }                case PARTY_SHUFFLE:                    if (mService != null) {                        int shuffle = mService.getShuffleMode();                        if (shuffle == MediaPlaybackService.SHUFFLE_AUTO) {                            mService.setShuffleMode(MediaPlaybackService.SHUFFLE_NONE);                        } else {                            mService.setShuffleMode(MediaPlaybackService.SHUFFLE_AUTO);                        }                    }                    setShuffleButtonImage();                    break;                                    case NEW_PLAYLIST: {                    intent = new Intent();                    intent.setClass(this, CreatePlaylist.class);                    startActivityForResult(intent, NEW_PLAYLIST);                    return true;                }                case PLAYLIST_SELECTED: {                    int [] list = new int[1];                    list[0] = MusicUtils.getCurrentAudioId();                    int playlist = item.getIntent().getIntExtra("playlist", 0);                    MusicUtils.addToPlaylist(this, list, playlist);                    return true;                }                                case DELETE_ITEM: {                    if (mService != null) {                        int [] list = new int[1];                        list[0] = MusicUtils.getCurrentAudioId();                        Bundle b = new Bundle();                        b.putString("description", mService.getTrackName());                        b.putIntArray("items", list);                        intent = new Intent();                        intent.setClass(this, DeleteItems.class);                        intent.putExtras(b);                        startActivityForResult(intent, -1);                    }                    return true;                }            }        } catch (RemoteException ex) {        }        return super.onOptionsItemSelected(item);    }        @Override    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {        if (resultCode != RESULT_OK) {            return;        }        switch (requestCode) {            case NEW_PLAYLIST:                Uri uri = Uri.parse(intent.getAction());                if (uri != null) {                    int [] list = new int[1];                    list[0] = MusicUtils.getCurrentAudioId();                    int playlist = Integer.parseInt(uri.getLastPathSegment());                    MusicUtils.addToPlaylist(this, list, playlist);                }                break;        }    }    private final int keyboard[][] = {        {            KeyEvent.KEYCODE_Q,            KeyEvent.KEYCODE_W,            KeyEvent.KEYCODE_E,            KeyEvent.KEYCODE_R,            KeyEvent.KEYCODE_T,            KeyEvent.KEYCODE_Y,            KeyEvent.KEYCODE_U,            KeyEvent.KEYCODE_I,            KeyEvent.KEYCODE_O,            KeyEvent.KEYCODE_P,        },        {            KeyEvent.KEYCODE_A,            KeyEvent.KEYCODE_S,            KeyEvent.KEYCODE_D,            KeyEvent.KEYCODE_F,            KeyEvent.KEYCODE_G,            KeyEvent.KEYCODE_H,            KeyEvent.KEYCODE_J,            KeyEvent.KEYCODE_K,            KeyEvent.KEYCODE_L,            KeyEvent.KEYCODE_DEL,        },        {            KeyEvent.KEYCODE_Z,            KeyEvent.KEYCODE_X,            KeyEvent.KEYCODE_C,            KeyEvent.KEYCODE_V,            KeyEvent.KEYCODE_B,            KeyEvent.KEYCODE_N,            KeyEvent.KEYCODE_M,            KeyEvent.KEYCODE_COMMA,            KeyEvent.KEYCODE_PERIOD,            KeyEvent.KEYCODE_ENTER        }    };    private int lastX;    private int lastY;    private boolean seekMethod1(int keyCode)    {        for(int x=0;x<10;x++) {            for(int y=0;y<3;y++) {                if(keyboard[y][x] == keyCode) {                    int dir = 0;                    // top row                    if(x == lastX && y == lastY) dir = 0;                    else if (y == 0 && lastY == 0 && x > lastX) dir = 1;                    else if (y == 0 && lastY == 0 && x < lastX) dir = -1;                    // bottom row                    else if (y == 2 && lastY == 2 && x > lastX) dir = -1;                    else if (y == 2 && lastY == 2 && x < lastX) dir = 1;                    // moving up                    else if (y < lastY && x <= 4) dir = 1;                     else if (y < lastY && x >= 5) dir = -1;                     // moving down                    else if (y > lastY && x <= 4) dir = -1;                     else if (y > lastY && x >= 5) dir = 1;                     lastX = x;                    lastY = y;                    try {                        mService.seek(mService.position() + dir * 5);                    } catch (RemoteException ex) {                    }                    refreshNow();                    return true;                }            }        }        lastX = -1;        lastY = -1;        return false;    }    private boolean seekMethod2(int keyCode)    {        if (mService == null) return false;        for(int i=0;i<10;i++) {            if(keyboard[0][i] == keyCode) {                int seekpercentage = 100*i/10;                try {                    mService.seek(mService.duration() * seekpercentage / 100);                } catch (RemoteException ex) {                }                refreshNow();                return true;            }        }        return false;    }    @Override    public boolean onKeyUp(int keyCode, KeyEvent event) {        try {            switch(keyCode)            {                case KeyEvent.KEYCODE_DPAD_LEFT:                    if (mTrackball) {                        break;                    }                    if (mService != null) {                        if (!mSeeking && mStartSeekPos >= 0) {                            mPauseButton.requestFocus();                            if (mStartSeekPos < 1000) {                                mService.prev();                            } else {                                mService.seek(0);                            }                        } else {                            scanBackward(-1, event.getEventTime() - event.getDownTime());                            mPauseButton.requestFocus();                            mStartSeekPos = -1;                        }                    }                    mSeeking = false;                    mPosOverride = -1;                    return true;                case KeyEvent.KEYCODE_DPAD_RIGHT:                    if (mTrackball) {                        break;                    }                    if (mService != null) {                        if (!mSeeking && mStartSeekPos >= 0) {                            mPauseButton.requestFocus();                            mService.next();                        } else {                            scanForward(-1, event.getEventTime() - event.getDownTime());                            mPauseButton.requestFocus();                            mStartSeekPos = -1;                        }                    }                    mSeeking = false;                    mPosOverride = -1;                    return true;            }        } catch (RemoteException ex) {        }        return super.onKeyUp(keyCode, event);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event)    {        int direction = -1;        int repcnt = event.getRepeatCount();        if((seekmethod==0)?seekMethod1(keyCode):seekMethod2(keyCode))            return true;        switch(keyCode)        {/*            // image scale            case KeyEvent.KEYCODE_Q: av.adjustParams(-0.05, 0.0, 0.0, 0.0, 0.0,-1.0); break;            case KeyEvent.KEYCODE_E: av.adjustParams( 0.05, 0.0, 0.0, 0.0, 0.0, 1.0); break;            // image translate            case KeyEvent.KEYCODE_W: av.adjustParams(    0.0, 0.0,-1.0, 0.0, 0.0, 0.0); break;            case KeyEvent.KEYCODE_X: av.adjustParams(    0.0, 0.0, 1.0, 0.0, 0.0, 0.0); break;            case KeyEvent.KEYCODE_A: av.adjustParams(    0.0,-1.0, 0.0, 0.0, 0.0, 0.0); break;            case KeyEvent.KEYCODE_D: av.adjustParams(    0.0, 1.0, 0.0, 0.0, 0.0, 0.0); break;            // camera rotation            case KeyEvent.KEYCODE_R: av.adjustParams(    0.0, 0.0, 0.0, 0.0, 0.0,-1.0); break;            case KeyEvent.KEYCODE_U: av.adjustParams(    0.0, 0.0, 0.0, 0.0, 0.0, 1.0); break;            // camera translate            case KeyEvent.KEYCODE_Y: av.adjustParams(    0.0, 0.0, 0.0, 0.0,-1.0, 0.0); break;            case KeyEvent.KEYCODE_N: av.adjustParams(    0.0, 0.0, 0.0, 0.0, 1.0, 0.0); break;            case KeyEvent.KEYCODE_G: av.adjustParams(    0.0, 0.0, 0.0,-1.0, 0.0, 0.0); break;            case KeyEvent.KEYCODE_J: av.adjustParams(    0.0, 0.0, 0.0, 1.0, 0.0, 0.0); break;*/            case KeyEvent.KEYCODE_SLASH:                seekmethod = 1 - seekmethod;                return true;            case KeyEvent.KEYCODE_DPAD_LEFT:                if (mTrackball) {                    break;                }                if (!mPrevButton.hasFocus()) {                    mPrevButton.requestFocus();                }                scanBackward(repcnt, event.getEventTime() - event.getDownTime());                return true;            case KeyEvent.KEYCODE_DPAD_RIGHT:                if (mTrackball) {                    break;                }                if (!mNextButton.hasFocus()) {                    mNextButton.requestFocus();                }                scanForward(repcnt, event.getEventTime() - event.getDownTime());                return true;            case KeyEvent.KEYCODE_S:                toggleShuffle();                return true;            case KeyEvent.KEYCODE_DPAD_CENTER:            case KeyEvent.KEYCODE_SPACE:                doPauseResume();                return true;        }        return super.onKeyDown(keyCode, event);    }        private void scanBackward(int repcnt, long delta) {        if(mService == null) return;        try {            if(repcnt == 0) {                mStartSeekPos = mService.position();                mLastSeekEventTime = 0;                mSeeking = false;            } else {                mSeeking = true;                if (delta < 5000) {                    // seek at 10x speed for the first 5 seconds                    delta = delta * 10;                 } else {                    // seek at 40x after that                    delta = 50000 + (delta - 5000) * 40;                }                long newpos = mStartSeekPos - delta;                if (newpos < 0) {                    // move to previous track                    mService.prev();                    long duration = mService.duration();                    mStartSeekPos += duration;                    newpos += duration;                }                if (((delta - mLastSeekEventTime) > 250) || repcnt < 0){                    mService.seek(newpos);                    mLastSeekEventTime = delta;                }                if (repcnt >= 0) {                    mPosOverride = newpos;                } else {                    mPosOverride = -1;                }                refreshNow();            }        } catch (RemoteException ex) {        }    }    private void scanForward(int repcnt, long delta) {        if(mService == null) return;        try {            if(repcnt == 0) {                mStartSeekPos = mService.position();                mLastSeekEventTime = 0;                mSeeking = false;            } else {                mSeeking = true;                if (delta < 5000) {                    // seek at 10x speed for the first 5 seconds                    delta = delta * 10;                 } else {                    // seek at 40x after that                    delta = 50000 + (delta - 5000) * 40;                }                long newpos = mStartSeekPos + delta;                long duration = mService.duration();                if (newpos >= duration) {                    // move to next track                    mService.next();                    mStartSeekPos -= duration; // is OK to go negative                    newpos -= duration;                }                if (((delta - mLastSeekEventTime) > 250) || repcnt < 0){                    mService.seek(newpos);                    mLastSeekEventTime = delta;                }                if (repcnt >= 0) {                    mPosOverride = newpos;                } else {                    mPosOverride = -1;                }                refreshNow();            }        } catch (RemoteException ex) {        }    }        private void doPauseResume() {        try {            if(mService != null) {                if (mService.isPlaying()) {                    mService.pause();                } else {                    mService.play();                }                refreshNow();                setPauseButtonImage();            }        } catch (RemoteException ex) {        }    }        private void toggleShuffle() {

⌨️ 快捷键说明

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