java代码
package com.example.afternoon;
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.Toast;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class app2 extends AppCompatActivity {
private ListView listView;
private MyRead mr;
private List list=new ArrayList<>();
private MediaPlayer mp;
private Button APButtonStart;
private Button APButtonDown;
private Button APButtonUp;
private SeekBar sb;
private boolean flag=false;
private int num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app2);
listView=findViewById(R.id.AP_listView);
APButtonStart = (Button) findViewById(R.id.AP_button_start);
APButtonDown = (Button) findViewById(R.id.AP_button_down);
APButtonUp = (Button) findViewById(R.id.AP_button_up);
sb=findViewById(R.id.AP_seekBar);
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
sb.setMax(mp.getDuration());
sb.setProgress(mp.getCurrentPosition());
if( sb.getProgress()==mp.getDuration()){
mp.stop();
mp.reset();
sb.setProgress(0);
APButtonDown.performClick();
timer.cancel();
}
}
},0,1000);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if( fromUser==true) {
mp.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},202);
mp=new MediaPlayer();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if( !APButtonStart.getText().equals("开始")){
APButtonStart.setText("开始");
}
String data = list.get(position).getData();
num=position;
try {
//初始化数据。
mp.reset();
mp.setDataSource(data);
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mpa) {
// mpa.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mpa) {
mpa.reset();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if( requestCode==202&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
// list=mr.gets();
ContentResolver contentResolver = getContentResolver();
Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] arr=new String[]{MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.SIZE};
Cursor query = contentResolver.query(uri, arr, null, null, null);
if( query!=null){
while( query.moveToNext()){
String title = query.getString(query.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = query.getString(query.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String duration = query.getString(query.getColumnIndex(MediaStore.Audio.Media.DURATION));
String data = query.getString(query.getColumnIndex(MediaStore.Audio.Media.DATA));
String size = query.getString(query.getColumnIndex(MediaStore.Audio.Media.SIZE));
Music music = new Music();
music.setTitle(title);
music.setArtist(artist);
music.setDuration(duration);
music.setData(data);
music.setSize(size);
list.add(music);
}
MyAdapter aaa = new MyAdapter(this, list);
listView.setAdapter(aaa);
// return list;
}else{
Toast.makeText(this, “list集合为空。”, Toast.LENGTH_SHORT).show();
}
}
}
public void click(View view) {
switch( view.getId()){
case R.id.AP_button_start:
if( flag==false){
flag=true;
APButtonStart.setText("暂停");
mp.start();
}else{
flag=false;
APButtonStart.setText("开始");
mp.pause();
}
break;
case R.id.AP_button_up:
try {
if( num==0){
num=list.size()-1;
}
mp.reset();
mp.setDataSource(list.get(--num).getData());
mp.prepare();
if( APButtonStart.getText().equals("暂停")){
mp.start();
}else{
APButtonStart.performClick();
}
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.AP_button_down:
try {
if( num==list.size()-1){
num=0;
}
mp.reset();
mp.setDataSource(list.get(++num).getData());
mp.prepare();
if( APButtonStart.getText().equals("暂停")){
mp.start();
}else{
APButtonStart.performClick();
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
适配器代码
package com.example.afternoon;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MyAdapter extends BaseAdapter {
private Context con;
private List list=new ArrayList<>();
private MyId mi;
public MyAdapter(Context con, List<Music> list) {
this.con = con;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if( convertView==null){
mi=new MyId();
convertView= LayoutInflater.from(con).inflate(R.layout.ap_layout,null);
mi.text=convertView.findViewById(R.id.mp_textView_title);
mi.artist=convertView.findViewById(R.id.mp_textView_artist);
mi.duration=convertView.findViewById(R.id.mp_textView_duration);
convertView.setTag(mi);
}else{
mi= (MyId) convertView.getTag();
}
mi.text.setText(list.get(position).getTitle());
mi.artist.setText(list.get(position).getArtist());
mi.duration.setText(list.get(position).getDuration());
// mi.data=list.get(position).getData();
return convertView;
}
class MyId{
private TextView text;
private TextView artist;
private TextView duration;
}
}
布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/AP_linearLayout"
android:orientation="horizontal"
android:background="#03A9F4"
>
</LinearLayout>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/AP_seekBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_above="@id/AP_linearLayout2"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:id="@+id/AP_linearLayout2"
>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="开始"
android:id="@+id/AP_button_start"
android:onClick="click"
/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="下一首"
android:id="@+id/AP_button_down"
android:onClick="click"
/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="上一首"
android:id="@+id/AP_button_up"
android:onClick="click"
/>
</LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/AP_listView"
android:layout_below="@id/AP_linearLayout"
android:layout_above="@id/AP_seekBar"
>
</ListView>