一、静态注册
创建广播类,如下:
public
class
MyReceiver
extends
BroadcastReceiver {
public
MyReceiver() {
}
@Override
public
void
onReceive(Context context, Intent intent) {
Toast t = Toast.makeText(context,
"静态广播:"
+intent.getStringExtra(
"info"
), Toast.LENGTH_SHORT);
t.setGravity(Gravity.TOP,
0
,
0
);
t.show();
}
}
在清单文件中注册广播,如下:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
package
=
"com.example.administrator.day19"
>
<
uses-permission
android:name
=
"android.permission.PROCESS_OUTGOING_CALLS"
/>
<
application
android:allowBackup
=
"true"
android:icon
=
"@mipmap/ic_launcher"
android:label
=
"@string/app_name"
android:supportsRtl
=
"true"
android:theme
=
"@style/AppTheme"
>
<
activity
android:name
=
".MainActivity"
>
<
intent-filter
>
<
action
android:name
=
"android.intent.action.MAIN"
/>
<
category
android:name
=
"android.intent.category.LAUNCHER"
/>
</
intent-filter
>
</
activity
>
//生成的receiver配置文件
<
receiver
android:name
=
".MyReceiver"
android:enabled
=
"true"
android:exported
=
"true"
>
<
intent-filter
>
//自定义Action
<
action
android:name
=
"MLY"
/>
</
intent-filter
>
</
receiver
>
</
application
>
</
manifest
>
发送广播,如下:
public
class
MainActivity
extends
AppCompatActivity {
DynamicReceiver dynamicReceiver;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//静态广播点击
public
void
send(View v){
Intent intent =
new
Intent();
intent.setAction(
"MLY"
);
intent.putExtra(
"info"
,
"panhouye"
);
sendBroadcast(intent);
}
}
二、动态注册
public
class
MainActivity
extends
AppCompatActivity {
DynamicReceiver dynamicReceiver;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化IntentFilter对象
IntentFilter filter =
new
IntentFilter();
filter.addAction(
"panhouye"
);
dynamicReceiver =
new
DynamicReceiver();
//注册广播接收
registerReceiver(dynamicReceiver,filter);
}
//按钮点击事件
public
void
send2(View v){
Intent intent =
new
Intent();
intent.setAction(
"panhouye"
);
intent.putExtra(
"sele"
,
"潘侯爷"
);
sendBroadcast(intent);//发送广播
}
/*动态注册需在Acticity生命周期onPause通过
*unregisterReceiver()方法移除广播接收器,
* 优化内存空间,避免内存溢出
*/
@Override
protected
void
onPause() {
super
.onPause();
unregisterReceiver(
new
MyReceiver());
}
//通过继承 BroadcastReceiver建立动态广播接收器
class
DynamicReceiver
extends
BroadcastReceiver{
@Override
public
void
onReceive(Context context, Intent intent) {
//通过土司验证接收到广播
Toast t = Toast.makeText(context,
"动态广播:"
+ intent.getStringExtra(
"sele"
), Toast.LENGTH_SHORT);
t.setGravity(Gravity.TOP,
0
,
0
);
//方便录屏,将土司设置在屏幕顶端
t.show();
}
}
(1)动态注册广播不是常驻型广播,也就是说广播跟随Activity的生命周期。注意在Activity结束前,移除广播接收器。
静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
(2)当广播为有序广播时:优先级高的先接收(不分静态和动态)。同优先级的广播接收器,动态优先于静态
(3)同优先级的同类广播接收器,静态:先扫描的优先于后扫描的,动态:先注册的优先于后注册的。
(4)当广播为默认广播时:无视优先级,动态广播接收器优先于静态广播接收器。同优先级的同类广播接收器,静态:先扫描的优先于后扫描的,动态:先注册的优先于后册的。
本文详细介绍了Android中的广播机制,包括静态注册与动态注册的方式,并对比了这两种方式的主要区别。通过具体的代码示例,展示了如何创建广播接收器以及如何发送广播。

4456

被折叠的 条评论
为什么被折叠?



