2014-06-05 2 views
0

안녕 얘들 아 내가 활동을하고 이것으로 나는 서비스 및 A를 실행하고 서비스에 런 서비스 B서비스에서 토글 버튼을 설정하는 방법은 무엇입니까?

활동> 서비스 A> 서비스 B

서비스 B라는 방법이있다 "MyMethod라는()"를. 서비스 B 토글 버튼을 NOT CHECKED로 설정하고 싶습니다. 내가 서비스 B에 getSharedPreference을 사용하려고했지만 활동의 토글 버튼의 ​​상태를 업데이트하는 방법을 모르겠어요 :

: 서비스 B에서 내 영어 에 대한

final ToggleButton btn = (ToggleButton) findViewById(R.id.toggleButton3); 

    btn.setChecked(
      getSharedPreferences("btn", MODE_PRIVATE) 
        .getBoolean("state", false) 
    ); 

    alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

//for RunAsyncTask 
    final Intent intentAsyncTask = new Intent(DettagliVolo.this, RunAsyncTask.class); 

    pIntentAsyncTask = PendingIntent.getService(DettagliVolo.this, 0, intentAsyncTask, 0); 
btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        alarm.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 10 * 1000, pIntentAsyncTask); 
       } else { 
        alarm.cancel(pIntentAsyncTask); 
        stopService(intentAsyncTask); 
       } 
       getSharedPreferences("btn", MODE_PRIVATE) 
         .edit().putBoolean("state", isChecked) 
         .commit(); 
      } 
     }); 

죄송합니다 : 이것은 내 활동입니다

@Override 
    public int onStartCommand(Intent intent, int flags, int idArranque) { 
     if(a) i want set togglebutton FALSE; 

미리 감사드립니다.

답변

1
  1. 활동을 SharedPreferencesListener (http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html)로 추가 할 수 있습니다. 주로 xml 환경 설정에 사용되지만 도움이 될 수 있습니다. 코드 샘플을 보려면 http://envyandroid.com/archives/1104/android-detect-preference-changes
  2. 정의 된 브로드 캐스트 리시버를 사용하여 서비스에서 의도로 보내십시오. 또는 Messenger를 추가 서비스를 제공하려는 활동 의도에 넣으십시오. 이 메신저는 액티비티에서 Handler에 바인딩되어야합니다. 예 : http://www.vogella.com/tutorials/AndroidServices/article.html#servicecommunication_handler 또는 http://developer.android.com/guide/components/bound-services.html#Messenger
+0

무엇이 간단하고 빠른 솔루션입니까? – user3671540

+0

처음에는 @Olayinka가 제안한 것처럼 더 간단한 것이고 1 분 만에 구현됩니다. 두 번째 것은 앱의 내부 커뮤니케이션을 훨씬 더 효과적으로 제어 할 수 있습니다. –

1

토글 버튼의 ​​변경 사항은 언제 볼 수 있습니까? 활동 개시에 맞습니까?

Service B에서 SharedPreferences를 취득하고 state 업데이트 :

SharedPreferences prefs = context.getSharedPreferences("btn", MODE_PRIVATE); 
SharedPreferencesEditor editor = prefs.edit(); 
editor.putBoolean("state", false).commit(); 

이제, Activity의 출시에 토글 버튼을 설정 SharedPreferences의 값에 따라.

관련 문제