android BrocadcastReceiver
来源:互联网 发布:iis7怎么执行php 编辑:程序博客网 时间:2024/04/25 05:07
广播注册有两种方式:
1,静态注册
<receiver android:name="com.text_android_dynamic.Receiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
2,动态注册
filter = new IntentFilter();filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");receiver = new Receiver();registerReceiver(receiver, filter);
注意的是动态注册需要关闭广播
protected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();unregisterReceiver(receiver);}
实现广播首先先定义一个类 继承 BroadCaseReceive,实现onReceive方法 所有的操作都在此方法中进行
注意的是这个方法的生命周期很短,所以所有的耗时的操作都不要在这个方法中进行。
public class Receiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub}}
广播分为两种:
1,标准广播
发送广播为标准意义的 就像是新闻联播,所有的接受者都可以收到
(这个是静态注册)
首先是一个继承BrocadcastReceiver的类,在Manifast里面注册,在Activity里面启动。
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {//通过intent获取传递的参数System.out.println("BroadcastReceiver============"+intent.getStringExtra("data"));}}不要忘记注册
<receiver android:name="com.brocastreceiver.MyReceiver"></receiver>
package com.brocastreceiver;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.Main_SendBtn).setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.Main_SendBtn:Intent intent = new Intent(MainActivity.this,MyReceiver.class);//设置传递参数intent.putExtra("data", "sssss");sendBroadcast(intent);break;}} }(动态注册)
package com.brocastreceiver;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener{private MyReceiver receiver = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.Main_SendBtn).setOnClickListener(this);findViewById(R.id.Main_RegisBtn).setOnClickListener(this);findViewById(R.id.Main_UnBtn).setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.Main_SendBtn:Intent i = new Intent(receiver.ACTION);i.putExtra("data", "data");sendBroadcast(i);break;case R.id.Main_RegisBtn:if (receiver == null) {receiver = new MyReceiver();registerReceiver(receiver, new IntentFilter(receiver.ACTION ));}break;case R.id.Main_UnBtn:if (receiver != null) {unregisterReceiver(receiver);receiver = null;}break;}} }
package com.brocastreceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class MyReceiver extends BroadcastReceiver{public static final String ACTION = "com.brocastreceiver.intent.action.MyReceiver";@Overridepublic void onReceive(Context context, Intent intent) {//通过intent获取传递的参数System.out.println("BroadcastReceiver============"+intent.getStringExtra("data"));}}
2,有序广播
发送广播为有序的,就像是中央文件,需要一级一级的向下传达
代码与上一个一样,改一下Manifest里面的优先级
<receiver android:name="com.text_android_broadcase.Receiver" > <intent-filter android:priority="1000"> <action android:name="com.broadcasereceiver.MyBoradReceiver" /> </intent-filter> </receiver> <receiver android:name="com.text_android_broadcase.Receiver1" > <intent-filter android:priority="100"> <action android:name="com.broadcasereceiver.MyBoradReceiver" /> </intent-filter> </receiver> <receiver android:name="com.text_android_broadcase.Receiver2" > <intent-filter android:priority="500"> <action android:name="com.broadcasereceiver.MyBoradReceiver" /> </intent-filter> </receiver>打印结果
一个强制下线的Demo
protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.login);account = (EditText) findViewById(R.id.account);pass = (EditText) findViewById(R.id.password);login = (Button) findViewById(R.id.login);login.setOnClickListener(new OnClickListener() {String acc,pa;@Overridepublic void onClick(View v) {// TODO Auto-generated method stubacc = account.getText().toString().trim();pa = pass.getText().toString().trim();if (acc.equals("123")&&pa.equals("123")) {startActivity(new Intent(LoginActivity.this,MainActivity.class));finish();}}});}一个Login的activity 点击登入进入另一个activity
case R.id.btn_ac:Intent intent = new Intent("com.broadcasereceiver.MyBoradReceiver");sendBroadcast(intent);break;
另一个activity只有一个广播发送
public class Receiver extends BroadcastReceiver {@Overridepublic void onReceive(final Context context, Intent intent) {AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle("Waring");builder.setMessage("login again");builder.setCancelable(false);//不可以控制消除dialogbuilder.setPositiveButton("OK",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubActivityCollector.finishAll();Intent intent = new Intent(context,LoginActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//优先启动这个activitycontext.startActivity(intent);}});AlertDialog dialog = builder.create();dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//全局性质的提示框dialog.show();}定义一个广播,在onReceive方法中实现Dialog 这样 强制下线需要统一管理activity
public class ActivityCollector {public static List<Activity> activities = new ArrayList<Activity>();public static void addActivity(Activity activity) {activities.add(activity);}public static void removeActivity(Activity activity) {activities.remove(activity);}public static void finishAll() {for (Activity activity : activities) {activity.finish();}}}
public class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);ActivityCollector.addActivity(this);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();ActivityCollector.removeActivity(this);}}
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.text_android_broadcase.LoginActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.text_android_static.static_Receiver" > </activity> <activity android:name="com.text_android_dynamic.Dynamic_Receiver" > </activity> <activity android:name="com.text_android_broadcase.MainActivity" > </activity> <receiver android:name="com.text_android_broadcase.Receiver" > <intent-filter > <action android:name="com.broadcasereceiver.MyBoradReceiver" /> </intent-filter> </receiver> </application>
0 0
- android BrocadcastReceiver
- BrocadcastReceiver广播 常规使用
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- JQuery中$(function(){})和$(document).ready(function(){})
- js 无法删除cookie的问题
- 第一个java程序:错误: 编码GBK的不可映射字符
- Windows下如何构建和发布Python模块
- eclipse 无法链接手机
- android BrocadcastReceiver
- 第四十二天 BitmapView(蒙版,或模拟给图片打马赛克)
- poj3255
- 网络配置
- access vba打开另一个数据库并关闭当前数据库的代码
- 因果图小例子
- 在XML数据库中高效的关键字搜索求SLCAs
- Bash shell 快捷键
- iOS数据请求之post异步同步