Android 广播

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.java

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.xml

<?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.gradle

    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'

 

posted @ 2019-10-29 00:41  强哥10732  阅读(213)  评论(0编辑  收藏  举报