編輯:關於Android編程
廣播接收者是Android的四大組件之一,對於這個的定義也是很貼切,在Android系統中,當系統發生了一些狀態的改變,系統會向所有的程序廣播這個狀態的變化。但是這些廣播不是所有的我們都接收的,我們只會接收我們關注的廣播,這裡可以類比廣播台,許多個廣播台都在發送著不同的廣播,我們可以用收音機根據調頻接收我們想要聽的廣播,這裡廣播台發送的不同的廣播,就相當於Android中發送的不同廣播,這裡的收音機就相當於我們的程序,我們通過設置我們的程序,就能接收到對應的廣播。
對於廣播接收者,我們想要使用它需要按照如下步驟:
1 自定義一個類並且繼承BroadcastReceiver類,實現onReceive方法,這個方法會在接收到廣播的時候調用
1 在AndroidMainfest.xml注冊該BroadcastReceiver,並且配置相應的參數
下面定義一個廣播接收者用於接收短信到來的廣播,首先創建一個java類:
import java.text.SimpleDateFormat; import java.util.Date; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsMessage; public class SmsReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for (Object pdu : pdus) { //創建一個短信 SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu); //獲取發送手機號 String address = sms.getOriginatingAddress(); //獲取短信的內容 String body = sms.getMessageBody(); //獲取短信的時間 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(sms.getTimestampMillis())); System.out.println(time); System.out.println(address); System.out.println(body); } //中斷手機接收操作 abortBroadcast(); } }
然後在AndroidMainfest.xml注冊該BroadcastReceiver,
對於廣播分為兩種:有序廣播和無序廣播,
無序廣播所有的廣播接收者都可以接收到
有序廣播會按照接收者優先級的順序挨個的接收到,接收者可以使用abortBroadcast();方法隨時停止該廣播的繼續傳遞
既然有廣播的接收者,那麼一定也有廣播的發送者,在Android發送廣播也是需要使用Intent,首先使用Intent創建一個意圖,然後使用sendBroadcast(無序廣播)或者sendBroadcast(有序廣播)方法將廣播發送出去。
看下面例子代碼,創建了兩個廣播,並且按照兩種方式發送出去了。
package com.mxy; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /** * 無序廣播所有的廣播接收者都可以接收到 * 有序廣播會按照接收者優先級的順序挨個的接收到,接收者可以隨時停止該廣播的繼續傳遞 * @param view */ public void click(View view) { Intent intent = new Intent(); intent.setAction("com.mxy.broadcastReceiver"); intent.putExtra("data", "測試數據"); this.sendBroadcast(intent); Intent intent1 = new Intent(); intent1.setAction("com.mxy.OrderedBroadcastReceiver"); intent1.putExtra("data", "測試數據"); this.sendOrderedBroadcast(intent1, null); } }下面看一下AndroidMainfest.xml中的相關配置:
由上面可以看出無序廣播由MyBroadcastReceiver接收,有序廣播由MyBroadcastReceiver1和MyBroadcastReceiver2接收,但是他們兩個的優先級不同,下面是這三個類的代碼:
MyBroadcastReceiver.java
package com.mxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i("mxy", "獲取到data=" + data ); } }
MyBroadcastReceiver1.java
package com.mxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBroadcastReceiver1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i("mxy", "MyBroadcastRecevier1獲取到data=" + data ); //停止廣播了 abortBroadcast(); } }
MyBroadcastReceiver2.java
package com.mxy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBroadcastReceiver2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i("mxy", "MyBroadcastRecevier2獲取到data=" + data ); } }
例子代碼下載地址:http://download.csdn.net/detail/mengxiangyue/7278217
計時器來計算每個運動員所消耗的時間等,而在Android系統之中,這種計時的功能就可以使用Chronometer組件,此類的繼承結構如下所示: 2java.lang.Ob
為了簡化 Android 的開發力度,Google 決定將重點建設 Android Studio 工具。Google 會在今年年底停止支持其他集成開發環境,比如 Ecli
實現原理(1)首先獲得下載文件的長度,然後設置本地文件的長度。(2)根據文件長度和線程數計算每條線程下載的數據長度和下載位置。如:文件的長度為6M,線程數為3,那麼,每條
前言:從本篇開始,將進入Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord, 接下來幾篇都是MediaPla