android BrocadcastReceiver
2015-09-18 21:08
639 查看
广播注册有两种方式:
1,静态注册
2,动态注册
注意的是动态注册需要关闭广播
实现广播首先先定义一个类 继承 BroadCaseReceive,实现onReceive方法 所有的操作都在此方法中进行
注意的是这个方法的生命周期很短,所以所有的耗时的操作都不要在这个方法中进行。
广播分为两种:
1,标准广播
发送广播为标准意义的 就像是新闻联播,所有的接受者都可以收到
(这个是静态注册)
首先是一个继承BrocadcastReceiver的类,在Manifast里面注册,在Activity里面启动。
2,有序广播
发送广播为有序的,就像是中央文件,需要一级一级的向下传达
代码与上一个一样,改一下Manifest里面的优先级
一个强制下线的Demo
另一个activity只有一个广播发送
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 stub super.onDestroy(); unregisterReceiver(receiver); }
实现广播首先先定义一个类 继承 BroadCaseReceive,实现onReceive方法 所有的操作都在此方法中进行
注意的是这个方法的生命周期很短,所以所有的耗时的操作都不要在这个方法中进行。
public class Receiver extends BroadcastReceiver{ @Override public 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{ @Override public 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{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.Main_SendBtn).setOnClickListener(this); } @Override public 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; @Override protected 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); } @Override public 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"; @Override public 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 stub super.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; @Override public void onClick(View v) { // TODO Auto-generated method stub acc = 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 { @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Waring"); builder.setMessage("login again"); builder.setCancelable(false);//不可以控制消除dialog builder.setPositiveButton("OK",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub ActivityCollector.finishAll(); Intent intent = new Intent(context,LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//优先启动这个activity context.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 { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.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>
相关文章推荐
- 左右 android AES 所述机器的一部分 javax.crypto.BadPaddingException: pad block corrupted
- android通讯录根据首字母分组(二)
- android使用自定义字体
- Android4.1添加新的按键(2)
- Android4 .1添加新的按键(1)
- Android4.1添加新的按键(3)
- android下载图片显示总结
- Android开发环境的调研
- Android之ADB常用命令
- 弄明白Android 接口回调机制
- Android Studio配置Esri ArcGIS
- Android四大组件
- android通讯录根据首字母分组(一)
- 使用AutoCompleteTextView和MultiAutoCompleteTextView实现输入自动匹配
- Android——Hander和AsyncTask的使用
- Android四大组件——Service详解
- Android内存管理、Android中Dalvik和JVM的区别
- ubuntu14.04下载android source code
- android 开发 小技巧
- android log 日志管理