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

简单 易懂的了解android中的Broadcast Receiver

2017-07-20 19:39 387 查看
写这篇博客的目的首先偶是预防以后自己忘了可以随时拿出来看,其次 能帮到一些人也是不错的..

1.android中的广播分为:

标准广播

特点: 广播发出后所有的接收器都可以 同时 接收到 广 播, 而且无法拦截

有序广播

特点:广播发出之后,接收者有先后之分,并且前面的接收者可以拦截广播,导致后面的接收的接收不到

2.广播是通过一方发送另一方接收的,发送的一方只需要给Intent一个意图,像”com.xu.text”,然后调用sendBroadcast(intent)方法就可以了(有序广播调用sendOrderedBroadcast(intent,null);),接收广播者(让一个类继承BroadcastReceiver,然后实现BroadcastReceiver的onReceice()方法即可,广播内容在该方法中操作)

3.广播有俩种注册方式:

静态注册(AndroidManifest.xml中)

动态注册(代码实现)

动态注册:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= (Button) findViewById(R.id.btn);
button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
Intent intent=new Intent("com.example");
sendBroadcast(intent);
}
}


这里通过点击Button发送一条广播,发送广播的代码很简单,

Intent intent=new Intent("com.example");
sendBroadcast(intent);


前面讲了

接收广播:

在另一个Module的Activity中:

public class MainActivity extends AppCompatActivity {

private IntentFilter intentFilter;
private BroadcastTest broadcast;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter();
//选择要接收哪个广播  意图添加进去,保持一致
intentFilter.addAction("com.example");
broadcast=new BroadcastTest();
registerReceiver(broadcast,intentFilter);
}

@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcast);
}

class BroadcastTest extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到其他应用的广播",
Toast.LENGTH_SHORT).show();
}
}
}


registerReceiver();方法用来接收广播,里面需要俩个参数,一个BroadcastReceiver,一个IntentFilter,把这俩个对象传进去..广播的内容会在BroadcastReceiver执行具体处理,动态注册要记得取消注册广播,在onDestory()中 unregisterReceiver(broadcast);取消注册

静态注册:

在AndroidManifest.xml中,

<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example"/>
</intent-filter>
</receiver>


enabled表示是否允许启用这个广播接收器

exported表示是否允许接收本应用程序以外的广播 true表示允许

在android studio中可以点击file–new–Other—BraodcastReceiver直接创建一个广播接收者,AndroidManifest.xml中只需要把

<intent-filter>
<action android:name="com.example"/>
</intent-filter>


意图写出来就可以了,发送方和动态一样…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息