Android四大組件之廣播接收器(二)

接上篇,Android四大組件之廣播接收器(一)本文主要總結廣播的發送。

標準廣播

1、首先創建接收器MyBroadcastReceiver:

public class MyBraodcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in MyBroadcastReceiver",
                Toast.LENGTH_SHORT).show();
    }
}


2、靜態註冊接收器

<receiver android:name=".MyBraodcastReceiver">
    <intent-filter android:priority="333">
        <action android:name="com.horizon.broadcastTest"/>
    </intent-filter>
</receiver>


3、發送標準廣播

Intent intent = new Intent("com.horizon.broadcastTest");
sendBroadcast(intent);


有序廣播

基於標準廣播改動發送方法即可

Intent intent = new Intent("com.horizon.broadcastTest");
sendOrderedBroadcast(intent, null);

廣播攔截

abortBroadcast();

接收器優先級設置

<intent-filter android:priority="111">



完整廣播攔截代碼:(本代碼主要演示有序廣播的攔截)

接收器一

public class MyBraodcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in MyBroadcastReceiver",
                Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }
}

接收器二

public class AnotherReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in AnotherReceiver",
                Toast.LENGTH_SHORT).show();
    }
}

發送代碼

public class MainActivity extends AppCompatActivity {

    private Button receive;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receive = (Button) findViewById(R.id.sendBroadcast);
        receive.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.horizon.broadcastTest");
                sendOrderedBroadcast(intent, null);
            }
        });
    }
}

註冊關鍵代碼

<!-- 分別註冊兩個接收器-->
<receiver android:name=".AnotherReceiver">
    <intent-filter android:priority="111">
        <action android:name="com.horizon.broadcastTest"/>
    </intent-filter>
</receiver>
<receiver android:name=".MyBraodcastReceiver">
    <intent-filter android:priority="333">
        <action android:name="com.horizon.broadcastTest"/>
    </intent-filter>
</receiver>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章