package com.example.testbroadcasereceiverregiste;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* @author cen: 广播的注册和注销
* 大前提!!!调用系统广播时,记得注册权限!!!
* 1.首先创建一个类(例如Receiver)继承BroadcaseReceiver,用作接收到广播后触发的事件,然后调用onReceive方法
* 2.然后是注册广播,分为静态注册和动态注册,其中静态注册是又叫:常驻型广播,当你的应用程序关闭了
* 如果有广播信息来,你写的广播接收器同样的能接受到,静态注册是在AndroidManifest.xml文件中注册。
* 动态注册分为注册registerReceiver和注销unregisterReceiver方法
* 3.动态注册步骤:创建Receiver类的对象,创建IntentFilter类的对象并传入action动作,最后调用registerReceiver方法
* 4.动态注销步骤:直接调用unregisterReceiver方法,传入Receiver类的对象
* 5.自定义发送广播,创建Intent对象,传入action动作,调用sendsendBroadcast()传入intent
*/
public class MainActivity extends Activity {
private final String TAG = "messageaa";
private Button button;// 绑定广播
private Button button2;// 取消广播
private Button button3;// 发送自定义广播
private Button button4;// 绑定自定义广播
private Button button5;// 注销自定义广播
private Receiver mReceiver;// Receiver类的对象
private Receiver selfReceiver;// Receiver类的对象
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {// 绑定广播
@Override
public void onClick(View v) {
Log.i(TAG, "--onClick-->>");
Toast.makeText(MainActivity.this, "来信息了", Toast.LENGTH_SHORT)
.show();
mReceiver = new Receiver();// 实例化对象
IntentFilter filter = new IntentFilter();// 创建新的过滤器对象
filter.addAction(SMS_ACTION);// 添加过滤动作
registerReceiver(mReceiver, filter);// 注册广播
}
});
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {// 取消广播
@Override
public void onClick(View v) {
unregisterReceiver(mReceiver);
Toast.makeText(MainActivity.this, "注销了广播", Toast.LENGTH_SHORT)
.show();
}
});
button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new OnClickListener() {// 发送自定义广播
@Override
public void onClick(View v) {
Intent intent = new Intent("hehehe");
sendBroadcast(intent);
}
});
button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new OnClickListener() {// 绑定自定义广播
@Override
public void onClick(View v) {
selfReceiver = new Receiver();
IntentFilter filter = new IntentFilter("hehehe");
registerReceiver(selfReceiver, filter);
}
});
button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(new OnClickListener() {// 注销自定义广播
@Override
public void onClick(View v) {
unregisterReceiver(selfReceiver);
}
});
}
@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;
}
}
下面是Receiver.java
package com.example.testbroadcasereceiverregiste;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class Receiver extends BroadcastReceiver {
private final String TAG = "message";
public Receiver() {// 构造方法
}
@Override
public void onReceive(Context context, Intent intent) {//其中intent就是广播的内容
Log.i(TAG, "--onReceive-->>"+intent.getAction());
Toast.makeText(context, "呵呵呵呵呵" + intent.getAction(),
Toast.LENGTH_LONG).show();
//下面是获取短信内容即广播内容的一些方法
Bundle bundle=intent.getExtras();//接收Intent对象中的数据
//在Bundle对象中有一个属性名为pdus,这个属性的值是一个Object数组
Object[] myOBJpdus=(Object[])bundle.get("pdus");
//创建SmsMessage类型的数组
SmsMessage[] messages=new SmsMessage[myOBJpdus.length];
Log.i(TAG, "这是消息"+messages.length);
for (int i = 0; i < myOBJpdus.length; i++) {
//使用Object数组当中的对象创建SmsMessage对象
messages[i]=SmsMessage.createFromPdu((byte[])myOBJpdus[i]);
//调用SmsMessage对象的getDisplayMessageBody()方法得到纤细内容
Log.i(TAG, "消息是:"+messages[i].getDisplayMessageBody());
Log.i(TAG, "测试:"+messages[i].getDisplayOriginatingAddress());
}
}
}