广播接收者(2)
来源:互联网 发布:软件poc产品 编辑:程序博客网 时间:2024/06/13 07:20
参考郭霖的书
发送自定义广播
- 在发广播之前,我们先定义一个广播接收器来接收此广播才行。因此,新建一个类:MyBroadcastReceiver,让他继承BroadcastReceiver,代码如下:
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show(); }}
这里,当MyBroadcastReceiver 收到自定义的广播时,就会执行onReceive()方法中的逻辑,弹出一个Toast。
紧接着,要在清单文件AndroidManifest.xml中对这个广播接收器进行注册。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.m05_broadcastreceiver02.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> <receiver android:name=".MyBroadcastReceiver"> <intent-filter > <action android:name="com.example.m05_broadcastreceiver02.MY_BROADCAST"/> </intent-filter> </receiver> </application>
Button button1=(Button)findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent =new Intent("com.example.m05_broadcastreceiver02.MY_BROADCAST"); sendBroadcast(intent); } });
可以看到,点击按钮时,发送com.example.m05_broadcastreceiver02.MY_BROADCAST这条广播,这样,所有能够监听com.example.m05_broadcastreceiver02.MY_BROADCAST这条广播的广播接收器就都会同时收到消息,此时发出去的就是一条标准广播,即无序广播。
- 发送有序广播:
广播是一种可以跨进程的通信方式,其他应用程序是可以收到的。现在我们来发一条有序广播。
有序广播不仅有先后顺序,而且前面的广播还可以将后面的广播截断。
Intent intent =new Intent("com.example.m05_broadcastreceiver02.MY_BROADCAST"); sendOrderedBroadcast(intent, null);
<receiver android:name=".MyBroadcastReceiver"> <intent-filter android:priority="100"> <action android:name="com.example.m05_broadcastreceiver02.MY_BROADCAST"/> </intent-filter> </receiver>
abortBroadcast();//拦截广播,防止后面的接收到
特别关注:
广播接收器的生命周期:关键在于BroadcastReceiver中的onReceive()方法,从onReceive()里的第一行代码开始,onReceive()里的最后一行代码结束。
一个广播到来的时候,用什么方式提醒用户是最友好的呢?第一种方式是吐司,第二种方式是通知
使用本地广播
之前我们发送和接收的广播全部都是属于全局广播,即发出去的广播可以被其他任何应用程序接收到,并且我们也可以接收来自于其他任何应用程序的广播。这样一来,必然会造成安全问题。于是便有了本地广播:即只能在本应用程序中发送和接收广播。这就要使用到了LocalBroadcastManager这个类来对广播进行管理。注:不要使用对话框,以免中断了用户正在进行的操作。
public class MainActivity extends Activity { private IntentFilter intentFilter; private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //通过LocalBroadcastManager的getInstance()方法得到它的一个实例 localBroadcastManager = LocalBroadcastManager.getInstance(this); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent( "com.example.broadcasttest.LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent);//调用sendBroadcast()方法发送广播 } }); //动态注册本地的广播接收器 intentFilter = new IntentFilter(); intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); } class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show(); } }}
- 广播接收者(2)
- android 广播接收者分析(2)
- 广播接收者(BroadcastReceiver)
- BroadcastReceiver(广播接收者)
- BroadcastReceiver(广播接收者)
- Android--广播接收者(发送有序广播)
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- D9
- Android打包签名那点事
- 会员中心增加会员登录次数显示功能–PHPCMS V9
- Android面试题集锦
- bzoj3680 吊打XXX 爬山算法
- 广播接收者(2)
- const与sizeof
- 杭电oj 2002 计算球的体积
- iOS面试-WebView一些知识
- Compound Words
- 自考C++程序设计试题2010年10月
- 安卓带EditText的区域整体压缩
- 【BZOJ1997】[Hnoi2010]Planar【平面图判定】【2-SAT】
- linux下Apache配置