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結束前,移除廣播接收器。

靜態注冊是常駐型,也就是說當應用程序關閉后,如果有信息廣播來,程序也會被系統調用自動運行。

 

這里采用動態和靜態的實現方式,服務和客戶端,服務要打開,客戶才可以調用服務的廣播接收,動態可以理解,靜態為什么?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM