posts - 103,  comments - 41,  views - 20万

广播的静态和动态类型

静态广播:

1.继承之broadcastreceiver

复制代码
public class MyStaticBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

        Toast.makeText(context,"zcxczcxstatic",Toast.LENGTH_SHORT).show();
        Log.d("zcx","staticbroad");
        //remoteViews.setTextViewText(R.id.widget_text, intent.getStringExtra("MESSAGE"));
        //context.startActivity(intent);
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("提示")
                .setMessage("收到BroadcastSend应用程序的广播")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
        AlertDialog dialog = (AlertDialog) builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();
        
        //AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(
         //       context.getApplicationContext(), MyWidgetProvider.class), remoteViews);
    }
复制代码

 

2.在AndroidManifest中定义

<receiver android:priority="1000"  android:name=".MyStaticBroadcastReceiver"
            android:permission="com.example.zcx.permission"
            android:process=":remote"
            >
            <intent-filter>
                <action android:name="android.zcx"></action>
            </intent-filter>
</receiver>>

3.client 调用

Log.d("zcx","sendStaticBroadcastButton");
                //Toast.makeText(getApplicationContext(),"zcxczcx",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent();
                intent.setAction("android.zcx");
                //intent.setAction("android.appwidget.action.zcx");
                intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
                //intent.putExtra("MESSAGE", editText.getText().toString());
                sendBroadcast(intent);

 

 

动态广播:

1.继承之broadcastreceiver

复制代码
@Override
    public void onReceive(Context context, Intent intent) {
        //RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        Log.d("zcx","MyDynamicBroadcastReceiver");
        //remoteViews.setTextViewText(R.id.widget_text, intent.getStringExtra("MESSAGE"));
        Toast.makeText(context,"zcxczcxDYnamic",Toast.LENGTH_SHORT).show();
        //AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(
         //       context.getApplicationContext(), MyWidgetProvider.class), remoteViews);
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("提示")
                .setMessage("收到BroadcastSend dYNAMIC应用程序的广播")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
        AlertDialog dialog = (AlertDialog) builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();
    }
复制代码

2.服务端代码注册启动

IntentFilter dynamic_filter = new IntentFilter();
        dynamic_filter.addAction("android.appwidget.action.zcx");
        myDynamicBroadcastReceiver = new MyDynamicBroadcastReceiver();
        registerReceiver(myDynamicBroadcastReceiver,dynamic_filter);

3.客户端调用

public void onClick(View v) {
                Intent intent = new Intent();
                //intent.setAction("android.zcx");
                intent.setAction("android.appwidget.action.zcx");
                //intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
                //intent.putExtra("MESSAGE", editText.getText().toString());
                sendBroadcast(intent);
}

 

 动态广播和静态广播的区别:

(1)动态注册广播不是常驻型广播,也就是说广播跟随Activity的生命周期。注意在Activity结束前,移除广播接收器。

静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

 

这里采用动态和静态的实现方式,服务和客户端,服务要打开,客户才可以调用服务的广播接收,动态可以理解,静态为什么?

 

posted on   zCoderJoy  阅读(2670)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示