四大組件之BroadcastReceiver

 

public class MainActivity extends AppCompatActivity {

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

        //動態註冊廣播接受者,優先級高於靜態註冊
        IntentFilter intentFilter = new IntentFilter("BC_One");
        BC2 bc2 = new BC2();
        registerReceiver(bc2,intentFilter);
    }

    public void doClick(View v){
        switch (v.getId()){
            case R.id.button:
                //普通廣播
                Intent intent = new Intent();
                intent.putExtra("msg","這是一條普通廣播");
                intent.setAction("BC_One");
                sendBroadcast(intent);
                break;
            case R.id.button2:
                //有序廣播
                Intent intent2 = new Intent();
                intent2.putExtra("msg","這是一條有序廣播");
                intent2.setAction("BC_Two");
                sendOrderedBroadcast(intent2,null);
                break;
            case R.id.button3:
                //異步廣播 能夠先發送再註冊
                Intent intent3 = new Intent();
                intent3.putExtra("msg","這是一條異步廣播");
                intent3.setAction("BC_Three");
                sendStickyBroadcast(intent3);
                IntentFilter intentFilter = new IntentFilter("BC_Three");
                BC3 bc = new BC3();
                registerReceiver(bc,intentFilter);
                break;
            default:
                break;
        }
    }
}


//配置文件
        /** priority -- 優先級
          * 靜態註冊
          */
        <receiver android:name=".BC1">
            <intent-filter android:priority="100">
                <action android:name="BC_One"/>
            </intent-filter>
        </receiver>
        <!--<receiver android:name=".BC2">-->
            <!--<intent-filter android:priority="200">-->
                <!--<action android:name="BC_One"/>-->
            <!--</intent-filter>-->
        <!--</receiver>-->
        <receiver android:name=".BC3">
            <intent-filter android:priority="200">
                <action android:name="BC_Two"/>
            </intent-filter>
        </receiver>
        <receiver android:name=".BC4">
            <intent-filter android:priority="100">
                <action android:name="BC_Two"/>
            </intent-filter>
        </receiver>



//普通廣播接收
public class BC1 extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        String s = intent.getStringExtra("msg");
        System.out.println("receive1收到的信息:"+s);
    }
}
public class BC2 extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        String s = intent.getStringExtra("msg");
        System.out.println("receive2收到的信息:"+s);
    }
}

//有序廣播接收
public class BC3 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        String s = intent.getStringExtra("msg");
        System.out.println("receive3收到的信息:"+s);

        Bundle bundle = new Bundle();
        bundle.putString("test","攔截廣播添加數據");
        setResultExtras(bundle);
    }
}
public class BC4 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        String s = intent.getStringExtra("msg");
        System.out.println("receive4收到的信息:"+s);

        Bundle bundle = getResultExtras(true);
        String s2 = bundle.getString("test");
        System.out.println("獲得的處理結果是: "+s2);
    }
}

//異步廣播接收
public class BC5 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        System.out.println("收到異地廣播");
    }
}
相關文章
相關標籤/搜索