1. 程式人生 > >BroadcastReceiver元件 靜態註冊

BroadcastReceiver元件 靜態註冊

Activity

package com.zdsoft.broadcastreceiverstatic;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

/**
 * 靜態註冊
 * AndroidManifest.xml檔案中配置。
 * 特點:常駐型廣播。
 */

public class MainActivity extends AppCompatActivity {
    private Button bt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = (Button) findViewById(R.id.bt);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.zdsoft.receiver.HELLO");
                intent.putExtra("msg", "你好,我是訊息傳送者");
                //無序廣播
                //sendBroadcast(intent);

                //有序廣播:使用sendOrderedBroadcast(intent,permission)傳送廣播,
                // permission為許可權,許可權必須宣告和註冊。
                sendOrderedBroadcast(intent, "com.zdsoft.MESSAGE_RECEIVER");

            }
        });
    }
}

FirstReceiver

package com.zdsoft.broadcastreceiverstatic;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class FirstReceiver extends BroadcastReceiver {
    public FirstReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("*****first", intent.getStringExtra("msg"));
        //中斷廣播
        //abortBroadcast();
        //修改廣播:使用setResultExtras(bundle)進行訊息傳遞。
        Bundle bundle = new Bundle();
        bundle.putString("msg", intent.getStringExtra("msg") + "first修改的");
        setResultExtras(bundle);

    }
}

SecondReceiver

package com.zdsoft.broadcastreceiverstatic;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class SecondReceiver extends BroadcastReceiver {
    public SecondReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        //使用getResultExtras(boolean flag)接收前面的接收器存放的資料。
        //flag=true:如果前面的接收器沒有存放資料,則自動建立一個空的Bundle物件;
        //flag=false:如果前面的接收器如果沒有存放任何資料則返回null

        Bundle bundle = getResultExtras(true);
        Log.i("*****second", bundle.getString("msg"));
    }
}
AndroidMainfest.xml中定義一個許可權及註冊
<permission android:name="com.zdsoft.MESSAGE_RECEIVER"></permission>
    <uses-permission android:name="com.zdsoft.MESSAGE_RECEIVER"></uses-permission>


<receiver
            android:name=".FirstReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="500">
                <action android:name="com.zdsoft.receiver.HELLO" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".SecondReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="100">
                <action android:name="com.zdsoft.receiver.HELLO" />
            </intent-filter>

        </receiver>