服务MusicPlayerService的具体实现

本文详细介绍了如何通过bindService启动MusicPlayerService,当调用bindService时,会执行Service的OnCreate方法,但不会执行OnStartCommand方法。在OnCreate方法内,主要任务是加载音乐列表。接着,服务将开始播放音频,实现音频播放功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#1.bindService(intent,con,BIND_AUTO_CREATE)使得MusicPlayerService的OnCreate()方法执行(但是OnStartCommand()方法不会执行)。
在OnCreate()中获取音乐列表:

 @Override
    public void onCreate() {
   
   
        super.onCreate();
//        获得音乐列表
        getDataFromLocal();
    }
    /**
     * 从本地的sdcard得到数据
     * //1.遍历sdcard,后缀名
     * //2.从内容提供者里面获取视频
     * //3.如果是6.0的系统,动态获取读取sdcard的权限
     */
    private void getDataFromLocal() {
   
   
//        因为服务本身默认在主线程执行,所以需要开启新线程
        new Thread(){
   
   
            @Override
            public void run() {
   
   
                super.run();
//                isGrantExternalRW((Activity) context);
//                SystemClock.sleep(2000);
                mediaItems = new ArrayList<>();
                ContentResolver resolver = getContentResolver();//服务本身就是一个Context
                Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                String[] objs = {
   
   
                        MediaStore.Audio.Media.DISPLAY_NAME,//视频文件在sdcard的名称
                        MediaStore.Audio.Media.DURATION,//视频总时长
                        MediaStore.Audio.Media.SIZE,//视频的文件大小
                        MediaStore.Audio.Media.DATA,//视频的绝对地址
                        MediaStore.Audio.Media.ARTIST,//歌曲的演唱者

                };
                Cursor cursor = resolver.query(uri, objs, null, null, null);
                if(cursor != null){
   
   
                    while (cursor.moveToNext()){
   
   

                        MediaItem mediaItem = new MediaItem();

                        mediaItems.add(mediaItem);//写在上面

                        String name = cursor.getString(0);//视频的名称
                        mediaItem.setName(name);

                        long duration = cursor.getLong(1);//视频的时长
                        mediaItem.setDuration(duration);

                        long size = cursor.getLong(2);//视频的文件大小
                        mediaItem.setSize(size);

                        String data = cursor.getString(3);//视频的播放地址
                        mediaItem.setData(data);

                        String artist = cursor.getString(4);//艺术家
                        mediaItem.setArtist(artist)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值