2017-12-11 3 views
0

비행기 모드가 ON/OFF 일 때 스위치 버튼의 상태를 변경해야하는 작업이 있습니다. BroadArea에서 MainActivity (레이아웃)으로 선언 된 스위치 버튼

나는 내가 스위치 버튼을 선언하는 주요 활동을하고 난

수신기

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> 

답변

0

브로드 캐스트 리시버 클래스에서 스위치의 ON/OFF 상태를 변경하려면 이 one과 같은 이벤트 버스를 사용하여 활동에 이벤트를 게시하십시오. 활동에서 이벤트를 받으면 스위치 상태를 변경합니다. - 당신의 방송 클래스 :이 같은 뭔가

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()); 
     } 
    } 
} 

activty의 클래스 :

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 
    } 
} 

이벤트의 클래스 : 내가 어떻게이 방법을 onMessageEvent 않는다는 것을 1 일을 이해하지 못했다

Public class SwitchEvent{ 
    public SwitchEvent(){ 
     //empty 
    } 
} 
+0

tho라고 불리는 나는 일을 마쳤다. –

+0

및 여러 이벤트를 어떻게 처리 할 수 ​​있습니까? 감사합니다 –

+0

'isAirplaneModeOn'주 활동에 도달했을 때 (그리고 'onStart()'를 넘어서고 'onStop()'에 도달하지 않은 경우 'onMessageEvent (SwitchEvent event)'가 호출됩니다. 그래서 'onMessageEvent (SwitchEvent event)'는 액티비티가 "alive"인 경우에만 호출됩니다. 이제 여러 이벤트를 처리하기 위해, 원하는만큼 많은 이벤트 클래스를 작성하고이 예제에서 보았 듯이 사용했습니다. 내가 사용하는 Event 클래스의 수를 줄이기 위해, 이벤트 클래스의 생성자에 매개 변수를 추가하고 suscribers 메서드에서이 매개 변수에 따라 조건을 설정합니다. –

관련 문제