利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光

主界面里面

在界面创建的时候开启一下服务普通的startService()方法

发送一条广播出去

获取Intent对象,通过new出来

调用Intent对象的setAction()方法,参数:一般就是包名

调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象

服务里面

新建一个MyService类继承系统的Service类

添加一个自定义的服务的方法callServiceMethod(),我们目的要调用的方法

新建一个内部类MyReceiver继承系统的Receiver类

广播接收者既能通过清单文件注册,也可以通过代码的方式注册,这是四大组件中唯一的特殊的一个

在MyService中创建一个MyReceiver的成员变量

在服务创建的时候,注册广播接收者,在onCreate()方法里面

调用registerReceiver(receiver,filter)方法,注册这个广播接收者,参数:receiver是BroadcastReceiver对象,通过new MyReceiver()来创建,filter是IntentFilter对象

获取IntentFilter对象,通过new出来

调用IntentFilter对象的addAction(action)方法,意图过滤器对象添加监听动作,上面发送的那个动作

当接收者收到信号的时候,会调用MyReceiver对象的onReceive()方法,在这个方法里面可以去调用服务的私有方法,比如callServiceMethod()

当服务销毁的时候,解除注册的广播接收者,在onDestroy()方法里面,调用unResisterReceiver(receiver),参数:广播接收者对象

MainActivity.java

package com.tsh.broadcallservice;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//开启服务Intent intent=new Intent(this,MyService.class);startService(intent);}//广播调用服务public void call(View v){Intent intent=new Intent();intent.setAction("com.tsh.broadcallservice");sendBroadcast(intent);}
}

MyService.java

package com.tsh.broadcallservice;import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.widget.Toast;public class MyService extends Service {private MyReceiver receiver;@Overridepublic IBinder onBind(Intent intent) {return null;}//服务创建的时候注册广播接收者
    @Overridepublic void onCreate() {super.onCreate();receiver=new MyReceiver();IntentFilter filter=new IntentFilter();filter.addAction("com.tsh.broadcallservice");registerReceiver(receiver, filter);}//服务里面的一个方法public void callServiceMethod(){Toast.makeText(getApplicationContext(), "广播调用服务啦", 0).show();}//内部类实现广播接收者private class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {callServiceMethod();}}
}

转载于:https://www.cnblogs.com/taoshihan/p/5343049.html

[android] 代码注册广播接收者利用广播调用服务的方法相关推荐

  1. 多态在android中(利用接口调用服务中方法)的应用

    首先我们已经了解了java中多态的基本概念 1方法重载. 2向上转型,向下转型 今天我们主要讲向上转型在android中的应用范例. 在java中向上向下转型的图解: 重点:子类对象向上转型为父类对象 ...

  2. 利用C++调用天气webservice-gSOAP方法

    利用C++调用天气webservice-gSOAP方法 首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.NET/projects/gsoap2/ 至于有关于gSO ...

  3. Python利用JPype调用Java对象方法【实现在Python中调用JAVA】

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  4. Android屏幕旋转时Activity不重新调用onCreate的方法

    2019独角兽企业重金招聘Python工程师标准>>> android屏幕旋转时Activity不重新调用onCreate的方法 当手机转屏时,Activity的onDestroy和 ...

  5. AjaxPro.NET使用,方便的在客户端直接调用服务端方法

    (一). 运行效果如下: (二). AjaxPro.NET简介 AjaxPro.NET是一个优秀的Ajax框架, 在实际应用中只要添加其DLL引用并进行简单的配置, 即可以非常方便的在客户端直接调用服 ...

  6. Android通过广播接收者调用服务内方法

    2019独角兽企业重金招聘Python工程师标准>>> 服务: package com.pas.callmethod;import android.app.Service; impo ...

  7. android+广播接收者category,广播接收者

    广播接收者 Android: 系统在运行过程中,会产生很多事件,那么某些事件产生时,比如:电量改变,收发短信,拨打电话,屏幕解锁等,开机,系统会发送广播,只要应用程序接收这条广播,就知道系统发生了相应 ...

  8. android 引入 .so,android studio导入so文件,并调用其中的方法

    在单位的项目中,需要一个算法来计算一个特殊值,可是相关的部门却不给计算公式,只是给了几个封装好的so文件和一个.h文件,让传入几个值,然后得到相应的值.拷.....没法子,人家不给,我们只好调用这个了 ...

  9. 客户端如何连接 DataSnap Server 调用服务的方法

    一般http访问的地址是 http://localhost:8099/datasnap/rest/TServerMethods1/EchoString/abc 一.用FDConnection1连接Da ...

  10. Android退出程序(二)——利用广播机制

    概述: 基于上一篇博客<Android退出程序(一)--单例模式>的学习,我们知道了如何利用单例和循环遍历的方式来退出我们的应用程序.这篇博客则要从另一个角度来解决问题--广播.即是,接收 ...

最新文章

  1. 452 Minimum Number of Arrows to Burst Balloons
  2. SCCM 2012系列3 安装SCCM 2012
  3. java定时器的使用(Timer)
  4. zabbix监控mysql操作
  5. wav格式的音频文件 16位转化成8位的
  6. 团队作业4——beta阶段冲刺4
  7. 伺服驱动器cn1引脚定义_关于三菱驱动器CN1端口的接线-专业自动化论坛-中国工控网论坛...
  8. 网络其他计算机无法访问,win7局域网别人无法访问我的电脑是为什么 win7其他电脑无法访问我的电脑如何修复...
  9. php扩展引擎手册,模板引擎-THINKPHP 5.0 手册最新版
  10. python技巧积累
  11. Android日历操作
  12. CoreDNS 1.9.0 openEuler 21.09 测试报告
  13. 保险丝选型8大考虑要素
  14. 给下拉框加上可输入查询特性-升级版本
  15. 【PTA】匿名内部类:实现Comparator比较器
  16. JavaScript localStorage、this、let、const
  17. 第六周 day6 python学习笔记
  18. inrul plus 90sec.php,DEDE木马后门专杀工具 针对 90sec.php 一类
  19. 6.进程通信 无名管道 有名管道
  20. QGIS教程-4:文本数据的加载

热门文章

  1. 求n!的位数以及求n!具体的值(C or C++)
  2. leetcode刷题日记-三个无重叠子数组的最大和
  3. 《剑指offer》面试题31——连续子数组的最大和
  4. IDL实现植被覆盖度计算
  5. ENVI/IDL实现每个波段信噪比计算
  6. curl header设置参数
  7. datagrivew删除列_c# 如何获取datagrivew 表里面名称为card_id的一列,并把这列里面的元素循环...
  8. KMP算法------字符串匹配问题
  9. 在linux中装多个mysql 服务(亲测有效)
  10. Log4j2 Zero Day 漏洞 Apache Flink 应对指南