Android:静态注册BroadcastReceiver
来源:互联网 发布:抓取客户端数据工具 编辑:程序博客网 时间:2024/06/01 10:18
动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()方法中的。那么有没有什么办法可以让程序在未启动的情况下就能接收到广播呢?这就需要使用静态注册的方式了。
下面附上静态注册的代码:
MainActivity.java:
package com.example.staticbroadcastreceiverdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.SystemClock;public class MainActivity extends Activity { private Handler myHandler; //定义一个Intent,用于发送广播; private Intent myIntent; //子线程标志位; private boolean tag = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); //实例化Intent myIntent = new Intent(); //设置过滤条件; myIntent.setAction("com.vrinux.static"); //此处我使用一个Handler,接收子线程每隔3秒发来一次消息, //就发送一个广播,并将值发出去; myHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int count = msg.arg1; myIntent.putExtra("text", "来自activity的广播~" + count); //发送广播; sendBroadcast(myIntent); } }; new Thread(new Runnable() { int count = 0; @Override public void run() { // TODO Auto-generated method stub //将标志位值设为true; tag = true; while (tag) { Message msg = Message.obtain(); msg.arg1 = count; myHandler.sendMessage(msg); SystemClock.sleep(3000); count += 1; } } }).start(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //当Activity销毁时,将标志位设置为false; //如果不设置为false,则会看到程序退出后手机屏幕上仍然有Toast显示信息; //从这点可以看出:1.线程启动后不会随着Activity销毁而销毁; // 2.静态注册的广播比依赖于程序是否处于运行状态; if(tag){ tag = false; } }}
PlaneBroadcastReceiver.java:
package com.example.staticbroadcastreceiverdemo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;import android.widget.Toast;//继承BroadcastReceiver类;public class PlaneBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i("MainActivity","PlaneBroadcastReceiver"); //获取intent传来的值; String text = intent.getStringExtra("text"); //通过Toast显示在屏幕上; Toast.makeText(context, text, Toast.LENGTH_LONG).show();; }}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.staticbroadcastreceiverdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.staticbroadcastreceiverdemo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 注册BroadcastReceiver,并设置过滤器和过滤条件 --> <receiver android:name=".PlaneBroadcastReceiver" android:enabled="true" > <intent-filter> <action android:name="com.vrinux.static" /> </intent-filter> </receiver> </application></manifest>
0 0
- Android:静态注册BroadcastReceiver
- Android:静态注册BroadcastReceiver
- Android静态注册内部类广播BroadcastReceiver
- Android静态注册内部类广播BroadcastReceiver
- Android静态注册内部类广播BroadcastReceiver
- Android静态注册内部类广播BroadcastReceiver
- Android静态注册内部类广播BroadcastReceiver
- Android 取消静态注册的BroadcastReceiver
- Android BroadcastReceiver 动态与静态注册
- android—BroadcastReceiver 静态注册和动态注册Context理解
- BroadCastReceiver 静态动态注册
- BroadCastReceiver 静态动态注册
- BroadcastReceiver 静态注册
- BroadcastReceiver组件 静态注册
- Android BroadcastReceiver的注册方式静态和动态
- BroadcastReceiver广播静态注册细节
- BroadcastReceiver的两种注册方式(静态注册和动态注册)android开发教程
- android BroadcastReceiver 注册方式
- 统计指定目录下面的文件类型及数量
- JAVA内部类使用,什么时候该使用内部类及使用内部类的好处
- Max space clustering (Hamming)
- HTTP Content-type对照表
- 移动端页面性能探究
- Android:静态注册BroadcastReceiver
- rgba()和opacity的比较
- C++中派生类和基类的转换和访问控制
- 用Java代码删除一个已排好序链表中重复的数字
- 基于V4L2 MFC 视频编解码
- ZOJ 2954 Hanoi Tower(模拟啊 )
- 一个程序员的慢慢爬坑之路吧。。
- JavaIO编程之ReadLine
- 集群管理笔记