Android-broadcast静态动态广播
Posted zCoderJoy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-broadcast静态动态广播相关的知识,希望对你有一定的参考价值。
广播的静态和动态类型
静态广播:
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结束前,移除广播接收器。
静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
这里采用动态和静态的实现方式,服务和客户端,服务要打开,客户才可以调用服务的广播接收,动态可以理解,静态为什么?
以上是关于Android-broadcast静态动态广播的主要内容,如果未能解决你的问题,请参考以下文章