2012-02-18 5 views
5

나는 단순히 자동 밝기를 켜거나 끄려 고하고있다. 나는 작동하지 않는 것자동 밝기를 켜고 끄는 방법? (반복이 아님)

final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.brightToggle); 

    // display auto brightness state 
    final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.autoToggle); 
    autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 

    autoBrightToggle.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (autoBrightToggle.isChecked()) { 
       setAutoBright(true); 
      } else { 
       setAutoBright(false); 
      } 
     } 
    }); // end anonymous OnClickListener function 

    // toggle the brightness mode 
    private void setAutoBright(boolean mode) { 
     if (mode) { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } else { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } 
    } 

합니다 (에서 onCreate 방법 내부)이 코드로 시작했다. setAutoBrightnessMode() 메서드는 onResume()에서도 다시 호출되지만 결과는 같지 않습니다. 어쨌든 누군가가이 질문에 불필요하다고 느낀다면 유감 스럽지만 다른 게시물은 내가 갈 곳을 찾지 못했습니다!

(FWIW - 나는 나의 오래된 드로이드 X와 내 갤럭시 넥서스에서이 테스트를하고있어이 아닌 에뮬레이터)

수정 됨 - 본 ON UPDATE : 나는 확실히 지금은 어떤 표시되지 오전 99 %를 해요이 실제로 값을 변경하는 경우에도 설정 패널 및 바탕 화면 위젯에 반영된 자동 밝기 모드로 변경됩니다 (). 문제의 일부는 자동 밝기가 켜져 있는지 여부를 정확하게 결정할 수 없다는 것입니다 (예 : ).

예를 들어, 화면이 빠르게 눈에 띄게 바뀌나요? 나는 환경에 따라 즉각적인 가시적 인 변화를 기대하고 있었지만, 아마도 그 변화는 미묘한 것일까? 그리고 더 오랜 기간 동안? 또는 밝기가 변경되기 전에 환경 변화가 30 초 이상 걸릴 수 있습니까?

누군가 내가 이것을 추적 할 수있는 방법을 제안 할 수 있습니까?

private int getAutoBrightnessMode() { 
    try { 
     int brightnessMode = Settings.System.getInt(cr, SCREEN_BRIGHTNESS_MODE); 
    } catch (Settings.SettingNotFoundException e) { 
     e.printStackTrace(); 
     int brightnessMode = -10000; 
    } 
    return brightnessMode; 
    } 

를하지만 항상 onResume() 후에도, 0을 읽어하십시오 텍스트 필드에이 방법을 접선 - 나는 Settings.System.SCREEN_BRIGHTNESS_MODE 상수를 쿼리 시도했습니다. : - ((

나는 이것이 간단한 과정이라는 것을 알고 있지만, 나는 이걸 혼자서 배우려고 노력하고 있으며, 공식 CS 연수를 거의받지 못했다 ... 그래서 나는 말할 수있다. 이것에 의해 좌절 나는 구석으로이 시점에서 자신을 일 것 같은 내가 바로 더 이상 생각할 수 없다 그래서 짜증 해요 생각합니다.

그래서 도움이 좋은 것입니다.

+0

아무 것도 없습니까? 나는 이것이 단순한 무엇인가 바라고 있었다! –

+0

안드로이드 매니페스트 (예 :'android.permission.WRITE_SETTINGS')에서 적절한 사용 권한을 부여해야 할 것입니다. –

+0

감사합니다 - 나는 그것을했다. 언급 했어야 했어. –

답변

8

내가있는 방법 다음을 사용 내 응용 프로그램 HTC Desire HD 및 noname chinese 태블릿의 쌍을 테스트했습니다.
명시된 승인에 추가 :

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

아래 코드를 사용하면 자동 밝기를 토글 할 수 있습니다. 코드에는 한 가지 트릭이 있습니다. 자동으로 변경되지 않기 때문에 앱의 밝기를 수동으로 "새로 고침"해야합니다. 귀하의 경우에 문제가 될 수 있습니다.

void setAutoBrightness(boolean value) { 
    if (value) { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
    } else { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    } 

    // After brightness change we need to "refresh" current app brightness 
    if (isChecked) { 
     refreshBrightness(-1); 
    } else { 
     refreshBrightness(getBrightnessLevel()); 
    } 
} 

private void refreshBrightness(float brightness) { 
    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    if (brightness < 0) { 
     lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; 
    } else { 
     lp.screenBrightness = brightness; 
    } 
    getWindow().setAttributes(lp); 
} 

int getBrightnessLevel() { 
    try { 
     int value = Settings.System.getInt(getContentResolver(), SCREEN_BRIGHTNESS); 
     // convert brightness level to range 0..1 
     value = value/255; 
     return value; 
    } catch (SettingNotFoundException e) { 
     return 0; 
    } 
} 
+0

Sergey에 답해 주셔서 감사합니다.하지만 제 질문에 대한 해결책이 확실하지 않습니다. seekBar를 사용하여 변경 한 내용을 반영하도록 화면/창을 가져 오는 데 문제가 없습니다. 창 속성을 수동으로 새로 고칠 필요없이 화면의 밝기가 즉시 변경됩니다. 자동 밝기에 관해서는 setAutoBrightness 메서드와 똑같은 코드가 있습니다. 아무 것도하지 않는 것 같습니다.밝기 값을 설정 한 후 '새로 고침'아이디어를 사용하려고 시도했지만 자동 밝기가 자동 모드인지 아닌지에 영향을 미치지 않는 것 같습니다. –

+0

세르게이 - 어떻게 할 수 있습니까? 모드가 전환되었는지 여부를 알 수 있습니까? 설정 및/또는 전원 설정 위젯을보고있는 중 이었지만 변경 사항을 반영하지 못했을 수도 있습니다. 그래서 나는 어둠에서 빛으로 움직이는 나의 자아를 시험하려고 노력했다. 그러나 밝기가 얼마나 빨리 변하는 지 모르겠다. 내가 무엇을 묻고 있는지에 대한 완전한 설명을 위해 위에서 볼 수있다. –

+0

여기서 'isChecked'는 무엇을 의미합니까? 이 변수는 어디에서 설정합니까? – Deqing

관련 문제