廣播的靜態和動態類型
靜態廣播:
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結束前,移除廣播接收器。
靜態注冊是常駐型,也就是說當應用程序關閉后,如果有信息廣播來,程序也會被系統調用自動運行。
這里采用動態和靜態的實現方式,服務和客戶端,服務要打開,客戶才可以調用服務的廣播接收,動態可以理解,靜態為什么?