編輯:關於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計時器組件.三十二.)
計時器來計算每個運動員所消耗的時間等,而在Android系統之中,這種計時的功能就可以使用Chronometer組件,此類的繼承結構如下所示: 2java.lang.Ob
Android Studio 常用功能介紹
為了簡化 Android 的開發力度,Google 決定將重點建設 Android Studio 工具。Google 會在今年年底停止支持其他集成開發環境,比如 Ecli
Android實現網絡多線程文件下載
實現原理(1)首先獲得下載文件的長度,然後設置本地文件的長度。(2)根據文件長度和線程數計算每條線程下載的數據長度和下載位置。如:文件的長度為6M,線程數為3,那麼,每條
Android Multimedia框架總結(一)MediaPlayer介紹之狀態圖及生命周期
前言:從本篇開始,將進入Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord, 接下來幾篇都是MediaPla