Lolik

not404

nothing
x
bilibili
github
telegram

recyclerView跳转与musicserver

Activity 生命周期#

进入触发 oncreate-> onStart->onResume

29255bbf1bb9423f8702866bcca2f9f3

退出触发 onPause->onStop->onDestroy

a75fc07912164517a7c979f58199eac0

总结

  • 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 跳转#

实现音乐列表,点击进入详情页面播放对应音乐

7984d4d0e9374f2298b94537918ad798

81f024c2cb6842acac23d5b0e6552991

recyclerView 部分(musicAdapter)#

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 链接,封面链接

 	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 格式如下

{"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 文件,先逐行读取为字符串然后解析

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, 并把歌曲信息传进去

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 函数获取,(上面写了)

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

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

 class Mybinder extends Binder{
        public  void  myplay(){
            mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.flower);
            mediaPlayer.start();
        }
    }

演示#

df7241aa0d05481fa3255f60b29e73c4

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

完整音乐列表功能
e3199e1e61cc4484badc75024b7430d9

代码仓库#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。