2014-12-12 3 views
0

사용자가 전화기의 진동을 활성화/비활성화 할 수있는 응용 프로그램을 만듭니다. 이를 위해 스위치를 켭니다.동작 시작시 스위치 버튼 (켜기)이 항상 적용됩니다 (안드로이드 애플리케이션)

public class settings extends Activity { 


     public static boolean vibrationOnOff; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_settings); 

      final Switch tButton = (Switch) findViewById(R.id.vibration); 

      tButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        if(isChecked){ 
         tButton.setChecked(true); 
         vibrationOnOff = true; 
        }else{ 

         tButton.setChecked(false); 
         vibrationOnOff = false; 
        } 

       } 
      }); 

     } 
} 

내 질문 : 여기 내 코드 나는이 활동을 시작할 때마다, 스위치 버튼은 항상 항상 /) (의 IsChecked된다. 스위치를 선택 해제하고 다른 acvitiy로 다시 가서 settins 활동을 다시 열면 isChecked가 다시 수행됩니다.

어떻게 해결할 수 있습니까? 여기

이 비슷한 질문이지만, 내 문제가 해결되지 않은 : Android ToggleButton always check

+0

왜 당신의 문제를 해결하지 못했습니까? 무슨 일이야? – Blackbelt

+1

[SharedPreferences] (http://developer.android.com/reference/android/content/SharedPreferences.html)를 사용하고 있습니까? 사용자가 구성한 현재 설정을 저장하지 않으면 활동에서이 정보를 유지할 수 없습니다. 따라서 스위치를 점검하여 항상 생성됩니다. –

답변

0

당신은 다음을 수행 할 수있다;

public class MainActivity extends Activity { 
    private AudioManager mAudioManager; 
    private boolean mPhoneIsSilent; 

    @Override public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE); 
    checkIfPhoneIsSilent(); 
    setButtonClickListener(); 
} 

    private void setButtonClickListener() { 
    Button toggleButton = (Button)findViewById(R.id.toggleButton);  
    toggleButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     if (mPhoneIsSilent) { 
     // Change back to normal mode mAudioManager 
     .setRingerMode(AudioManager.RINGER_MODE_NORMAL); mPhoneIsSilent = false; 
     } else { 
     // Change to silent mode mAudioManager 
     .setRingerMode(AudioManager.RINGER_MODE_SILENT); mPhoneIsSilent = true; 
} 
// Now toggle the UI again 
toggleUi(); 
     } 
    }); 
} 

// Checks to see if the phone is currently in silent mode. 

private void checkIfPhoneIsSilent() { 
    int ringerMode = mAudioManager.getRingerMode(); 
    if (ringerMode == AudioManager.RINGER_MODE_SILENT) { 
    mPhoneIsSilent = true; 
     } else { 
    mPhoneIsSilent = false; 
    } 
} 

//Toggles the UI images from silent to normal and vice versa. 

private void toggleUi() { 
    ImageView imageView = (ImageView) findViewById(R.id.phone_icon); 
    Drawable newPhoneImage; 
    if (mPhoneIsSilent) { 
    newPhoneImage = getResources().getDrawable(R.drawable.phone_silent); 
    } else { 
    newPhoneImage = getResources().getDrawable(R.drawable.phone_on); } 
    imageView.setImageDrawable(newPhoneImage); 
}  
    @Override protected void onResume() { 
    super.onResume(); 
    checkIfPhoneIsSilent(); 
    toggleUi(); 
} 
+0

RINGER_MODE_VIBRATE가 true로 선언되어 있는지 확인해야합니다. –

+0

int ringerMode = A.getRingerMode(); if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) –

+0

어쩌면 좋은 질문을 설명하지 않았을 수 있습니다. 일부 상황에서는 앱이 진동하고 있습니다. 사용자는이 진동을 활성화 및 비활성화 할 수 있습니다 (즉, vibrationOnOff가 정적 인 이유). 진동 기능은 다른 등급에 있습니다. vibrationOnOff = true 일 때 전화가 진동합니다 – Simple

0

먼저 전화의 현재 상태를 확인해야합니다. 전화가 Virbration 모드 인 경우 스위치를 선택하지 않은 상태로 유지하십시오.

이이 문제를 해결,
boolean isVibrateOn = false; 
AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
int ringerMode = mAudioManager.getRingerMode(); 
if(ringerMode == AudioManager.RINGER_MODE_VIBRATE) 
    isVibrateOn = true; 
else 
    isVibrateOn = false; 

그런 다음 적절하게 스위치의 상태를 설정,

final Switch tButton = (Switch) findViewById(R.id.vibration); 
tButton.setChecked(isVibrateOn); 

tButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
      if(isChecked){ 
       tButton.setChecked(true); 
       vibrationOnOff = true; 
      }else{ 
       tButton.setChecked(false); 
       vibrationOnOff = false; 
      } 

     } 
}); 

희망을 전화 상태를 확인하십시오. ;) :)

+0

작동하지 않았다. 어쩌면 나는 좋은 질문을 설명하지 않았을 것이다. 일부 상황에서는 앱이 진동하고 있습니다. 사용자는이 진동을 활성화 및 비활성화 할 수 있습니다 (즉, vibrationOnOff가 정적 인 이유) – Simple