一、知識介紹 1、【廣播分類】 ①有序廣播:接收者A收到廣播傳遞給B,B傳給C,有序傳遞。任何一個環節都可以終止廣播,也可以修改廣播中攜帶的數據。 發送的方式:sendOrderedBroadcast(intent,receiverPermission); 【提示】①第二個參數是設置發送的許可權,這裡 ...
一、知識介紹
1、【廣播分類】
①有序廣播:接收者A收到廣播傳遞給B,B傳給C,有序傳遞。任何一個環節都可以終止廣播,也可以修改廣播中攜帶的數據。
發送的方式:sendOrderedBroadcast(intent,receiverPermission);
【提示】①第二個參數是設置發送的許可權,這裡可以設為null
②接收有序廣播是需要在intent-flter中設置priority,值越大則先執行,相同則按照註冊順序
②無序廣播:一個廣播發送者,向所有接收者同時發送廣播,也就是ABC接收者都同時響應。
發送方式:sendBroadcast(intent)
2、【廣播接收者】按是否常駐分類
①常駐型廣播接收者:在androidManifest.xml中註冊,只要應用程式沒有被卸載就持續存在。
②非常駐型廣播接收者:在java代碼中註冊,一般隨Activity或者Service組件產生而產生,隨他們銷毀而銷毀。生命周期比較短。使用的方法是registerReceiver(參數1:廣播接收者實例,參數2:頻道(意圖過濾器));unregisterReceiver(廣播接收者實例)
二、項目一【發送廣播】
【步驟】
①定義一個廣播接收者,自定義添加intent-fliter中的action name
②添加按鈕,點擊事件
③定義intent,設置action,發送廣播
【項目結構】
【MyReceiver】
1 import android.content.BroadcastReceiver;
2 import android.content.Context;
3 import android.content.Intent;
4 import android.widget.Toast;
5
6 public class MyReceiver extends BroadcastReceiver {
7
8 @Override
9 public void onReceive(Context context, Intent intent) {
10 // TODO: This method is called when the BroadcastReceiver is receiving
11 Toast.makeText(context, "收到廣播", Toast.LENGTH_SHORT).show();
12 }
13 }
【AndroidManifest.xml】
1 <receiver
2 android:name=".receiver.MyReceiver"
3 android:enabled="true"
4 android:exported="true">
5 <intent-filter>
6 <action android:name="com.example.MyApplication2.myreceiver" />
7 </intent-filter>
8 </receiver>
【activity_main.xml】
1 <Button
2 android:id="@+id/btn"
3 android:text="發送廣播"
4 android:layout_width="match_parent"
5 android:layout_height="wrap_content" />
【MainActivity】
1 import android.content.Intent;
2 import android.support.v7.app.AppCompatActivity;
3 import android.os.Bundle;
4 import android.view.View;
5 import android.widget.Button;
6
7 public class MainActivity extends AppCompatActivity {
8
9 Button btn;
10 @Override
11 protected void onCreate(Bundle savedInstanceState) {
12 super.onCreate(savedInstanceState);
13 setContentView(R.layout.activity_main);
14
15 btn = findViewById(R.id.btn);
16 btn.setOnClickListener(new View.OnClickListener() {
17 @Override
18 public void onClick(View view) {
19 Intent intent = new Intent("com.example.MyApplication2.myreceiver");
20 sendBroadcast(intent);
21 }
22 });
23
24 }
25 }
【提示】發送廣播intent設置的action要和廣播接受者設置的action相同,這樣廣播接收者才能收到發送的廣播
【效果】點擊
二、項目二【發送有序廣播】
【步驟】
①定義三個廣播接收者,觀察順序
②添加按鈕點擊
③設置intent,發送有序廣播
【項目結構】
【定義三個廣播接收者並註冊】
1 <receiver
2 android:name=".receiver.MyOrderReceiver1"
3 android:enabled="true"
4 android:exported="true">
5 <intent-filter android:priority="1000">
6 <action android:name="com.example.MyApplication2.myreceiver" />
7 </intent-filter>
8 </receiver>
9 <receiver
10 android:name=".receiver.MyOrderReceiver2"
11 android:enabled="true"
12 android:exported="true">
13 <intent-filter android:priority="100">
14 <action android:name="com.example.MyApplication2.myreceiver" />
15 </intent-filter>
16 </receiver>
17 <receiver
18 android:name=".receiver.MyOrderReceiver3"
19 android:enabled="true"
20 android:exported="true">
21 <intent-filter android:priority="10">
22 <action android:name="com.example.MyApplication2.myreceiver" />
23 </intent-filter>
24 </receiver>
【提示】設置priority為不同的值,action name為相同的,接收同一個廣播
【MainActivity】
1 btn2 = findViewById(R.id.btn2);
2 btn2.setOnClickListener(new View.OnClickListener() {
3 @Override
4 public void onClick(View view) {
5 Intent intent = new Intent("com.example.MyApplication2.myreceiver");
6 sendOrderedBroadcast(intent,null);
7 }
8 });
【效果】
點擊按鈕執行順序