2013-11-21 2 views
7

화면 밝기를 설정하는 데 문제가 있습니다. 이를 위해 나는 다음과 같은 코드를 사용합니다 brightness는 0에서 255일부 Android 기기의 밝기 설정 문제

문제 사이의 값이 일부 장치에서 작동하는지입니다

Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness); 

(htc의 하나, 넥서스 5, ...) , 다른 사람들은 그렇지 않습니다! 예를 들어,이 기능을 사용하여 삼성 장치에서 화면 밝기를 설정하면 화면이 더 밝아 지거나 어두워집니다. "알림 패널"(화면 상단에서 아래로 내려)으로 들어가면 밝기 수준을 볼 수 있습니다. 변경되었습니다.

누구나 모든 Android 기기에서 사용할 수있는 밝기를 설정하는 방법을 알고 있습니까? 그리고 누군가는 왜 그것이 어떤 장치에서 작동하는지 알지만, 그렇지 않은가?

UPDATE 1:

이 방법은 브로드 캐스트 리시버에서 사용되는, 그래서 어떤 활동이 없다가!

+0

어떤 장치에이 문제가 있습니까? 어떤 특정 브랜드 또는 안드로이드 versión? – gian1200

+0

모든 안드로이드 버전의 모든 삼성 장치가 테스트를 마쳤습니다 (모두 4.0 이상). –

+0

밝기를 설정 한 후에 더미 활동을 시작하려고 시도 했습니까? 이 접근법은 여기에 언급되어 있습니다 : [Link] (http://stackoverflow.com/a/7658364). – Vikram

답변

0

밝기 설정을 변경하는 대신 현재 창의 밝기를 무시할 수 있습니다.

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    if (overrideBrightness) 
     lp.screenBrightness = BRIGHTNESS_OVERRIDE_FULL; 
    else 
     lp.screenBrightness = BRIGHTNESS_OVERRIDE_NONE; 
    getWindow().setAttributes(lp); 
+0

활동이 없습니다! 그냥 방송 수신자 –

1

밝기에 대한 시스템 설정을 변경하더라도 화면 밝기가 실제로 변경되지는 않습니다. WindowManager는 새로 고칠 이벤트 인 as pointed out in an answer to this related question을 수신해야합니다. 또한 밝기 스위치를 auto로 설정하면 광 센서의 값이 변경되는 즉시 설정이 무시됩니다.

불행히도, 어떻게 든 WindowManager가 새로운 밝기 설정을 확인하게하려면, 작업 컨텍스트가 필요합니다. 대신에 불필요하게 만 즉시 파괴하는 새로운 활동을 만드는,이 스레드에서 다른 사람에 의해 제안으로의 LayoutParams의 밝기 값을 창을 만들고, 적용 건의 할 것입니다.

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
: 당신은 당신의 매니페스트에 다음과 같은 권한을 추가해야합니다

final View view = new View(this); 
int dimension = 0; 
int pixelFormat = PixelFormat.TRANSLUCENT; 
if (DISPLAY) { 
    view.setBackgroundColor(Color.argb(128, 255, 0, 0)); 
    dimension = LayoutParams.MATCH_PARENT; 
    pixelFormat = PixelFormat.RGBA_8888; 
} 
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     dimension, dimension, 
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL 
       | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     pixelFormat); 
// 0f = minimum brightness; 1f = maximum brightness 
float brightness = 1f; 
params.screenBrightness = brightness; 
Settings.System.putInt(cResolver, 
     Settings.System.SCREEN_BRIGHTNESS, 255 * brightness); 
final WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
wm.addView(view, params); 

:

이 일을하는 일반적인 방법은 시스템 모달 창을 표시하고, 그 속성에의 LayoutParams을 적용

스 니펫에서 DISPLAY은 테스트 목적으로 오버레이 창을 표시 할 수있는 간단한 스위치입니다. 반투명 빨간색 오버레이가 보일 것입니다.

+0

"시스템 모달 창"이란 무엇을 의미합니까? 그것은 다소 활동입니까? –

+0

어떤 의미에서는 회색 영역이 다소 있습니다. 활동은 WindowManager와의 통신을 처리하여 창 장식에보기를 표시합니다. 그러나 액티비티를 만드는 대신 직접 액티비티와 상호 작용하여 뷰를 추가 할 수 있습니다.뷰가 보이지 않게 지정하고 다른 모든 응용 프로그램을 오버레이하며 터치 또는 초점을 가로 채지 않고 화면 밝기를 지정하는 LayoutParams가 추가됩니다. –

+0

전화에서 너무 느려집니다. 그것은 잘 작동하지만, 말할 것도없고, 전화가 느려지 게 만드는 것을 개발할 수는 없습니다! –