您的位置:首页 > 移动开发 > Android开发

学习Android广播小结

2017-02-07 15:18 441 查看
最近在网上学习了关于Android广播这个技术点,下面我将我了解得分享给大家,不喜勿喷哦!

广播这个东西很好了解吧!现实中就有很多这样的例子,我就不一一说了。

广播有很多种:自定义广播(动态广播 静态广播 无序广播 有序广播)黏性广播(已过时) 系统广播等等,广播有发送者就有接收者,而且不能超出一个范围(举个例子:同一部手机),主要用到 Intent传值接收值 。

自定义广播就是自己发自己收,新建两个Module 项目,一个作为发送者,一个作为接收者。广播发送者得到Intent,给自己去一个名字。写入你需要的值, sendBroadcast(intent) 发送出去。广播接收者就是在项目新建一个类继承于BroadcastReceiver,重写它的方法(就一个),判断你得到广播名字是否和发送者的一致,然后打印,但是还没完,还需要配置一下。配置有两种方式:清单文件配置(AndroidManifest) java代码配置。

java代码配置:

private MyReceived01 myReceived01;
private IntentFilter intentFilter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView r1_main_text= (TextView) findViewById(R.id.r1_main_text);
Intent intent=new Intent();
String data=intent.getStringExtra("data");
r1_main_text.setText(data);
//new一个接受者
myReceived01 = new MyReceived01();
//new一个intent过滤器
intentFilter = new IntentFilter();
//给intent过滤器增加行为
intentFilter.addAction("com.example.yang_broadcastsender.1211");
}
//动态广播 用java代码配置

@Override
protected void onResume() {
super.onResume();
//动态注册广播
registerReceiver(myReceived01,intentFilter);
}

@Override
protected void onDestroy() {
super.onDestroy();
//注销广播 unregisterReceiver
unregisterReceiver(myReceived01);
}


我用的是清单文件配置:

//name就是广播名字

这样就可以了。

还有就是动态广播和静态广播,它们性质都是一样的,有三点不同:动态广播用代码配置, 静态广播用清单文件配置,而且动态广播的优先级必静态广播要高, 最后一个就是作为接收者一方,动态广播退出程序就接收不到广播,这个可以用黏性广播解决:

/**发送黏性广播

* 动态广播退出程序就销毁了接受不了广播

* 用黏性广播可以做到 离线接受

*/

sendStickyBroadcast(intent);

静态广播都可以接受。

系统广播就有很多了,具体亲们可以去网上下个广播大全,有相对应的名字,我这里就做了一个电话监听:

if (“android.intent.action.PHONE_STATE”.equals(intent.getAction())){

//获取电话号码

String phone=intent.getStringExtra(“incoming_number”);

Log.i(“test”,”有电话进来了,”+phone);

//获取电话管理者

TelephonyManager manager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

//得到电话的状态

int s=manager.getCallState();

switch (s) {

case TelephonyManager.CALL_STATE_RINGING:

Log.i(“tt”,”电话打入:”+phone);

break;

case TelephonyManager.CALL_STATE_OFFHOOK:

Log.i(“tt”,”电话接通:”+phone);

break;

case TelephonyManager.CALL_STATE_IDLE:

Log.i(“tt”,”电话挂断:”+phone);

break;

}

}

方法是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: