recyclerView跳转与musicserver

Activity生命周期

进入触发oncreate-> onStart->onResume
在这里插入图片描述
退出触发 onPause->onStop->onDestroy
在这里插入图片描述

总结

  • onCreate()
    它会在系统首次创建 Activity 时触发。Activity 会在创建后进入“已创建”状态。
  • onStart()
    当 Activity 进入“已开始”状态时,系统会调用此回调。onStart() 方法会非常快速地完成,并且与“已创建”状态一样,Activity 不会一直处于“已开始”状态。一旦此回调结束,Activity 便会进入“已恢复”状态,系统将调用 onResume() 方法。
  • onResume()
    Activity 会在进入“已恢复”状态时来到前台,然后系统调用 onResume() 回调。这是应用与用户互动的状态。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。此类事件包括接到来电、用户导航到另一个 Activity,或设备屏幕关闭。
  • onPause()
    系统将此方法视为用户将要离开您的 Activity 的第一个标志此方法表示 Activity 不再位于前台,如果 Activity 从“已暂停”状态返回“已恢复”状态,系统将再次调用 onResume() 方法)
  • onStop()
    如果 Activity 不再对用户可见,说明其已进入“已停止”状态,应用应释放或调整在应用对用户不可见时的无用资源
  • onDestroy()
    销毁 Activity 之前,系统会先调用 onDestroy()。系统调用此回调
    1. Activity 即将结束(由于用户彻底关闭 Activity 或由于系统为 Activity 调用 finish()),或者
    2. 由于配置变更(例如设备旋转或多窗口模式),系统暂时销毁 Activity

recyclerView跳转

实现音乐列表,点击进入详情页面播放对应音乐
在这里插入图片描述
在这里插入图片描述

recyclerView部分(musicAdapter)

1
2
3
4
5
6
7
8
9
10
11
12
private void Viewinit() {
context = this.getActivity();

myadapter = new musicAdapter(context);
//设置LayoutManager
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(myadapter);
myadapter.list(namelist,artistlist,urllist,coverlist);
}

musicadapter定义成员函数获取歌名,歌手,MP3链接,封面链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private List<String> namelist;
private List<String> artistlist;
private List<String> urllist;
private List<String> coverlist;


public musicAdapter(Context context) {

this.context = context;
}

public void list(List<String> namelist,List<String> artistlist,List<String> urllist,List<String> coverlist) {
this.namelist= namelist;
this.artistlist= artistlist;
this.urllist= urllist;
this.coverlist= coverlist;
notifyDataSetChanged();

}

歌单json文件,包含 “name”,”artist”,”url”,”cover”,”lrc”

[“url”,”cover”,”lrc”]都是网络地址,拼接到https://cdn.unrun.top/blog/music/后面获取url
output.json放在raw文件夹下json格式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{"data":[{
"name": "花の塔",
"artist": "酸欠少女さユり",
"url": "45.mp3",
"cover": "45.jpg",
"lrc": "45.lrc"
},
{
"name": "星と君が消えた日",
"artist": "泠鸢yousa",
"url": "59.mp3",
"cover": "59.jpg",
"lrc": "59.lrc"
}]}

定义一个函数解析歌单json文件,先逐行读取为字符串然后解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void getjson(){
InputStream stream=getResources().openRawResource(R.raw.output);
BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
String jsonStr="",line="";
try {
while ((line=reader.readLine())!=null){
jsonStr+=line;
}
} catch (IOException e) {
e.printStackTrace();
}
try {
JSONObject jsonObject1 = new JSONObject(jsonStr);
JSONArray jsonArray = jsonObject1.getJSONArray("data");
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
String artist = jsonObject.getString("artist");
String url = jsonObject.getString("url");
String cover = jsonObject.getString("cover");
String lrc = jsonObject.getString("lrc");
namelist.add(name);
artistlist.add(artist);
urllist.add(url);
coverlist.add(cover);
// lrclist.add(lrc);
// Log.d("f4", String.valueOf(list));
}
} catch (JSONException e) {
e.printStackTrace();
}
}

实例化musicadapter,并把歌曲信息传进去

1
2
3
4
5
6
7
8
9
10
11
private void Viewinit() {
context = this.getActivity();
myadapter = new musicAdapter(context);
//设置LayoutManager
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(myadapter);
myadapter.list(namelist,artistlist,urllist,coverlist);
}

musicadapter中list函数获取,(上面写了)

1
2
3
4
 public void list(List<String> namelist... ){}
unbindService(connection);
}
});

server文件中
继承Binder的自定义类,其函数myplay()写播放方法

1
2
3
4
5
6
class Mybinder extends Binder{
public void myplay(){
mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.flower);
mediaPlayer.start();
}
}

演示

在这里插入图片描述

点击绑定开始播放歌曲,点击解绑暂停歌曲

完整音乐列表功能
在这里插入图片描述

代码仓库

https://github.com/2412322029/Applicationtest