Android廣播類似QT中的信號和槽~~~
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、成都小程序開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十載以來,已經(jīng)為成百上千家成都邊坡防護網(wǎng)各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的成百上千家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。
發(fā)送方只負責(zé)發(fā)送廣播,不關(guān)心接收方是否接收到了信號,也不關(guān)心接收方如何處理信號。
界面文件activity_main.xml
MainActivity.java
public class MainActivity extends Activity { public static final String ACTION_1 = "send1~~~"; public static final String ACTION_2 = "send2~~~~~~"; private BroadcastReceiver receiver; private TextView textView = null; private Button button1 = null; private Button button2 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView1); textView.setText(""); button1 = (Button) findViewById(R.id.send1); button2 = (Button) findViewById(R.id.send2); initView(); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); String data = intent.getExtras().getString("data"); if (action.equals(ACTION_1)) { textView.setText(""); textView.setText("接收到:\n" + ACTION_1 + "\n1內(nèi)容是:" + data); } else if (action.equals(ACTION_2)) { textView.setText(""); textView.setText("接收到:\n" + ACTION_2 + "\n2內(nèi)容是:" + data); } } }; IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_1); filter.addAction(ACTION_2); registerReceiver(receiver, filter); } public void initView() { OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.send1: Intent intent1 = new Intent(ACTION_1); intent1.putExtra("data", "action_01"); sendBroadcast(intent1); break; case R.id.send2: Intent intent2 = new Intent(ACTION_2); intent2.putExtra("data", "action_02"); sendBroadcast(intent2); break; default: break; } } }; button1.setOnClickListener(onClickListener); button2.setOnClickListener(onClickListener); } @Override protected void onStop() { super.onStop(); unregisterReceiver(receiver);//解除注冊 } }
下面的例子是Mars視頻中的例子
自定義接收器TestRecevier.java
public class TestRecevier extends BroadcastReceiver{ public TestRecevier() { System.out.println("調(diào)用TestRecevier構(gòu)造函數(shù)"); } @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceive"); } }
在AndroidManifest.xml文件中注冊接收器
MainActivity.java
public class MainActivity extends Activity { private Button sendButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendButton = (Button) findViewById(R.id.sendButton); sendButton.setOnClickListener(new BroadcastListener()); } class BroadcastListener implements OnClickListener{ @Override public void onClick(View v) { System.out.println("~~~~~~~~~~~"); //TestRecevier testRecevier = new TestRecevier(); Intent intent = new Intent(); intent.setAction(Intent.ACTION_EDIT); //發(fā)送廣播 MainActivity.this.sendBroadcast(intent); } } }
點擊按鈕之后的輸入如下
11-24 13:53:33.288: I/System.out(24849): ~~~~~~~~~~~
11-24 13:53:33.288: I/System.out(24849): 調(diào)用TestRecevier構(gòu)造函數(shù)
11-24 13:53:33.288: I/System.out(24849): onReceive
BroadcastRecevier用于監(jiān)聽被廣播的時間(Intent)。為了達到這個目的,BroadcastRecevier必須進行注冊,兩種注冊方式:
在應(yīng)用程序的代碼中進行注冊
在AndroidManifest.xml當中進行注冊
如果一個BroadcastRecevier用于更新UI,通常會使用第一種方式進行注冊,在Activity啟動的時候進行注冊,在Activity不可見以后取消注冊。
例:監(jiān)聽接收短信,并且在控制臺輸出短信內(nèi)容
MainActivity.java
public class MainActivity extends Activity { private Button registerButton = null; private Button unregisterButton = null; private SMSReceiver smsReceiver = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); registerButton = (Button)findViewById(R.id.register); registerButton.setOnClickListener(new RegisterReceiverListener()); unregisterButton = (Button)findViewById(R.id.unregister); unregisterButton.setOnClickListener(new UnRegisterReceiverListener()); } class RegisterReceiverListener implements OnClickListener{ @Override public void onClick(View v) { System.out.println("開始監(jiān)聽"); //生成一個BroiadcastReceiver對象 smsReceiver = new SMSReceiver(); //生成一個IntentFilter對象 IntentFilter filter = new IntentFilter(); //為IntentFilter添加一個Action filter.addAction("android.provider.Telephony.SMS_RECEIVED"); //將BroadcastReceiver對象注冊到系統(tǒng)當中 MainActivity.this.registerReceiver(smsReceiver, filter); } } class UnRegisterReceiverListener implements OnClickListener{ @Override public void onClick(View v) { //解除BroadcastReceiver對象的注冊 MainActivity.this.unregisterReceiver(smsReceiver); } } }
SMSReceiver.java
public class SMSReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("receive message"); //接受Intent對象當中的數(shù)據(jù) Bundle bundle = intent.getExtras(); //在Bundle對象當中有一個屬性名為pdus,這個屬性的值是一個Object數(shù)組 Object[] myOBJpdus = (Object[]) bundle.get("pdus"); //創(chuàng)建一個SmsMessage類型的數(shù)組 SmsMessage[] messages = new SmsMessage[myOBJpdus.length]; System.out.println(messages.length); for (int i = 0; i在AndroidManifest.xml中配置讀取短信的權(quán)限
Android 系統(tǒng)廣播大全
(參考http://blog.chinaunix.net/uid-25370280-id-1735613.html)
String ADD_SHORTCUT_ACTION 動作:在系統(tǒng)中添加一個快捷方式。
String ALL_APPS_ACTION 動作:列舉所有可用的應(yīng)用。輸入:無。
String ALTERNATIVE_CATEGORY 類別:說明 activity 是用戶正在瀏覽的數(shù)據(jù)的一個可選操作。
String ANSWER_ACTION 動作:處理撥入的電話。
String BATTERY_CHANGED_ACTION 廣播:充電狀態(tài),或者電池的電量發(fā)生變化。
String BOOT_COMPLETED_ACTION 廣播:在系統(tǒng)啟動后,這個動作被廣播一次(只有一次)。
String BROWSABLE_CATEGORY 類別:能夠被瀏覽器安全使用的 activities 必須支持這個類別。
String BUG_REPORT_ACTION 動作:顯示 activity 報告錯誤。
String CALL_ACTION 動作:撥打電話,被呼叫的聯(lián)系人在數(shù)據(jù)中指定。
String CALL_FORWARDING_STATE_CHANGED_ACTION 廣播:語音電話的呼叫轉(zhuǎn)移狀態(tài)已經(jīng)改。
String CLEAR_CREDENTIALS_ACTION 動作:清除登陸憑證 (credential)。
String CONFIGURATION_CHANGED_ACTION 廣播:設(shè)備的配置信息已經(jīng)改變,參見 Resources.Configuration.
Creator CREATOR 無 無
String DATA_ACTIVITY_STATE_CHANGED_ACTION 廣播:電話的數(shù)據(jù)活動(data activity)狀態(tài)(即收發(fā)數(shù)據(jù)的狀態(tài))已經(jīng)改變。
String DATA_CONNECTION_STATE_CHANGED_ACTION 廣播:電話的數(shù)據(jù)連接狀態(tài)已經(jīng)改變。
String DATE_CHANGED_ACTION 廣播:日期被改變。
String DEFAULT_ACTION 動作:和 VIEW_ACTION 相同,是在數(shù)據(jù)上執(zhí)行的標準動作。
String DEFAULT_CATEGORY 類別:如果 activity 是對數(shù)據(jù)執(zhí)行確省動作(點擊, center press)的一個選項,需要設(shè)置這個類別。
String DELETE_ACTION 動作:從容器中刪除給定的數(shù)據(jù)。
String DEVELOPMENT_PREFERENCE_CATEGORY 類別:說明 activity 是一個設(shè)置面板 (development preference panel).
String DIAL_ACTION 動作:撥打數(shù)據(jù)中指定的電話號碼。
String EDIT_ACTION 動作:為制定的數(shù)據(jù)顯示可編輯界面。
String EMBED_CATEGORY 類別:能夠在上級(父)activity 中運行。
String EMERGENCY_DIAL_ACTION 動作:撥打緊急電話號碼。
int FORWARD_RESULT_LAUNCH 啟動標記:如果這個標記被設(shè)置,而且被一個已經(jīng)存在的 activity 用來啟動新的 activity,已有 activity 的回復(fù)目標 (reply target) 會被轉(zhuǎn)移給新的 activity。
String FOTA_CANCEL_ACTION 廣播:取消所有被掛起的 (pending) 更新下載。
String FOTA_INSTALL_ACTION 廣播:更新已經(jīng)被確認,馬上就要開始安裝。
String FOTA_READY_ACTION 廣播:更新已經(jīng)被下載,可以開始安裝。
String FOTA_RESTART_ACTION 廣播:恢復(fù)已經(jīng)停止的更新下載。
String FOTA_UPDATE_ACTION 廣播:通過 OTA 下載并安裝操作系統(tǒng)更新。
String FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY 類別:To be used as code under test for framework instrumentation tests.
String GADGET_CATEGORY 類別:這個 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)。
String GET_CONTENT_ACTION 動作:讓用戶選擇數(shù)據(jù)并返回。
String HOME_CATEGORY 類別:主屏幕 (activity),設(shè)備啟動后顯示的第一個 activity。
String INSERT_ACTION 動作:在容器中插入一個空項 (item)。
String INTENT_EXTRA 附加數(shù)據(jù):和 PICK_ACTIVITY_ACTION 一起使用時,說明用戶選擇的用來顯示的 activity;和 ADD_SHORTCUT_ACTION 一起使用的時候,描述要添加的快捷方式。
String LABEL_EXTRA 附加數(shù)據(jù):大寫字母開頭的字符標簽,和 ADD_SHORTCUT_ACTION 一起使用。
String LAUNCHER_CATEGORY 類別:Activity 應(yīng)該被顯示在頂級的 launcher 中。
String LOGIN_ACTION 動作:獲取登錄憑證。
String MAIN_ACTION 動作:作為主入口點啟動,不需要數(shù)據(jù)。
String MEDIABUTTON_ACTION 廣播:用戶按下了“Media Button”。
String MEDIA_BAD_REMOVAL_ACTION 廣播:擴展介質(zhì)(擴展卡)已經(jīng)從 SD 卡插槽拔出,但是掛載點 (mount point) 還沒解除 (unmount)。
String MEDIA_EJECT_ACTION 廣播:用戶想要移除擴展介質(zhì)(拔掉擴展卡)。
String MEDIA_MOUNTED_ACTION 廣播:擴展介質(zhì)被插入,而且已經(jīng)被掛載。
String MEDIA_REMOVED_ACTION 廣播:擴展介質(zhì)被移除。
String MEDIA_SCANNER_FINISHED_ACTION 廣播:已經(jīng)掃描完介質(zhì)的一個目錄。
String MEDIA_SCANNER_STARTED_ACTION 廣播:開始掃描介質(zhì)的一個目錄。
String MEDIA_SHARED_ACTION 廣播:擴展介質(zhì)的掛載被解除 (unmount),因為它已經(jīng)作為 USB 大容量存儲被共享。
String MEDIA_UNMOUNTED_ACTION 廣播:擴展介質(zhì)存在,但是還沒有被掛載 (mount)。
String MESSAGE_WAITING_STATE_CHANGED_ACTION 廣播:電話的消息等待(語音郵件)狀態(tài)已經(jīng)改變。
int MULTIPLE_TASK_LAUNCH 啟動標記:和 NEW_TASK_LAUNCH 聯(lián)合使用,禁止將已有的任務(wù)改變?yōu)榍熬叭蝿?wù) (foreground)。
String NETWORK_TICKLE_RECEIVED_ACTION 廣播:設(shè)備收到了新的網(wǎng)絡(luò) "tickle" 通知。
int NEW_TASK_LAUNCH 啟動標記:設(shè)置以后,activity 將成為歷史堆棧中的第一個新任務(wù)(棧頂)。
int NO_HISTORY_LAUNCH 啟動標記:設(shè)置以后,新的 activity 不會被保存在歷史堆棧中。
String PACKAGE_ADDED_ACTION 廣播:設(shè)備上新安裝了一個應(yīng)用程序包。
String PACKAGE_REMOVED_ACTION 廣播:設(shè)備上刪除了一個應(yīng)用程序包。
String PHONE_STATE_CHANGED_ACTION 廣播:電話狀態(tài)已經(jīng)改變。
String PICK_ACTION 動作:從數(shù)據(jù)中選擇一個項目 (item),將被選中的項目返回。
String PICK_ACTIVITY_ACTION 動作:選擇一個 activity,返回被選擇的 activity 的類(名)。
String PREFERENCE_CATEGORY 類別:activity是一個設(shè)置面板 (preference panel)。
String PROVIDER_CHANGED_ACTION 廣播:更新將要(真正)被安裝。
String PROVISIONING_CHECK_ACTION 廣播:要求 polling of provisioning service 下載最新的設(shè)置。
String RUN_ACTION 動作:運行數(shù)據(jù)(指定的應(yīng)用),無論它(應(yīng)用)是什么。
String SAMPLE_CODE_CATEGORY 類別:To be used as an sample code example (not part of the normal user experience).
String SCREEN_OFF_ACTION 廣播:屏幕被關(guān)閉。
String SCREEN_ON_ACTION 廣播:屏幕已經(jīng)被打開。
String SELECTED_ALTERNATIVE_CATEGORY 類別:對于被用戶選中的數(shù)據(jù),activity 是它的一個可選操作。
String SENDTO_ACTION 動作:向 data 指定的接收者發(fā)送一個消息。
String SERVICE_STATE_CHANGED_ACTION 廣播:電話服務(wù)的狀態(tài)已經(jīng)改變。
String SETTINGS_ACTION 動作:顯示系統(tǒng)設(shè)置。輸入:無。
String SIGNAL_STRENGTH_CHANGED_ACTION 廣播:電話的信號強度已經(jīng)改變。
int SINGLE_TOP_LAUNCH 啟動標記:設(shè)置以后,如果 activity 已經(jīng)啟動,而且位于歷史堆棧的頂端,將不再啟動(不重新啟動) activity。
String STATISTICS_REPORT_ACTION 廣播:要求 receivers 報告自己的統(tǒng)計信息。
String STATISTICS_STATE_CHANGED_ACTION 廣播:統(tǒng)計信息服務(wù)的狀態(tài)已經(jīng)改變。
String SYNC_ACTION 動作:執(zhí)行數(shù)據(jù)同步。
String TAB_CATEGORY 類別:這個 activity 應(yīng)該在 TabActivity 中作為一個 tab 使用。
String TEMPLATE_EXTRA 附加數(shù)據(jù):新記錄的初始化模板。
String TEST_CATEGORY 類別:作為測試目的使用,不是正常的用戶體驗的一部分。
String TIMEZONE_CHANGED_ACTION 廣播:時區(qū)已經(jīng)改變。
String TIME_CHANGED_ACTION 廣播:時間已經(jīng)改變(重新設(shè)置)。
String TIME_TICK_ACTION 廣播:當前時間已經(jīng)變化(正常的時間流逝)。
String UMS_CONNECTED_ACTION 廣播:設(shè)備進入 USB 大容量存儲模式。
String UMS_DISCONNECTED_ACTION 廣播:設(shè)備從 USB 大容量存儲模式退出。
String UNIT_TEST_CATEGORY 類別:應(yīng)該被用作單元測試(通過 test harness 運行)。
String VIEW_ACTION 動作:向用戶顯示數(shù)據(jù)。
String WALLPAPER_CATEGORY 類別:這個 activity 能過為設(shè)備設(shè)置墻紙。
String WALLPAPER_CHANGED_ACTION 廣播:系統(tǒng)的墻紙已經(jīng)改變。
String WALLPAPER_SETTINGS_ACTION 動作:顯示選擇墻紙的設(shè)置界面。輸入:無。
String WEB_SEARCH_ACTION 動作:執(zhí)行 web 搜索。
String XMPP_CONNECTED_ACTION 廣播:XMPP 連接已經(jīng)被建立。
String XMPP_DISCONNECTED_ACTION 廣播:XMPP 連接已經(jīng)被斷開。
網(wǎng)站欄目:Android學(xué)習(xí)筆記-廣播機制
網(wǎng)站URL:http://weahome.cn/article/gpjcds.html