編輯:關於Android編程
Android中的廣播用的太多了,今天稍微總結一下。
按注冊方式分為兩種:
1.靜態注冊廣播:
靜態注冊廣播就是在androidManifest.xml文件中注冊廣播,假設我們要實現這樣一個效果,在一個activity上點擊按鈕,發送一條廣播,這條廣播彈出一個toast,顯示“靜態”二字。
先看看廣播接受者:
public class MyBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"靜態", Toast.LENGTH_LONG).show();
}
}
清單文件中注冊:
<receiver android:name="com.example.staticbroadcast.MyBroadcast" >
<intent-filter>
<action android:name="com.test.StaticBroadcast" />
</intent-filter>
</receiver>
activity中的點擊事件(發送廣播):
this.static_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.test.StaticBroadcast");
sendBroadcast(intent);
}
});
2.動態注冊:
動態注冊一般是在activity中的onStart()方法中注冊,在onStop()方法中解除注冊,代碼如下:
public class MainActivity extends Activity {
private Button static_btn;
private Button dynamic_btn;
private BroadcastReceiver myBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.static_btn = (Button) this.findViewById(R.id.button1);
this.dynamic_btn = (Button) this.findViewById(R.id.Button01);
myBroadcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this,"你好,這裡是動態廣播!", Toast.LENGTH_LONG).show();
}
};
// this.static_btn.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// Intent intent = new Intent();
// intent.setAction("com.test.StaticBroadcast");
// sendBroadcast(intent);
// }
// });
this.dynamic_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//發送廣播
Intent intent = new Intent();
intent.setAction("DynamicBroadcast");
sendBroadcast(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
//注冊廣播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("DynamicBroadcast");
registerReceiver(myBroadcastReceiver, intentFilter);
}
@Override
protected void onStop() {
super.onStop();
//取消注冊
unregisterReceiver(myBroadcastReceiver);
}
}
關於靜態注冊的細節:
android:exported=”true”這個屬性表示該廣播接收器是否接收來自其他App發出的廣播,如果有intent-filter屬性,則默認為true,否則默認為false。
每個廣播接收者都可以接受多個廣播源,如果是靜態注冊,那麼你要這麼做:
<receiver
android:exported="true"
android:name="com.example.staticbroadcast.MyBroadcast" >
<intent-filter>
<action android:name="com.test.StaticBroadcast" />
<action android:name="com.test.StaticBroadcast2"/>
</intent-filter>
</receiver>
在廣播接收器中這樣處理:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.test.StaticBroadcast")) {
Toast.makeText(context, "靜態", Toast.LENGTH_SHORT).show();
} else if (intent.getAction().equals("com.test.StaticBroadcast2")) {
Toast.makeText(context, "靜態2", Toast.LENGTH_SHORT).show();
}
}
如果是動態注冊,注冊方式如下:
@Override
protected void onStart() {
super.onStart();
//注冊廣播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("DynamicBroadcast");
intentFilter.addAction("DynamicBroadcast2");
registerReceiver(myBroadcastReceiver, intentFilter);
}
廣播接收器中的處理方式與靜態注冊一致。
關於怎樣使用broadcast實現activity和fragment之間的通信可以查看我的另一篇博客使用Broadcast實現android組件之間的通信
原文地址:http://blog.csdn.net/u012702547/article/details/46955787
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android中自定義控件之液位指示器
由於安卓應用很廣泛,在工業中也常有一些應用,比如可以用安卓來去工業中的一些數據進行實現的監測,顯示,同時可以做一些自動化控制,當然在這裡,我不是做這些自動化控制方面的研究
Android 仿當樂游戲詳情頁面(二)
寫在前面通過上一篇文章的分析,基本已經了解當樂游戲詳情頁面的思想思路了,本篇文章主要是實現頁面的基本效果。頁面布局通過上一篇文章分析,已經知道,當樂游戲詳情頁是通過3個不
簡單6步 把安卓機變得和蘋果系統一樣快
眾所周知,Android系統對硬件擁有較高的要求,使用一段時間以後就會出現速度變慢、多任務處理卡頓的現象,其實通過一些小技巧,便能提升設備的運行速度,大家不
AndroidUI組件之TextSwitcher
package com.gc.textswitcherdemo; /* * 文本切換器(TextSwitcher): * 1、TextSwitcher繼承了ViewS