implementation 'com.github.hotchemi:permissionsdispatcher:2.3.1'
annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.1'//音乐播放器需要的依赖
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="db.lanxing.damexshixu.ui.frament.BlankFragment2">
<android.support.v7.widget.RecyclerView
android:id="@+id/rcw2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="9" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="9"
android:orientation="horizontal">
<SeekBar
android:id="@+id/sbr"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<TextView
android:id="@+id/time"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="5" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="9"
android:orientation="horizontal">
<ImageButton
android:id="@+id/back"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/musicplaybar_back" />
<ImageButton
android:id="@+id/pause"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/stat_notify_musicplayer" />
<ImageButton
android:id="@+id/play"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:visibility="gone"
android:background="@drawable/musicplaybar_stop" />
<ImageButton
android:id="@+id/next"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/musicplaybar_next" />
<ImageButton
android:id="@+id/mu"
android:background="@drawable/noconnect_music"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
//音乐播放器,只要一开始播放就开始发送handle,开始不停更新,直到音乐播完
package db.lanxing.damexshixu.ui.frament;
import android.Manifest;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import db.lanxing.damexshixu.R;
import db.lanxing.damexshixu.adapter.MyMusicAdapter;
import db.lanxing.damexshixu.adapter.MyRecAdapter;
import db.lanxing.damexshixu.data.Musics;
import db.lanxing.damexshixu.ui.activity.ImgActivity;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.RuntimePermissions;
/**
* A simple {@link Fragment} subclass.
*/
@RuntimePermissions
public class BlankFragment2 extends Fragment {
ArrayList<Musics> list = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("mm:ss");
@BindView(R.id.name)
TextView name;
Unbinder unbinder1;
private Handler handler = new Handler();
private MediaPlayer player;
Runnable runnable = new Runnable() {
@Override
public void run() {
sbr.setMax(player.getDuration());
sbr.setProgress(player.getCurrentPosition());
time.setText(format.format(player.getCurrentPosition()));
handler.postDelayed(runnable, 100);//重复更新
}
};
@BindView(R.id.rcw2)
RecyclerView rcw2;
@BindView(R.id.sbr)
SeekBar sbr;
@BindView(R.id.time)
TextView time;
@BindView(R.id.back)
ImageButton back;
@BindView(R.id.pause)
ImageButton pause;
@BindView(R.id.play)
ImageButton play;
@BindView(R.id.next)
ImageButton next;
@BindView(R.id.mu)
ImageButton mu;
Unbinder unbinder;
private View inflate;
private int bj;
private MyMusicAdapter adapter;
public BlankFragment2() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
inflate = inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
unbinder1 = ButterKnife.bind(this, inflate);
BlankFragment2PermissionsDispatcher.myMp3WithCheck(this);
initListener();
return inflate;
}
private void initListener() {
rcw2.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL));
adapter = new MyMusicAdapter(R.layout.music, list);
rcw2.setAdapter(adapter);
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
bj = position;
plays(position);
}
});
adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
private Intent intent;
@Override
public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
intent = new Intent(getActivity(), ImgActivity.class);
intent.putExtra("img",list.get(position).getImgdata());
startActivity(intent);
return true;
}
});
sbr.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
player.seekTo(sbr.getProgress());
}
});
}
@NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
void myMp3() {
Cursor query = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
Cursor queryImg = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null, null, null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if (query.moveToFirst() && queryImg.moveToFirst()) {
while (!query.isAfterLast() && !queryImg.isAfterLast()) {
String title = query.getString(query.getColumnIndex(MediaStore.Audio.Media.TITLE));
String album = query.getString(query.getColumnIndex(MediaStore.Audio.Media.ALBUM));
String artist = query.getString(query.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String data = query.getString(query.getColumnIndex(MediaStore.Audio.Media.DATA));
int duration = query.getInt(query.getColumnIndex(MediaStore.Audio.Media.DURATION));
String id = query.getString(query.getColumnIndex(MediaStore.Audio.Media._ID));
long size = query.getLong(query.getColumnIndex(MediaStore.Audio.Media.SIZE));
String img = queryImg.getString(queryImg.getColumnIndex(MediaStore.Images.Media.DATA));
if (size > 1024 * 800) {
list.add(new Musics(id, title, artist, data, img, album, duration));
}
query.moveToNext();
queryImg.moveToNext();
}
}
}
private void getStart(int position) {
try {
player.setDataSource(list.get(position).getData());//设置路径
player.prepare();//准备播放
name.setText(list.get(position).getTitle());//设置歌名
time.setText(format.format(player.getDuration()));//设置总时间
player.setLooping(true);//设置重复播放
player.start();//开始播放
handler.post(runnable);//开始更新数据
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
BlankFragment2PermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder1.unbind();
}
@OnClick({R.id.back, R.id.pause, R.id.play, R.id.next, R.id.mu})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.back:
if (bj == 0) {
bj = list.size() - 1;
} else {
--bj;
}
plays(bj);
break;
case R.id.pause:
getSS();
break;
case R.id.play:
break;
case R.id.next:
if (bj == list.size() - 1) {
bj = 0;
} else {
++bj;
}
plays(bj);
break;
case R.id.mu:
break;
}
}
private void getSS() {
if (player == null) {
player = new MediaPlayer();
getStart(bj);
} else {
if (player.isPlaying()) {
player.pause();
} else {
player.start();
}
}
}
private void plays(int position) {
if (player == null) {
player = new MediaPlayer();
} else {
player.stop();
player = new MediaPlayer();
// player.reset();
}
getStart(position);
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="db.lanxing.damexshixu.ui.activity.VideoActivity">
<VideoView
android:id="@+id/vi"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
player = MediaPlayer.create(this, Uri.parse("http://sjzh-pachong.oss-cn-shanghai.aliyuncs.com/enWord/2dab5e03a6d459a34ccc7a7dd6b21af9.mp3"));
player.start();//用此方法可以播放网络歌曲
// 另一种方法
// try {
// player.setDataSource(this,Uri.parse("http://sjzh-pachong.oss-cn-shanghai.aliyuncs.com/enWord/2dab5e03a6d459a34ccc7a7dd6b21af9.mp3"));
// } catch (IOException e) {
// e.printStackTrace();
// }
//视频播放器有自带的控制器
package db.lanxing.damexshixu.ui.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.MediaController;
import android.widget.VideoView;
import butterknife.BindView;
import butterknife.ButterKnife;
import db.lanxing.damexshixu.R;
public class VideoActivity extends AppCompatActivity {
@BindView(R.id.vi)
VideoView vi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
ButterKnife.bind(this);
initView();
}
private void initView() {
vi = (VideoView) findViewById(R.id.vi);
//给视频设置控制器
vi.setMediaController(new MediaController(this));
//给视频设置路径
vi.setVideoPath(getIntent().getStringExtra("video"));
vi.start();
vi.requestFocus();//让视频自动获取焦点
}
}