傳送廣播和接收廣播
阿新 • • 發佈:2019-02-02
一、自定義傳送廣播
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{ @Overridepublic 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(); } }
開啟檔案清單配置如下:
<!--註冊接收廣播的類-->action屬性的name為自定義廣播的setAction引數。<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="aa"></action> </intent-filter> </receiver>
模擬方法:在模擬器上開啟接收廣播的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); } }