android之广播
来源:互联网 发布:美国的排外知乎 编辑:程序博客网 时间:2024/05/20 05:54
//当接受到广播该方法调用
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("com.itcast.action.wuhan")){
String name = intent.getStringExtra("name");
System.out.println(name+"我在东莞哦");
}
}
}
两种注册方式:
一:
<receiver
android:name="com.itcast.mybroadcast.MyBroadcastReceiver">
<intent-filter >
<action android:name="com.itcast.action.wuhan"/>
</intent-filter>
</receiver>
//订阅广播
二:
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.itcast.action.wuhan");
registerReceiver(receiver, filter);
public void send(View v){
//发送广播
Intent intent = new Intent();
intent.setAction("com.itcast.action.wuhan");
intent.putExtra("name", "陈龙");
sendBroadcast(intent);
}
---------------------------------------------
订阅短信到来广播:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("我可以接受广播");
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for(Object pdu:pdus){
byte[] sms = (byte[]) pdu;//短信数据 --》短信对象
SmsMessage smsMessage = SmsMessage.createFromPdu(sms);
//内容
String body = smsMessage.getDisplayMessageBody();
//地址
String address = smsMessage.getDisplayOriginatingAddress();
//时间
long millis = smsMessage.getTimestampMillis();
//格式化时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateStr = format.format(millis);
System.out.println("body:"+body);
System.out.println("address:"+address);
System.out.println("dateStr:"+dateStr);
//中断广播
abortBroadcast();
}
}
}
<receiver android:name="com.itcast.smsreceiver.SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
-------------------------------------------------
有了 Service 类我们如何启动他呢,有两种方法:
• Context.startService()
• Context.bindService()
1. 在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。
2. 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
总结:
1. startService()的目的是回调onStart()方法,onCreate() 方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法已经调用了)那么startService()将跳过onCreate() 方法。
2. bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器的操作),一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服务)。
由于Service 的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。
Service的生命周期方法onCreate, onStart, onDestroy
有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1 通过startService
Service会经历 onCreate -> onStart
stopService的时候直接onDestroy
如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。下次调用者再起来可以stopService。
2 通过bindService
Service只会运行onCreate, 这个时候服务的调用者和服务绑定在一起
调用者退出了,Srevice就会调用onUnbind->onDestroyed所谓绑定在一起就共存亡了。并且这种方式还可以使得
调用方(例如)调用服务上的其他的方法。
- android之广播
- Android基础之广播
- Android之广播
- android学习之广播
- Android之Broadcast(广播)
- android之广播
- Android进阶之广播
- Android系列之广播
- Android之定向广播
- Android开发之广播
- Android之粘性广播
- Android入门之广播
- Android之系统广播
- Android之广播机制
- Android之有序广播
- Android之广播
- Android系列之广播
- android之广播,broadcast
- Android开发大牛博客
- Java调用R方法之一:JRI(Java/R Interface)
- SVN忽略某个文件或文件夹的修改提交
- 《现代操作系统4th》英文版阅读笔记 4.3.4章 LFS(the Log-structured File System)系统
- 事务的原子性,一致性,隔离性,持久性
- android之广播
- Codeforces Round #285 (Div. 2) C - Misha and Forest
- debian下以16进制操作文件,GHEX还是很好用的
- [leetcode 35] Search Insert Position
- Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- unp.h undefined reference to `Socket'
- JDK,JRE,JVM的区别
- Quick cocos2dx-Lua(V3.3R1)学习笔记(10)-----用自带的build_apk生成APK
- 2015.1.12