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

📄 mediapickeractivity.java

📁 Android平台上的media player, iPhone风格
💻 JAVA
字号:
/* * Copyright (C) 2007 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 com.android.internal.database.SortCursor;import android.app.ListActivity;import android.content.Context;import android.content.Intent;import android.content.ContentUris;import android.database.Cursor;import android.media.MediaFile;import android.net.Uri;import android.os.Bundle;import android.os.RemoteException;import android.provider.MediaStore;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import java.util.ArrayList;public class MediaPickerActivity extends ListActivity implements MusicUtils.Defs{    public MediaPickerActivity()    {    }    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle icicle)    {        super.onCreate(icicle);        mFirstYear = getIntent().getStringExtra("firstyear");        mLastYear = getIntent().getStringExtra("lastyear");        if (mFirstYear == null) {            setTitle(R.string.all_title);        } else if (mFirstYear.equals(mLastYear)) {            setTitle(mFirstYear);        } else {            setTitle(mFirstYear + "-" + mLastYear);        }        MusicUtils.bindToService(this);        init();    }    @Override    public void onDestroy() {        MusicUtils.unbindFromService(this);        super.onDestroy();    }    public void init() {        setContentView(R.layout.media_picker_activity);        MakeCursor();        if (null == mCursor || 0 == mCursor.getCount()) {            return;        }        PickListAdapter adapter = new PickListAdapter(                this,                R.layout.track_list_item,                mCursor,                new String[] {},                new int[] {});        setListAdapter(adapter);    }    @Override    protected void onListItemClick(ListView l, View v, int position, long id)    {        mCursor.moveToPosition(position);        String type = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE));        String action = getIntent().getAction();        if (Intent.ACTION_GET_CONTENT.equals(action)) {            Uri uri;            long mediaId;            if (type.startsWith("video")) {                uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;                mediaId = mCursor.getLong(mCursor.getColumnIndex(MediaStore.Video.Media._ID));            } else {                uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;                mediaId = mCursor.getLong(mCursor.getColumnIndex(MediaStore.Audio.Media._ID));            }            setResult(RESULT_OK, new Intent().setData(ContentUris.withAppendedId(uri, mediaId)));            finish();            return;        }        // Need to stop the playbackservice, in case it is busy playing audio        // and the user selected a video.        if (MusicUtils.sService != null) {            try {                MusicUtils.sService.stop();            } catch (RemoteException ex) {            }        }        Intent intent = new Intent(Intent.ACTION_VIEW);        intent.setDataAndType(ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id), type);        startActivity(intent);    }    private void MakeCursor() {        String[] audiocols = new String[] {                MediaStore.Audio.Media._ID,                MediaStore.Audio.Media.ARTIST,                MediaStore.Audio.Media.ALBUM,                MediaStore.Audio.Media.TITLE,                MediaStore.Audio.Media.DATA,                MediaStore.Audio.Media.MIME_TYPE,                MediaStore.Audio.Media.YEAR        };        String[] videocols = new String[] {                MediaStore.Audio.Media._ID,                MediaStore.Audio.Media.TITLE,                MediaStore.Audio.Media.ARTIST,                MediaStore.Audio.Media.ALBUM,                MediaStore.Audio.Media.TITLE,                MediaStore.Audio.Media.DATA,                MediaStore.Audio.Media.MIME_TYPE        };        Cursor[] cs;        // Use ArrayList for the moment, since we don't know the size of        // Cursor[]. If the length of Corsor[] larger than really used,        // a NPE will come up when access the content of Corsor[].        ArrayList<Cursor> cList = new ArrayList<Cursor>();        Intent intent = getIntent();        String type = intent.getType();        if (mFirstYear != null) {            // If mFirstYear is not null, the picker only for audio because            // video has no year column.            if(type.equals("video/*")) {                mCursor = null;                return;            }            mWhereClause = MediaStore.Audio.Media.YEAR + ">=" + mFirstYear + " AND " +                           MediaStore.Audio.Media.YEAR + "<=" + mLastYear;        }        // If use Cursor[] as before, the Cursor[i] could be null when there is        // no video/audio/sdcard. Then a NPE will come up when access the content of the        // Array.        Cursor c;        if (type.equals("video/*")) {            // Only video.            c = MusicUtils.query(this, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,                    videocols, null , null, mSortOrder);            if (c != null) {                cList.add(c);            }        } else {            c = MusicUtils.query(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                    audiocols, mWhereClause , null, mSortOrder);            if (c != null) {                cList.add(c);            }            if (mFirstYear == null && intent.getType().equals("media/*")) {                // video has no year column                c = MusicUtils.query(this, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,                    videocols, null , null, mSortOrder);                if (c != null) {                    cList.add(c);                }            }        }        // Get the ArrayList size.        int size = cList.size();        if (0 == size) {            // If no video/audio/SDCard exist, return.            mCursor = null;            return;        }        // The size is known now, we're sure each item of Cursor[] is not null.        cs = new Cursor[size];        cs = cList.toArray(cs);        mCursor = new SortCursor(cs, MediaStore.Audio.Media.TITLE);    }    private Cursor mCursor;    private String mSortOrder = MediaStore.Audio.Media.TITLE + " COLLATE UNICODE";    private String mFirstYear;    private String mLastYear;    private String mWhereClause;    class PickListAdapter extends SimpleCursorAdapter {        int mTitleIdx;        int mArtistIdx;        int mAlbumIdx;        int mMimeIdx;        PickListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {            super(context, layout, cursor, from, to);            mTitleIdx = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);            mArtistIdx = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);            mAlbumIdx = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);            mMimeIdx = cursor.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE);        }                @Override        public View newView(Context context, Cursor cursor, ViewGroup parent) {           View v = super.newView(context, cursor, parent);           ImageView iv = (ImageView) v.findViewById(R.id.icon);           iv.setVisibility(View.VISIBLE);           ViewGroup.LayoutParams p = iv.getLayoutParams();           p.width = ViewGroup.LayoutParams.WRAP_CONTENT;           p.height = ViewGroup.LayoutParams.WRAP_CONTENT;           TextView tv = (TextView) v.findViewById(R.id.duration);           tv.setVisibility(View.GONE);//           iv = (ImageView) v.findViewById(R.id.play_indicator);//           iv.setVisibility(View.GONE);                      return v;        }        @Override        public void bindView(View view, Context context, Cursor cursor) {            TextView tv = (TextView) view.findViewById(R.id.line1);            String name = cursor.getString(mTitleIdx);            tv.setText(name);                        tv = (TextView) view.findViewById(R.id.line2);            name = cursor.getString(mAlbumIdx);            StringBuilder builder = new StringBuilder();            if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {                builder.append(context.getString(R.string.unknown_album_name));            } else {                builder.append(name);            }            builder.append("\n");            name = cursor.getString(mArtistIdx);            if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {                builder.append(context.getString(R.string.unknown_artist_name));            } else {                builder.append(name);            }            tv.setText(builder.toString());            String text = cursor.getString(mMimeIdx);            ImageView iv = (ImageView) view.findViewById(R.id.icon);;            if("audio/midi".equals(text)) {                iv.setImageResource(R.drawable.midi);            } else if(text != null && (text.startsWith("audio") ||                    text.equals("application/ogg") ||                    text.equals("application/x-ogg"))) {                iv.setImageResource(R.drawable.ic_search_category_music_song);            } else if(text != null && text.startsWith("video")) {                iv.setImageResource(R.drawable.movie);            } else {                iv.setImageResource(0);            }        }    }}

⌨️ 快捷键说明

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