1.接受短消息的BroadcastReceiver
public class ShortMessageReceiver extends BroadcastReceiver {
public static final String TAG="ShortMessageReceiver";
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Bundle bundle = intent.getExtras();
if (bundle != null)
{
Set<String> keys = bundle.keySet();
//查看收到的广播中包含哪些数据类型
for (String key : keys)
{
Log.d("key", key);
}
//获取收到的短信数据,所有的短信数据都需要通过一个名字为pdus的key获取
Object[] objArray = (Object[]) bundle.get("pdus");
//定义封装短信内容的SmsMessage对象数组
SmsMessage[] messages = new SmsMessage[objArray.length];
for (int i = 0; i < objArray.length; i++)
{
//将短信转换成SmsMessage对象
messages[i] = SmsMessage.createFromPdu((byte[]) objArray[i]);
String s = "手机号:" + messages[i].getOriginatingAddress() + "\n";
s += "短信内容:" + messages[i].getDisplayMessageBody();
Toast.makeText(context, s, Toast.LENGTH_LONG).show();
}
}
}
}
2.在AndroidManifest.xml中注册
<receiver
android:name=".ShortMessageReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_SMS" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
3.在AndroidManifest.xml申请权限
<uses-permission android:name="android.permission.RECEIVE_MMS" />
4.其他Receiver
(1)接听电话
public class InCallReceiver extends BroadcastReceiver {
public InCallReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Toast.makeText(context,"接收到广播",Toast.LENGTH_SHORT).show();
TelephonyManager manager=(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
switch (manager.getCallState()){
case TelephonyManager.CALL_STATE_RINGING:
String number=intent.getStringExtra("incoming_number");
Toast.makeText(context,"来电:"+number,Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(context,"offhook",Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_IDLE:
Toast.makeText(context,"挂断电话",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
(2)拨出电话
public class OutCallReceiver extends BroadcastReceiver {
public OutCallReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Toast.makeText(context,"去电号码:"+number,Toast.LENGTH_SHORT).show();
}
}
(3)屏幕点亮和熄灭
public class ScreenOnOffReceiver extends BroadcastReceiver {
public ScreenOnOffReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
Toast.makeText(context, "Screen On", Toast.LENGTH_SHORT).show();
}else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){
Toast.makeText(context,"Screen Off",Toast.LENGTH_SHORT).show();
}
}
}
(4)开机启动
public class StartUpReceiver extends BroadcastReceiver {
public StartUpReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Intent intent1=new Intent(context,MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
}
(5)电池电量改变
private BroadcastReceiver batteryChangedReceiver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){
int level=intent.getIntExtra("level",0);
int scale=intent.getIntExtra("scale",100);
textView.setText("当前电量:"+(level*100/scale)+"%");
}
}
};
在AndroidManifest.xml中注册的代码
<receiver
android:name=".OutCallReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<receiver
android:name=".StartUpReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="999" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=".InCallReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.PHONE.STATE" />
</intent-filter>
</receiver>
需在在Java代码中注册
//收到屏幕点亮和熄灭的BroadcastReceiver
IntentFilter filter1=new IntentFilter(Intent.ACTION_SCREEN_ON);
filter1.addAction(Intent.ACTION_SCREEN_OFF);
screenOnOffReceiver=new ScreenOnOffReceiver();
registerReceiver(screenOnOffReceiver,filter1);<pre name="code" class="java"> //收到电池电量改变的BroadcastReceiver
registerReceiver(batteryChangedReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
需申请的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
5.动态注册的BroadcastReceiver需要在onDestory()中解除
unregisterReceiver(shortMessageReceiver);
unregisterReceiver(screenOnOffReceiver);
unregisterReceiver(batteryChangedReceiver);
unregisterReceiver(inCallReceiver);