概述
话不多说,上代码
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>
最后
以上就是高兴睫毛为你收集整理的Android利用Service实现简易音乐播放器的全部内容,希望文章能够帮你解决Android利用Service实现简易音乐播放器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复