如何访问BroadcastReceivers中MainActivity(布局)中声明的Switch按钮

时间:2017-12-11 18:20:15

标签: java android widget broadcastreceiver receiver

我有一项任务,当飞机模式为ON / OFF时,我必须改变开关按钮的状态。

我有一个主要活动,其中我声明了Switch Button,我想从BroadcastReceiver Class更改Switch的状态开启/关闭

接收机

public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
    if(isAirplaneModeOn){
         What Should i do ?
    }
}
}

layout_main_activity

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.example.hp.broadcastthroughmanifest.MainActivity">

<Switch
    android:id="@+id/switch1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="127dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:layout_constraintLeft_creator="1"
    tools:layout_constraintRight_creator="1"
    tools:layout_constraintTop_creator="1" />
</android.support.constraint.ConstraintLayout>

1 个答案:

答案 0 :(得分:0)

尝试使用此one之类的事件总线将事件发布到活动中。从活动中,当您收到事件时,您可以更改开关的状态。 像这样的东西:   - 你的广播课:

RelativeLayout  relativeLayout = findViewById(R.id.realtive_layout_root);
    relativeLayout.removeAllViews();

活动班:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
        if(isAirplaneModeOn){
            EventBus.getDefault().post(new SwitchEvent());
        }
    }
}

活动的课程:

public class YourActivity{
    //declare your switch

    @Override
    public void onCreate() {
        setContentView(R.layout.layout_main_activity);
        //initialize your switch
    }

    @Override
     public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    public void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }

    @Subscribe(threadMode = ThreadMode.MAIN)  
    public void onMessageEvent(SwitchEvent event) {
        //update your switch element
    }
}