Android内容提供器实现导入手机中的全部歌曲

来源:互联网 发布:淘宝买家vip等级 编辑:程序博客网 时间:2024/04/28 02:32

Android想要获取不同手机内存卡中的内容,要使用内容提供器。

下面介绍我所做的一个可以播放音乐,并且可以导入手机中所有音频的demo。

首先讲一下思路:

活动中开启线程,实例化内容提供器对象ContentResolver,实例化cusor对象,扫描sdcard,踢除相应的图片文件信息,获取音频的路径,音频的名称等信息,储存到早已封装好的音乐对象类:MusicFile当中,并存入容器当中以便备用,当整个扫描完成后,将信息告诉handler,让其处理UI线程中的变化。

这里使用了一个封装音乐信息的MusicFile类,和一个可以筛选图片文件的util类,最后一个实现主要功能的Activity,

public class MainActivity extends AppCompatActivity {    private final static int MUSIC_SCARCH_FINISH = 1;//音乐扫描完成    private List<MusicFile> musicFiles=new ArrayList<MusicFile>();    private Button play;    private Button pause;    private Button reset,OK;    private TextView music;    private EditText id;    public static  MediaPlayer player=new MediaPlayer();    ContentResolver contentResolver;    public static int ID;    private Handler mHandler=new Handler(){        public void handleMessage(Message msg) {            switch (msg.what) {                case MUSIC_SCARCH_FINISH://音乐扫描完成                 //这里进行UI操作                    for(int i=0;i<musicFiles.size();i++){                        music.append(musicFiles.get(i).getID()+" "+musicFiles.get(i).getName()+"\n");                    }                    break;            }        };    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ActionBar actionBar=getSupportActionBar();        actionBar.setTitle("MyPlayer");        play=(Button)findViewById(R.id.play);        pause=(Button)findViewById(R.id.pause);        reset=(Button)findViewById(R.id.reset);        OK=(Button)findViewById(R.id.OK);        music=(TextView)findViewById(R.id.music);        id=(EditText)findViewById(R.id.id);        getMusicFloder();        OK.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {             ID=(int)Integer.parseInt(id.getText().toString());                player.reset();                try {                    player.setDataSource(musicFiles.get(ID).getDir());                    player.prepare();                } catch (IOException e) {                    e.printStackTrace();                }                player.start();            }        });        contentResolver=getContentResolver();        int i=0;        play.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(!player.isPlaying()){                    player.start();                }            }        });        pause.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(player.isPlaying())player.pause();            }        });        reset.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                player.reset();                try {                    player.setDataSource(musicFiles.get(ID).getDir());                    player.prepare();                } catch (IOException e) {                    e.printStackTrace();                }                ;//这里一定要先进行reset再进行重置            }        });    }    private void getMusicFloder() {        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {            Toast.makeText(this, "没有sdcard", Toast.LENGTH_LONG).show();            return;        }        new Thread(new Runnable() {            @Override            public void run() {                //查询音乐                Uri mImageUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;                ContentResolver mContentResolver = MainActivity.this.getContentResolver();                String selection= MediaStore.Audio.Media.MIME_TYPE + "=? ";                String[] selectionArgs=new String[]{"audio/mpeg"};                Cursor mCursor = mContentResolver.query(mImageUri,null,selection,selectionArgs, MediaStore.Audio.Media.DATE_MODIFIED);                int i=0;                while (mCursor.moveToNext()) {                    String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.DATA));                    int duration= mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media.DURATION));                    MusicFile musicFile=new MusicFile();                    musicFile.setDir(path);                    musicFile.setId(i);                    i++;                    musicFile.setMusicDuration(duration);                    musicFiles.add(musicFile);                }                mCursor.close();                // 通知Handler扫描图片完成                mHandler.sendEmptyMessage(MUSIC_SCARCH_FINISH);            }        }).start();    }}

public class MusicFile{    private int id;    private String dir;//音乐绝对路径    private String name;//音乐名称    private int musicDuration;//音乐时长    public String getDir() {        return dir;    }    public void setDir(String dir) {        this.dir = dir;        int lastIndexOf = this.dir.lastIndexOf("/");        this.name = this.dir.substring(lastIndexOf);    }    public String getName() {        return name;    }    public int getMusicDuration() {        return musicDuration;    }
public class Utils {     public static boolean isImage(String fileName){        if (fileName.endsWith(".jpg")|| fileName.endsWith(".JPG")|| fileName.endsWith(".png")|| fileName.endsWith(".PNG")                || fileName.endsWith(".jpeg")|| fileName.endsWith(".JPEG")|| fileName.endsWith(".gif")|| fileName.endsWith(".GIF"))            return true;        return false;    }       public static String getStringByResId(Context context, int resId){        return context.getString(resId);    }    public static String getMusicDuration(int duration){        SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");        return sdf.format(duration);    }}

public void setMusicDuration(int musicDuration) { this.musicDuration = musicDuration; } public void setId(int id){ this.id=id; } public int getID(){ return id; }}
如此已经实现了导入手机中的全部歌曲并使用MediaPlayer进行播放。

                                             
0 0
原创粉丝点击