话不多说,上代码

MainActivity.java

public class MainActivity extends AppCompatActivity implements ServiceConnection {    private static final String TAG = "MainActivity";    ImageView img_play;    boolean isPlaying;    MusicService musicService;    ListView listView;    List mediaBeanList;    BaseAdapter mAdapter;    String[] needPermissons=new String[]{            "android.permission.READ_EXTERNAL_STORAGE"    };    int mCuurentItem=0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bindService(new Intent(this,MusicService.class),this, Context.BIND_AUTO_CREATE);//绑定Service        img_play=findViewById(R.id.media_paly);        img_play.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                musicService.playMusic(mediaBeanList.get(mCuurentItem).path);            }        });        mediaBeanList=new ArrayList<>();        listView=findViewById(R.id.listview);        mAdapter=new BaseAdapter() {            @Override            public int getCount() {                return mediaBeanList.size();            }            @Override            public Object getItem(int i) {                return mediaBeanList.get(i);            }            @Override            public long getItemId(int i) {                return i;            }            @Override            public View getView(int i, View view, ViewGroup viewGroup) {                TextView textview;                if(view==null){                    textview=new TextView(MainActivity.this);                }                else {                    textview=(TextView) view;                }                if(mCuurentItem==i){                    textview.setBackgroundColor(Color.YELLOW);                }else {                    textview.setBackgroundColor(Color.WHITE);                }                textview.setText(mediaBeanList.get(i).display_name);                return textview;            }        };        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                mCuurentItem=i;                mAdapter.notifyDataSetChanged();            }        });        listView.setAdapter(mAdapter);        initData();    }    public void initData(){        checkPermisson();        getAllMediaList(MediaStore.Audio.Media.DISPLAY_NAME+" like '%mp3'");        //Log.d(TAG,mediaBeanList.size()+"");    }    public  void getAllMediaList( String selection) {        Cursor cursor = null;        try {            cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                    new String[] {                            MediaStore.Audio.Media._ID,                            MediaStore.Audio.Media.TITLE,                            MediaStore.Audio.Media.DISPLAY_NAME,                            MediaStore.Audio.Media.DURATION,                            MediaStore.Audio.Media.ARTIST,                            MediaStore.Audio.Media.DATA,                            MediaStore.Audio.Media.SIZE},                    selection, null, MediaStore.Audio.Media.DATE_ADDED + " DESC");            if(cursor == null) {                Log.d(TAG, "The getMediaList cursor is null.");                return ;            }            int count= cursor.getCount();            if(count <= 0) {                Log.d(TAG, "The getMediaList cursor count is 0.");                return ;            }            MediaBean mediaEntity = null;//String[] columns = cursor.getColumnNames();            while (cursor.moveToNext()) {                mediaEntity = new MediaBean();                mediaEntity.id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));                mediaEntity.title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));                mediaEntity.display_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));                mediaEntity.duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));                mediaEntity.size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));                mediaEntity.artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));                mediaEntity.path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));                mediaBeanList.add(mediaEntity);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if(cursor != null) {                cursor.close();            }            mAdapter.notifyDataSetChanged();        }    }    public void checkPermisson() {        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {            //检查权限            List mRequestPermission=new ArrayList<>();            for (String one : needPermissons) {                if (PackageManager.PERMISSION_GRANTED != this.checkPermission(one, Process.myPid(), Process.myUid())) {                    mRequestPermission.add(one);                }            }            //申请            if (!mRequestPermission.isEmpty()) {                this.requestPermissions(mRequestPermission.toArray(new String[mRequestPermission.size()]), 0x99);                return;            }        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == 0x99) {            boolean allGrant=true;            for (int i = 0; i < grantResults.length; i++) {                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {                    allGrant=false;                }            }            if(allGrant){                getAllMediaList(null);            }        }    }    @Override    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {        MusicService.MyBinder myBinder=(MusicService.MyBinder)iBinder;        musicService=myBinder.getService();        if(mediaBeanList.size()>0) {            musicService.playMusic(mediaBeanList.get(mCuurentItem).path);        }        Toast.makeText(this, "ssssss", Toast.LENGTH_SHORT).show();    }    @Override    public void onServiceDisconnected(ComponentName componentName) {    }}

MusicService.java

public class MusicService extends Service {    MusicListener musicListener;    MediaPlayer mediaPlayer;    boolean isPlaying=false;    @Override    public IBinder onBind(Intent intent) {        mediaPlayer=new MediaPlayer();        return getBinder();    }    public IBinder getBinder(){        return new MyBinder();    }    public class MyBinder extends Binder {        public MusicService getService(){            return MusicService.this;        }    }    public void setMusicListener(MusicListener musicListener) {        this.musicListener = musicListener;    }    public void playMusic(String path){        try {            if(isPlaying==true){                mediaPlayer.stop();                mediaPlayer.release();                mediaPlayer=new MediaPlayer();            }            mediaPlayer.setDataSource(path);            mediaPlayer.prepare();            mediaPlayer.start();            isPlaying=true;        } catch (IOException e) {            e.printStackTrace();        }    }    public interface MusicListener{        void onProgress();        void onNext();    }}

MediaBean.java

public class MediaBean {    public int id; //id标识    public String title; // 显示名称    public String display_name; // 文件名称    public String path; // 音乐文件的路径    public int duration; // 媒体播放总时间    public String albums; // 专辑    public String artist; // 艺术家    public String singer; //歌手    public long size;}

activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>                                                          

 

更多相关文章

  1. Android Service总结04 之被绑定的服务 -- Bound Service
  2. android将线程绑定在指定CPU
  3. 基于Android DataBinding的InverseBindingMethod改进SeekBar双向
  4. Android应用程序绑定服务(bindService)的过程
  5. Android中的数据绑定框架DataBinding(对比AngularJS双向数据绑定
  6. 使用Android BindingAdapter与InverseBindingAdapter实现SeekBar
  7. android源码下载并绑定到Eclipse中
  8. 认识Android中的双向绑定

随机推荐

  1. Android安全框架:Verfied boot -- Secure
  2. Android Studio安装ButterKnife插件
  3. android 联系人快速搜索
  4. android 扩展屏幕 多屏显示
  5. Android实现滑动菜单—SlidingMenu
  6. Chrome OS和Android的三大不同点
  7. android http上传文件
  8. android开发——显式intent
  9. OneAPM 试用测评
  10. 刚学习android安卓,哪里有源码例子可以下