BroadcastReceiver元件 靜態註冊
阿新 • • 發佈:2019-01-02
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
AndroidMainfest.xml中定義一個許可權及註冊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")); } }
<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>