Android 学习笔记 BroadcastReceiver广播...
PS:不断提升自己,是件好事...
学习内容:
1.BroadcastReceiver的使用..
2.通过BroadcastReceiver去启动Service...
1.BroadcastReceiver...
广播接收者,用来接收系统和应用中的广播...Android广播机制用的地方还是很多的,比如说:当网络状态发生改变的时候,通过接收这条广播就能及时做出相应的响应,然后完成一些操作..这就是广播的机制...它自身并不实现图形用户界面...只是一个触发性的操作...
使用广播是需要几个步骤的...
i.那就是建立一个类来实现一个广播,再类中定义响应的方法...来完成一些响应的操作...
ii.广播这个东西是需要注册的,不进行注册是无法使用的....
注册的方式有两种:
一种是静态注册,静态注册就是配置AndroidManifest.xml文件进行配置,由系统管理receiver,属于常驻型的...
<!--这段代码添加在application之间就可以了。。。-->
<receiver android:name=".MyBroadcast"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.EDIT"/>
</intent-filter>
</receiver>
二种则是动态注册...属于非常驻型的,并且隐藏在代码块之间...不容易发现...
private BroadcastReceiver receiver; receiver=new CallReceiver();
//动态注册广播地址...
registerReceiver(receiver,new IntentFilter("android.intent.action.EDIT"));
//解除注册的广播地址,一定要对广播机制进行注销...
unregisterReceiver(receiver);
iii.注册完成后就是进行发送广播了...这样广播接收者就可以正常工作了...先构建一个Intent对象,然后调用sendBroadcast(Intent)方法将广播发出...
还有一点就是,对象调用了onReceive()方法时广播才是有效的,当从这个函数返回之后,这个对象就无效了..因此广播的生命周期是非常短暂的,也就仅仅十几秒的生命周期,因此不要在其中加入一些耗时的操作,耗时的操作可以交给Service去完成,广播就是完成一些非常小的操作就可以了...粘一个代码...
package com.example.broadcast_receiver; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class MyBroadcast extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String str=intent.getStringExtra("msg");
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
上面就是定义一个广播接收类,它继承于BroadcastReceiver,在其中完成一些相应的操作....
package com.example.broadcast_receiver; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Intent;
public class MainActivity extends Activity implements View.OnClickListener { private Intent intent=new Intent(Intent.ACTION_EDIT);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.broadcast).setOnClickListener(this);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.broadcast:
intent.putExtra("msg", "aa");
MainActivity.this.sendBroadcast(intent);
break;
}
} }
这个就是如何在MainActivity中调用广播接收者,很简单的一个动作,就是触发按钮,然后会在屏幕上输出"aa"这条信息...很简单的一个操作,布局文件就一个按钮,没必要去粘贴...重要的是理解一下这个过程,不要忘了使用BroadcastReceiver时一定要进行注册,否则是不能进行使用的....
2.如何使用BroadcastReceiver去启动Service...
前面已经说过,BroadcastReceiver对象的生命周期是非常短暂的...那么耗时的动作是无法在这里执行的,但是我们可以在BroadcastReceiver中去调用Service...让Service去执行耗时的服务...简单的介绍一下如何去启动Service...
i.首先我们先定义一个Service...
package com.example.broadcast_receiver; import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder; public class MyService extends Service{ private MediaPlayer media;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
media=MediaPlayer.create(MyService.this, R.raw.a);
MyService.this.media.prepare();
MyService.this.media.start();
media.setLooping(true);
}
@Override
public void onDestroy(){
super.onDestroy();
}
@Override
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
}
}
这里我们需要复制一首歌曲到res\raw文件夹下一首歌曲...raw文件夹我们自己进行新建...
package com.example.broadcast_receiver; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class MyBroadcast extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Intent newintent =new Intent(context,MyService.class);
context.startService(newintent);
String str=intent.getStringExtra("msg");
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
这个是广播类,从广播的内部去启动Service.....然后在AndroidManifest.xml文件中的<application>和</application>之间加入代码<service android:name=".MyService" android:enable="true"/>就搞定了...
这样就完成了在BroadcastReceiver()内部去启动Service.....
Android 学习笔记 BroadcastReceiver广播...的更多相关文章
- Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话
一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...
- Android学习笔记BroadcastReceiver(广播接收者)
Android发送广播的过程 代码实现 MainActivity.java import androidx.appcompat.app.AppCompatActivity; import androi ...
- Android学习笔记(广播机制)
1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
- 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager
目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...
- 九、Android学习第八天——广播机制与WIFI网络操作(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- 【转】Pro Android学习笔记(十):了解Intent(上)
目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...
随机推荐
- 由1433端口入侵,浅谈sqlserver安全 (转)
前几日笔者在家里的PC上安装了Windows7旗舰版的操作系统,顺便搭了sqlserver2008和vs2010的开发环境,本打算业余时 间可以方便开发.学习.可是不尽人意啊!用了不到两天,居然突然出 ...
- ASP 中 Cookies 的 Expires 属性的设置(JS版本)
直接上代码,代码中有注释 <%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%> <% var numVisi ...
- [salesforce] URLFOR function finally
While developing your Visualforce pages you may need to be able to obtain the URL of certain actions ...
- Redis之高可用方案
Redis之高可用方案 Redis以其高效的访问速度著称.但由于官方还未发布redis-cluster,而redis的replica又有诸多不便:比如一组master-slave的机器,如果之间有 ...
- 增大VM下linux的根目录空间
增大VM下linux的根目录空间 用的太久,发现VM下的系统空间不足.简单的方法是,分一个新硬盘,挂载到根目录下. 下面是直接增大根目录下空间: 1. 增大vm下的磁盘大小, VM -&g ...
- 从今天起,记录CEF使用开发心得经验
已经使用CEF来呈现桌面程序界面大半年了,从来没有写过相关博文.发现网上的中文资料甚至英文已经无法满足我的开发需求,不少问题只得自己探索.在此先谢过网络上各位CEF使用开发博文的贡献者,没有你们我也难 ...
- EETOP中关于Gm仿真的一些帖子的总结
1. cadence画gm曲线 电路里,要把漏的电源dc值设置成变量,比如叫vds,计算器,info标签,点op,然后点管子,在op窗口点list,选gm,然后把这个公式弄到ADE的outputs那里 ...
- 正则表达式工具RegexBuddy使用教程(原创自Zjmainstay)
从<我眼里的正则表达式(入门)>这个文章,到<深入正则表达式应用>,再到后来专门创建的正则QQ群"专精正则表达式",到现在已经过去2年时间了.在文章和群里一 ...
- apache下virtualhost与location合用配置转发SVN控制访问
使用apache的文件系统配置 使用virtualhost 实现location 重定向 NameVirtualHost *:80 <VirtualHost *:80> ServerNam ...
- 简谈ubuntu之DIY发行版
2007.05.13 二十一世纪到了,每个人都强调自己的个性,于是一种叫做DIY的东西悄然兴起. 操作系统作为全人类智慧的结晶,自然DIY起来难度极大,因而DIY出一个操作系统成就感绝对比买宜家 ...