版权声明:本文为博主原创文章,大家可以一起学习,一起进步!
今天简单的了解了一下广播,在这里给大家简单的分享下我的收获!
据我简单的了解,广播分为静态广播与动态广播,黏性广播,在这里我给大家简单的说下吧!
1,优先级动态广播的优先级比静态广播高
2,动态广播无需在AndroidManifest.xml中声明即可直接使用,也即动态;而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明
3,静态广播在应用程序退后也能收到广播,动态广播在应用程序退出之后是收不到广播的。
4,粘性广播呢现在是属于过时的,但是还是可以用的,他可以解决动态广播在应用程序退出后不能收到广播的问题,启动应用程序后就会收到之前发的广播,但是粘性广播是要在配置文件中添加权限的
<!--添加发送黏性广播的权限-->
<uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>
废话不多说,下面来通过一个简单的例子看下静态广播:
首先,对于静态广播,我们需要在AndroidManifest.xml声明。
<receiver android:name=".MyReceived01">
<intent-filter>
<action android:name="com.zking.g150831_android20_sender.520"></action>
</intent-filter>
</receiver>
activity_main.xml(发送者布局文件中的代码):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.zking.g150831_android20_sender.MainActivity">
<EditText
android:id="@+id/et_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入广播的内容"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="send"
android:text="发送" />
</LinearLayout>
MainActivity发送者里的代码:
package com.zking.g150831_android20_sender;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText editText;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.et_content);
intent = new Intent();
//设置广播的名字(设置action)
intent.setAction("com.zking.g150831_android20_sender.520");
}
public void send(View view) {
String content = editText.toString();
//携带数据
intent.putExtra("data", content);
//发送广播
sendBroadcast(intent);
//发送粘性广播
// sendStickyBroadcast(intent);
}
}
好了发送者写完了我们接下来写接受者
接收静态广播,首先要新建一个类继承BroadcastReceiver,实现它里面的onReceive方法
package com.zking.g150831_android20_received01;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* Created by Administrator on 2017/2/7.
*/
public class MyReceived01 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("com.zking.g150831_android20_sender.520".equals(intent.getAction())) {
}
String data = intent.getStringExtra("data");
Log.i("test", "01号接受者收到广播了" + data);
}
}
可以看到,静态广播不需要在代码中注册,下面我们看下动态广播:
首先不需要在AndroidManifest.xml声明,直接在代码中注册,不过最后必须要在onDestroy里面注销
package com.zking.g150831_android20_received01;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private MyReceived01 myReceived01;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceived01 = new MyReceived01();
intentFilter = new IntentFilter();
intentFilter.addAction("com.zking.g150831_android20_sender.520");
}
@Override
protected void onResume() {
super.onResume();
//动态注册广播
registerReceiver(myReceived01,intentFilter);
}
//销毁
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceived01);
}
}
发送粘性广播只要把sendBroadcast(intent)改成sendStickyBroadcast(intent)即可
public void send(View view) {
String content = editText.toString();
//携带数据
intent.putExtra("data", content);
//发送广播
// sendBroadcast(intent);
//发送粘性广播
sendStickyBroadcast(intent);
}
好了,简单的静态广播,动态广播,粘性广播就在上面了,下面我在给大家讲下系统广播,在这里我简单用系统广播之电话状态给大家举个例子
话不多说,我们直接上效果图
效果图
当我们外部手机打电话过来的时候,当前的信息会自动的进行改变。好了下面我们直接上代码!
activity代码:
package com.zking.g150831_android20_phonestate;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
/**
* Created by Administrator on 2017/2/7.
*/
public class MyPhone extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if("android.intent.action.PHONE_STATE".equals(intent.getAction())){
//获取电话号码
String number= intent.getStringExtra("incoming_number");
Log.i("test","呼叫来电,"+number);
//获取电话状态电话管理者
TelephonyManager tm= (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
int state=tm.getCallState();
switch (state){
case TelephonyManager.CALL_STATE_RINGING:
Log.i(“test”,”来电话了”);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(“test”,”通话中”);
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i(“test”,”挂断了”);
break;
}
}
}
}
这里一定要注意,别忘记在配置清单文件中加权限:
同时在清单文件中配置广播接受者(即静态广播)
好了,全部代码就在这了,就这么简单!!很简单的,其实没有想象中那么复杂!