广播的静态和动态类型
静态广播:
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结束前,移除广播接收器。
静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
这里采用动态和静态的实现方式,服务和客户端,服务要打开,客户才可以调用服务的广播接收,动态可以理解,静态为什么?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?