2014-07-14 3 views
2

기본 Android 밝기 설정 대화 상자와 유사하게 작동해야하는 DialogPreference를 작성하는 코드를 작성했습니다.자동 모드를 사용하는 동안 프로그래밍 방식으로 밝기를 변경하면 Android에 아무런 영향이 없습니다.

밝기 모드가 Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL으로 설정되어 있으면 완벽하게 작동합니다. 그러나 모드를 Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC으로 변경하면 휴대 전화 밝기가 Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS) 값을 고려하지 않습니다.

내가 당신에게 예를 보여 드리죠 :

  1. 내가 자동으로 255 모드로 안드로이드 설정에서 밝기를 설정합니다. 변경 사항은 전화 (내 앱은 물론)에 반영됩니다.
  2. Android 설정에서 밝기를 100으로 설정하고 모드를 수동으로 설정했습니다. 변경 사항은 전화 (내 앱은 물론)에 반영됩니다.
  3. 내 앱의 밝기를 50으로 설정했으며 모드는 여전히 수동입니다. 변경 사항은 전화 (내 앱은 물론)에 반영됩니다.
  4. 내 앱의 밝기를 50으로 설정하고 모드를 자동으로 설정했습니다. 프로그래밍 방식으로 현재 화면 밝기를 50으로 변경했지만 나머지 앱 및 휴대 전화 자체 (예 : 휴대 전화 설정 및 집)는 밝기 255와 자동 모드 (Android 설정에서 확인할 수 있음)가 있습니다. 동시에 Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)은 여전히 ​​50을 반환합니다.

다음은 내 코드입니다. DialogPreference를 확장하는 클래스에 있으므로 onCreateDialogView 메서드가 있습니다.

private static int MAX_BRIGHTNESS_VALUE = 255; 

@Override 
protected View onCreateDialogView() { 
    View dialogView = super.onCreateDialogView(); 
    mAutomatic = (CheckBox) dialogView.findViewById(R.id.automatic_brightness); 
    mBrightnessBar = (SeekBar) dialogView.findViewById(R.id.brightness_bar); 

    mBrightnessBar.setMax(MAX_BRIGHTNESS_VALUE); 
    mAutomatic.setChecked(getBrightnessMode() == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
    mBrightnessBar.setProgress(getBrightness()); 

    mAutomatic.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       setAutomaticBrightness(); 
      } else { 
       setManualBrightness(); 
      } 
     } 

    }); 
    mBrightnessBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      if (progress > 10) { 
       setBrightness(progress); 
      } 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

    }); 
    return dialogView; 
} 

private void setBrightness(int value) { 
    Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value); 

    // here I set current screen brightness programmatically 
    Window window = ((Activity) getContext()).getWindow(); 
    LayoutParams layoutpars = window.getAttributes(); 
    layoutpars.screenBrightness = value/(float) MAX_BRIGHTNESS_VALUE; 
    window.setAttributes(layoutpars); 
} 

private int getBrightness() { 
    try { 
     return Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 
    } catch (SettingNotFoundException e) { 
     e.printStackTrace(); 
     return MAX_BRIGHTNESS_VALUE; 
    } 
} 

private void setAutomaticBrightness() { 
    Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 
      Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
} 

private void setManualBrightness() { 
    Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 
      Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 
} 

private int getBrightnessMode() { 
    try { 
     return Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); 
    } catch (SettingNotFoundException e) { 
     e.printStackTrace(); 
     return Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; 
    } 
} 

내의 AndroidManifest.xml에 <uses-permission android:name="android.permission.WRITE_SETTINGS" />

사람이 무슨 일이 일어나고 있는지 알고 있나요? 비슷한 문제가있는 Stack Overflow 스레드를 보았지만 도움이되는 대답이 하나도 없습니다.

답변

0

그런 식으로 작동하는 것 같습니다. 사용자가 밝기 모드를 자동으로 설정하면 밝기 레벨을 조작 할 수 없습니다.

예제는 다음과 같습니다. BrightnessPreference code on grepcode.com for 4.1.2 밝기 모드가 자동 인 경우이 환경 설정에서 밝기 탐색 바가 비활성화됩니다. BrightnessPreference code on grepcode.com for 4.4.2 을 바탕으로

나는 다음과 같은 유연성 해결책을했다 :

@Override 
protected void onClick() { 
    Intent intent = new Intent("com.android.settings.BrightnessPreferenceActivity"); 
    startActivity(intent); 
} 

은 그냥 안드로이드 설정에서 사용되는 활동을 시작합니다. 제 경우에는 충분히 좋았습니다.