DialRecordReceiver.java
public class DialRecordReceiver extends LocalBroadcastReceiver { public DialRecordReceiver(Context context) { super(context); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); String jsonString = intent.getStringExtra("json"); if (action.equals(LocalAction.DIAL_RECORD_ACTION_BE_INVITED)) { Log.d("panzq", "【====jsonString = 】" + jsonString); } } }
LocalBroadcastReceiver.java
public abstract class LocalBroadcastReceiver extends BroadcastReceiver { private final Context context; public LocalBroadcastReceiver(Context context) { this.context = context.getApplicationContext(); } /** * 註冊須要接收到的廣播 * * @param actions 須要接收到的廣播列表 */ public void register(String... actions) { if (actions == null) { return; } IntentFilter intentFilter = new IntentFilter(); for (String action : actions) { intentFilter.addAction(action); } LocalBroadcastManager.getInstance(context).registerReceiver(this, intentFilter); } public void unRegister() { LocalBroadcastManager.getInstance(context).unregisterReceiver(this); } }
LocalReceiver.java
public class LocalReceiver extends LocalBroadcastReceiver { public LocalReceiver(Context context) { super(context); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); String jsonString = intent.getStringExtra("json"); if (action.equals(LocalAction.WS_VIDEOMEETING_REQUEST)) { Log.d("panzq", "【jsonString = 】" + jsonString); } } }
LocatiopnBroadcast.java
public class LocatiopnBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e("panzq","======"+intent.getAction()); if (intent.getAction().equals(MainActivity.BROADCAST_ACTION_DISC)) { Log.d("panzq","====="+intent.getStringExtra("broacast1")); } } }
MainActivity.javajava
public class MainActivity extends Activity { private LocatiopnBroadcast locatiopnBroadcast; public static final String BROADCAST_ACTION_DISC = "com.panzq.LocatiopnBroadcast"; private LocalReceiver localReceiver; private DialRecordReceiver dialRecordReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1. 實例化BroadcastReceiver子類 & IntentFilter locatiopnBroadcast = new LocatiopnBroadcast(); IntentFilter intentFilter = new IntentFilter(); // 2. 設置接收廣播的類型 intentFilter.addAction(BROADCAST_ACTION_DISC);// 只有持有相同的action的接受者才能接收此廣播 // 3. 動態註冊:調用Context的registerReceiver()方法 registerReceiver(locatiopnBroadcast, intentFilter); localReceiver = new LocalReceiver(this); localReceiver.register(LocalAction.WS_VIDEOMEETING_REQUEST); dialRecordReceiver = new DialRecordReceiver(this); dialRecordReceiver.register(LocalAction.DIAL_RECORD_ACTION_BE_INVITED); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); unregisterReceiver(locatiopnBroadcast); if (localReceiver != null) { localReceiver.unRegister(); } if (dialRecordReceiver != null) { dialRecordReceiver.unRegister(); } } public void myclick(View V) { String name = "zhangsan"; Intent intent = new Intent(); //BROADCAST_ACTION_DISC,用於標識接收 intent.setAction(BROADCAST_ACTION_DISC); intent.putExtra("broacast1", "1111111111"); //發送廣播 sendBroadcast(intent); LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(LocalAction.WS_VIDEOMEETING_REQUEST).putExtra("json", "2222222222")); LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(LocalAction.DIAL_RECORD_ACTION_BE_INVITED).putExtra("json", name)); } }
main.xmlandroid
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <RelativeLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> <Button android:id="@+id/to_otherActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="to_otherActivity" android:onClick="myclick" /> </RelativeLayout> </androidx.constraintlayout.widget.ConstraintLayout>
build.gradlejson
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'