1. 程式人生 > >傳送廣播和接收廣播

傳送廣播和接收廣播

一、自定義傳送廣播

1.定義一個按鈕佈局檔案,當按下按鈕時傳送廣播

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="發出廣播"
android:onClick="click"/>
2.Activity中的邏輯程式碼
//1.使用Intent物件傳送,例項化物件
Intent intent = new Intent();
//傳送廣播的標識--在接受時的標識:接收需要在檔案清單中配置
intent.setAction("aa");
//廣播的內容;引數1:內容的名字,引數2:傳送的內容
intent.putExtra("data","abcdefg"); //2.呼叫方法,傳送廣播-->setBroadcast() this.sendBroadcast(intent); //傳送成功時的土司 Toast.makeText(this,"廣播發送成功",Toast.LENGTH_SHORT).show();
二、自定義接收廣播

1.顯式接收----在檔案清單中註冊自定義的廣播

新建一個接收廣播後的執行類————MyReceiver繼承BroadcastReceiver廣播接收的類

public class MyReceiver extends BroadcastReceiver{
    @Override
public void onReceive(Context context, Intent intent) { //接收到廣播後執行的操作 Toast.makeText(context,"我接收到了廣播",Toast.LENGTH_SHORT).show();
//獲得接收廣播的內容
        String data = intent.getStringExtra("data");
        Toast.makeText(context,data,Toast.LENGTH_SHORT).show();

    }
}

開啟檔案清單配置如下:

<!--註冊接收廣播的類-->
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="aa"></action> </intent-filter> </receiver>
action屬性的name為自定義廣播的setAction引數。

模擬方法:在模擬器上開啟接收廣播的app,按home鍵使應用到後臺,切記不可按下返回鍵,按下返回鍵表示此應用被關閉了。然後打開發送廣播的app,會土司出“我接受到了廣播”

2.隱身接收------在Activity中的邏輯程式碼註冊接收

首先還是定義接收廣播後的一個執行操作類----MyYinShiRec

public class MyYinShiRec extends BroadcastReceiver{
    @Override
public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"我接收到了",Toast.LENGTH_SHORT).show();
    }
}
然後在mainActivity中註冊MyYinShiRec,程式碼如下:
myYinShiRec = new MyYinShiRec();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("aa");
this.registerReceiver(myYinShiRec,intentFilter);
最後別忘了,當退出接收時,要將廣播取消掉---重寫onDestroy()方法即可。
@Override
protected void onDestroy() {
    super.onDestroy();
    //當按下手機返回鍵時,取消掉廣播
this.unregisterReceiver(myYinShiRec);
}
三、定義接收安卓系統傳送的接收廣播類
1.定義接收廣播類後的執行類
public class LockScreenBroadcast extends BroadcastReceiver{
    private static final String TAG = "liususu";
    @Override
public void onReceive(Context context, Intent intent) {
       String action = intent.getAction();
        if(action == Intent.ACTION_SCREEN_OFF) {
            Log.e(TAG,"屏鎖命令執行了");
       }else if(action == Intent.ACTION_SCREEN_ON) {
            Log.e(TAG,"解鎖命令執行了");
        }
    }
}
2.在MainActivity中註冊LockScreenBroadcast這個類
public class MainActivity extends AppCompatActivity {

    private LockScreenBroadcast screenBroadcast;

    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        screenBroadcast = new LockScreenBroadcast();
        IntentFilter filter = new IntentFilter();
        //設定系統的廣播標識,保證接收的是鎖屏指令
filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        registerReceiver(screenBroadcast,filter);
    }

    @Override
protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(screenBroadcast);
    }
}