bindService 实现音乐播放的功能

Android studio通过绑定式Service实现简易音乐播放器 最近开始学习Android studio,用绑定式Service做了一个退出自动停止的简易音乐播放器,希望能帮到和我一样刚开始学习Android studio的小白 阅读详情


1:需要Activity实现ServiceConnection的接口

2:需要Service 提供一个继承了Binder的类来提供内部的方法。

3:进度条的设置

4:注册清单文件


public class MyActivity extends Activity implements ServiceConnection,Runnable {
    private Thread thread;
    private TextView textView;
    private Handler handler;
    private boolean flag;
    private ProgressBar progressBar;
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent service = new Intent(this, PlayService.class);
        bindService(service,this,BIND_AUTO_CREATE);
        textView = (TextView)findViewById(R.id.main_progress_textView);
        progressBar = (ProgressBar)findViewById(R.id.main_progressbar);
        thread = new Thread(this);
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                int position =msg.arg1;
                int total = msg.arg2;
                textView.setText(""+position+total);
            }
        };
        thread.start();
    }

    public void run(){
        while(true){
            try {
                Thread.sleep(1000);
                if(flag!=false) {
                    int postion = controller.getCurrentPosition();
                    int total = controller.getDuration();
//                    textView.setText(postion);
                    Message msg = new Message();
                    msg.arg1=postion;
                    msg.arg2=total;
                    handler.sendMessage(msg);
                    progressBar.setProgress(postion);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


    private PlayService.Controller controller;
    @Override
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
        if(PlayService.class.getName().equals(componentName.getClassName())){
            controller = (PlayService.Controller)iBinder;
            progressBar.setMax(controller.getDuration());
            Log.d("151217MY", "Connected");
        }
    }
    public void btnPlay(View view) {
        if(progressBar.getVisibility()==ProgressBar.INVISIBLE){
            progressBar.setVisibility(ProgressBar.VISIBLE);
        }
        controller.play();
        flag=true;
    }

    public void btnPause(View view) {
        controller.pause();
        flag=false;
    }

    @Override
    public void onServiceDisconnected(ComponentName componentName) {

    }
}


public class PlayService extends Service{
    private MediaPlayer player;
    @Override
    public IBinder onBind(Intent intent) {
        return new Controller();
    }
    public class Controller extends Binder{
        public void play(){
            player.start();
        }
        public void pause(){
            player.pause();
        }

        public int getCurrentPosition(){
            return player.getCurrentPosition();
        }

        public int getDuration(){
            return player.getDuration();
        }
    }
    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.nobody);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        player.stop();
        player.release();
    }

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >

    <TextView
            android:id="@+id/main_progress_textView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="progress_textView"
            />
    <ProgressBar
            android:id="@+id/main_progressbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:visibility="invisible"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnPlay"
        android:text="Play"
        />
    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="btnPause"
            android:text="Pause"
            />
</LinearLayout>

}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.zqxue.HomeWork151216"
          android:versionCode="1"
          android:versionName="1.0"
        >
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-sdk android:minSdkVersion="15"/>
    <application
            android:label="@string/app_name"
            android:icon="@drawable/ic_launcher"
            >
        <activity
                android:name="MyActivity"
                android:label="@string/app_name"
                >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <service android:name=".service.PlayService"/>
        <receiver android:name=".receiver.PlayerBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        <service android:name=".service.StartService"/>

    </application>
</manifest>

BindService绑定Service播放音乐 1. 使用了BindService绑定Service。 2. 使用Boardcast,Service发送广播通知Activity更新进度条进度,歌曲状态更新等。 立即下载

相关推荐

Android 带进度条的使用Service实现的音乐播放器

使用Android实现的带进度条的播放器,音乐播放在Service中实现播放、暂停、继续和停止,但是停止和进度条的关联还有些问题,有待改进。

Android Service组件实现后台音乐播放

Android Service以及Activity学习时实现的一个简单的后台音乐播放器。

陈Sir的博客 1万+

瑞萨RA6M4平台I2C驱动移植实战:MPU6050传感器集成指南

本文详细介绍了在瑞萨RA6M4平台上进行I2C驱动移植并集成MPU6050传感器的实战指南。通过FSP配置工具添加I2C主栈,适配MPU6050官方驱动,实现传感器数据读取与调试,为嵌入式开发提供完整的解决方案。

banana的博客 109

笔记——BindService实现音乐播放

BindService实现音乐播放效果

天高任鹏飞 1426

Zabbix-01简单导入MIB文件并测试

这里写自定义目录标题安装 MIB文件启用MIB文件测试MIB文件 MIB文件 MIB代表管理信息库。 MIB文件允许您使用OID(对象标识符)的文本表示。 ##例如: ifHCOutOctets 是OID【1.3.6.1.2.1.31.1.1.1.10】的文本表示 安装 MIB文件 在基于Debian的系统上: # apt install snmp-mibs-downloader # download-mibs 在基于RedHat的系统上: # yum install net-snmp-libs 启用M

lokibaba的博客 9179

基于STM32F407VET6的智能巡检小车灰度循迹系统优化设计

本文详细介绍了基于STM32F407VET6主控芯片的智能巡检小车灰度循迹系统优化设计。通过将传感器输出从数字量升级为模拟量以获取更丰富的路面信息,并采用PD控制算法结合速度管理策略,有效提升了小车在复杂弯道上的循迹稳定性与适应性。文章分享了硬件电路抗干扰设计、软件滤波及实战调优经验,为嵌入式开发者提供了从“能跑”到“跑得稳”的系统性解决方案。

weixin_28273593的博客 443

Android Binder框架实现之bindService详解

关于bindService我们将从两个知识点出发,第一就是从进程之间的交互,第二就是匿名Binder之间的传递角度来探讨!当然小伙们也可以抛开上面的匿名/实名Binder等相关知识点,单纯当成是bindService的源码分析也不为过,这个就看小伙们的出发点了,是分析匿名Binder的应用还是bindService的流程就看小伙们各取所需了。

IT先森 4662

深入探讨 VQ-VAE:理解变分量化自动编码器

VQ-VAE代表"Variational Quantized Variational Autoencoder",是一种生成模型,通常用于处理高维数据,如图像和音频。它的设计灵感来自于变分自动编码器(VAE)和量化方法,结合了它们的优点,使得 VQ-VAE 能够生成高质量的数据,并在数据表示上引入离散性。VQ-VAE 是一种强大的生成模型,结合了变分自动编码器和量化方法的优点。它在图像和音频生成、数据压缩和生成性对抗网络等领域具有广泛的应用。

DeepViewInsight的博客 7016

Android使用Service播放音乐

像音乐这种耗时的和适合后台操作的应当放在Service中进行操作,而不是放在Activity,下面就介绍使用Service的音乐播放器 先创建一个MusicService,在Android Studio中,点击包名右键New-->Service-->Service 如果是按照上面的方法创建的Service,配置清单中会自动生成 改Service的声明 在MusicService中的J

夜雨飘零 2万+

19、多项式基算术:原理与运算详解

本文深入探讨了有限域 $GF(2^m)$ 中的多项式基算术,详细介绍了加法、减法、乘法和平方运算的原理与实现方法。重点分析了多项式基表示形式、模约简技术以及乘法优化策略,如高基数乘法、并行与顺序乘法器设计,并提到了Karatsuba-Ofman算法在减少乘法次数方面的优势。此外,文章还讨论了多项式基算术在密码学、编码理论等领域的应用前景,并展望了未来在高效算法设计与硬件加速方面的研究方向。

yellow的专栏 150

5套高颜值AI漫剧女主设定图!直接拿去做漫剧(附完整提示词)

左侧特写放大表现暖棕眼妆、豆沙唇、红宝石首饰、发丝与针织纹理,四个视图严格保持同一人物脸模、发色、服装、首饰和身体比例,柔和复古棚拍光,低饱和酒红与奶油色配色,真实布料、皮革、金属与宝石材质,高级精致角色资产设定图,高清8K。佩戴珍珠与透明水晶耳坠、纤细珍珠项链;左侧特写放大至胸部以上,清晰表现皮肤、眼妆、发丝、耳饰和针织材质,人物四个视图保持同一脸模、发型、服装、饰品和身体比例,柔和棚拍漫射光,轻微地面阴影,高级细腻材质,真实发丝,细腻皮肤,高精度角色资产设定图,高清8K质感。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1717

【Android】音乐播放器边播边缓存(二)AndroidVideoCache的后台播放

上一篇:Android音乐播放器边播边缓存(一)AndroidVideoCache的使用方法第二篇记录一下,后台播放音乐的方式,没看过上一篇的朋友圈可以先移步 ↑ 链接。【Service】后台播放,那我们很容易的想到就是在Service里面进行。...

不想做菜鸟的小螃蟹 2093

实例详解C++程序的五大内存分区

本文详细讲述C++程序在运行时的5大内存分区。 下面使用日常开发中的编程实例,详细介绍一下这5个分区,以便大家能更深刻的理解这5大内存分区。 1、栈内存区 栈内存区是我们用的最多的分区,只要有函数的地方都会使用到这个分区。栈分区是用来存放函数参数及函数局部变量值的内存区,是由编译器在编译时自动分配和释放的。 函数中的参数与函数中的局部变量占用的内存是代码执行到函数(进入函数)是分配的,在............

dvlinker的技术专栏 1万+

Android用一个音乐播放功能理解bind启动Service

Service的介绍 应用的一部分,与应用执行在同一进程中,生命周期较长,没有可视化界面,运行在后台的一种服务。 Service的两种启动模式 标准启动模式:startService 绑定模式:bindService 两种启动模式的生命周期是不一样的,如下图所示: Android播发音乐功能案例 MainActivity.java import androidx.appcompat.app.AppCompatActivity; import android.content.ComponentName; i

qq_34368334的博客 581

【腾讯小龙虾 WorkBuddy 专栏 03】技能(Skills)制作全教程!自定义技能编写、导出分享、导入使用一步到位

🔥腾讯AI智能体WorkBuddy自定义技能全攻略 本文为零基础用户提供WorkBuddy自定义技能的完整教程,涵盖技能概念、编写规范到实操全流程。核心内容包括: 技能本质:标准化任务指令模板,可固化重复操作流程 三大价值:一键执行重复任务/跨设备共享/降低使用门槛 实操演示:以"桌面文档自动分类"为例,分步讲解编写、测试、导出 共享方案:支持单技能/批量导出,通过任意渠道传输分享 导入指南:3秒完成他人技能加载,并提供常见问题解决方案 高阶优化:增加异常处理、版本管理等提升技能普适性

AI人人懂 2971

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android 音乐播放器的实现(三)Service的实现

Android 界一直流传着一句话,想学习Service, 那么你就要写一个音乐播放器。 为什么要用 Service? Service 是运行于幕后的,它并不轻易见人,而正巧,音乐也是只闻其声不见其人的,相信这就是它们在一起的原因。 大家都知道,从Activity中跟Service交互有两种方式: 1)startService。在Activity 中直接调用 startService的方法...

各研发管理 191

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

从音乐播放器谈Service

Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色。它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。 1. startedService 被开启的service通过其他组件调用 startService()被创建。 这种service可以无限地运

和代码打交道的日子的博客 574

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android后台播放音乐(含通知栏操作)

功能①按下home键回到桌面时,音乐仍然可以播放,同时系统通知栏显示当前音乐播放的状态;②点击App界面的按钮,可控制音乐播放的暂停继续,同时系统通知栏播放状态作相应改变;③点击系统通知栏按钮控制音乐播放暂停,同时App界面播放状态作相应调整;④App播放界面销毁时,清除通知栏对应信息(即播放的控制View)实现步骤小提示:本篇是基于网络音乐进行相关操作的,如果是本地音乐,操作差不多。(1)绑定服...

qq_37077360的博客 1万+

Service 的两种启动方式,以及在音乐播放中的使用

 首先,简要介绍一下service    service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高, 它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小。   bindService是绑定Service服务,执行service...

lxl403853563的博客 3467

Android 多媒体开发学习之简单的音乐播放器

我们今天的目的是学习如何创建一个简单的音乐播放器,可支持播放,暂停,继续播放,以及进度显示,已经进度拖拽。 既然我们的目的已经很明确,那我们先分析一下: 1: 我们播放音乐的任务可以放在Activity中吗?      假设我们当前音乐播放,我们切到别的应用,这时候播放音乐的Activity所在的进程就属于后台进程,因为后台进程会由于系统资源不足时,会杀死当前进程,会导致音乐不播放了。

半月旋空 2359

实验7 BindService模拟通信

实验7 BindService模拟通信 【目的】 实现启动端和BindService之间的双向通信 【要求】 1)实现从启动端传递一个数据至BindService端; 2)实现使用BindService服务播放项目源文件中的音乐; 3)实现在启动端通过“增加”和“降低”两个按钮控制音频音量大小。 4)实现在启动端通过“暂停”按钮控制音频暂停播放。 【实验环境】 1)PC机...

weixin_34301307的博客 95

服务MusicPlayerService的具体实现

#1.bindService(intent,con,BIND_AUTO_CREATE)使得MusicPlayerService的OnCreate()方法执行(但是OnStartCommand()方法不会执行)。 在OnCreate()中获取音乐列表: @Override public void onCreate() { super.onCreate(); // ...

verrrrrrrrra的博客 960

背景音乐的播放(Service)

安卓中Service主要适用于实现需要运行于后台的功能,可分为两种类型:本地服务和远程服务。      本地服务用于应用程序内部。远程服务则是用于Android系统内部的各应用程序之间。      本例则是运用本地服务来实现音乐的播放与停止。    1.修改xml文件       2.创建Servic类,继承Service类     3.在MainActivity.java中

sc0519的博客 443
上一篇: 通过BroadcastReceiver和 service 实现开机自动启动
下一篇: 转:自动挂断电话
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值