Android利用Service實現簡易音樂播放器

話不多說,上代碼

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<MediaBean> 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<String> 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"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
       <ListView
           android:id="@+id/listview"
           android:layout_width="match_parent"
           android:layout_height="wrap_content">

       </ListView>
    </LinearLayout>
    <LinearLayout
        android:id="@+id/ll_foot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/media_previous"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@android:drawable/ic_media_previous" />

        <ImageView
            android:id="@+id/media_paly"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@android:drawable/ic_media_play" />

        <ImageView
            android:id="@+id/media_next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@android:drawable/ic_media_next" />

    </LinearLayout>
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_above="@+id/ll_foot"
        android:layout_height="wrap_content" />

</RelativeLayout>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章