2013-08-08 4 views
3

다소 모호한 점에 사과 드리며, 질문을 다시 작성하거나 종료 할 것을 권장하는 경우 알려 주시기 바랍니다.Android SDK 기능이 구현되지 않았습니다.

SDK 기능 중 하나가 구현되지 않은 Android 기기를 실행 중입니다. 문서화 된 SDK 호출을 통해 화면을 어둡게하려고합니다. 이 호출은 다른 장치에서 예상대로 작동하지만이 장치에서는 아무 것도 수행하지 않습니다.이 함수는이 전화기에서 함수가 제대로 구현되지 않았 음을 나타냅니다. 좀 더 혼란스럽게도, ADB의/sys/class/backlight/... 파일에 대한 쓰기를 직접 조작하여 밝기를 어둡게 할 수 있습니다 (이 시스템에 대한 드라이버에 가깝게 말할 수 있습니다.).

호출되는 Java 코드는 아래 (밝기는 정수입니다)이며 Android 4.2.2를 대상으로합니다.

기본적으로 어딘가에 연결이 끊어지며 그 가능성이 가장 높은 부분이 있습니다.

이것은 Dalvik 앱이기 때문에 Dalvik 바이트 코드를 실행하기 때문에 "Dalvik이 적절한 디스플레이 드라이버로 컴파일되지 않았을 수도 있습니다."라고 생각했습니다. 이는 각각의 안드로이드 폰이 고유하게 편집 된 달빅 (Dalvik) 버전을 가지고 있음을 암시합니다. 내 가장 최근의 추측은 Dalvik이 하드웨어 추상화 계층을 통과하고 HAL이 밝기 드라이버 핸들을 인식하지 못하는 반면 ADB 파일은 밝기를 직접 제어한다는 것입니다. 이 문제의 합당한 원인 인 것 같습니까? 누군가가 그런 종류의 버그의 다른 가능한 원인을 가지고 있습니까? 당신의 도움을 주셔서 감사합니다.

+2

구체적으로 작성하십시오. API 호출은 무엇이며 문제의 기기에서 Android 버전이 실행되고 있습니까? –

답변

1

일부 휴대 전화, 특히 나이가 있거나 느린 휴대 전화는 배터리 (예 : 배터리)를 보존하기 위해 일부 설정 ContentObserver 기능을 제거했습니다. 그리고 이것이 올바른 것을 기억한다면 이것은 구형 API의 기본 동작이었습니다. 이 같은 목적 추가에 필요한 밝기 레벨을 전달하여 밝기 설정을 변경 한 후

public class act_brightnesshelper extends Activity { 
    //----- Private Static Members ----- 
    private static final String TAG = "act_brightnesshelper"; 
    //----- Private Static Members END ----- 



    //----- Private Members ----- 
    private int brightnessLevel; 
    //----- Private Members END ----- 



    //----- Activity Overrides ----- 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    Log.d(TAG, "onCreate"); 
    super.onCreate(savedInstanceState); 

    brightnessLevel = this.getIntent().getExtras().getInt("brightnessLevel"); 
    } 

    @Override 
    public void onAttachedToWindow() { 
    Log.d(TAG, "onAttachedToWindow brightnessLevel = " + brightnessLevel); 
    super.onAttachedToWindow(); 

    WindowManager.LayoutParams lp = getWindow().getAttributes(); 

    try { 
     lp.screenBrightness = brightnessLevel/255f; 
     getWindow().setAttributes(lp); 
    } catch(Exception ex) { 
     //Do Nothing... 
    } 

    //Finish the Activity after 500ms... 
    Thread WaitThread = new Thread(){ 
     @Override 
     public void run() { 
      try {Thread.sleep(500);} catch (InterruptedException e) {} 
      finish(); 
     }  
    }; 
    WaitThread.start(); 
    } 
    //----- Activity Overrides END----- 
} 

과 전화 : : 작업 주위 수동으로이 같은 비 UI 활동을 통해 밝기 새로운 설정을 유발하는 것입니다

이것에 대한
Settings.System.putInt(<cnt resolver>, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 
Settings.System.putInt(<cnt resolver>, Settings.System.SCREEN_BRIGHTNESS, <your level>); 
Intent iBriHelper = new Intent(cx, act_brightnesshelper.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
iBriHelper.putExtra("brightnessLevel", <your level>); 
context.startActivity(iBriHelper); 

는이 같은 매니페스트에 활동을 선언해야 잘 될 수 있습니다 :

<activity android:name=".act_brightnesshelper" 
     android:theme="@style/Theme.Transparent" 
     android:configChanges="orientation" 
     android:noHistory="true" 
    android:excludeFromRecents="true"> 
</activity> 

당신은 액티브 내부의 밝기를 변경하는 경우 그런 다음 직접이 작업을 수행 할 수 있습니다. 내가 제공하는 코드는 활동, 즉 앱 위젯의 컨텍스트 외부에서 밝기를 변경하기위한 것입니다. 영업 이익을 바탕으로

편집

당신이 라인 (164)에서 볼 수 있듯이의 안드로이드 소스 코드 here에서 BrightnessController.java 살펴 보겠습니다 코멘트 사용자가 시스템에 밝기 슬라이더를 변경할 때마다 호출 한 함수입니다 설정 ui. 174 행에서 밝기 설정은 Settings.system 클래스를 통해 업데이트되며 코드에서 수행됩니다. 그러나 170 번째 줄에는 setBrightness 함수 (193 번째 줄에 선언되어 있음)에 대한 호출이 있습니다.

setBrightness IPowerManager.Stub.asInterface (ServiceManager.getService ("power"))에 대한 호출 인 setTemporaryScreenBrightnessSettingOverride를 호출하여 밝기 레벨을 설정합니다. 실제로 안드로이드 자체가 내가 제안한 것을 수행하고 있습니다.액티비티 호출

lp.screenBrightness = brightnessLevel/255f; 
getWindow().setAttributes(lp); 

후는 실제로 데이터베이스에서 설정 단계 : 동등한 것을 보인다는 시스템 콜을 통해 휘도 레벨을 설정한다. 그래서 실제로 제가 제안한 것은 해결 방법이 아니지만 시스템이 그것을하는 방법입니다. 나는 당신이 언급하는 장치에 구현 오류가 있다고 생각하지 않지만 오히려 하드웨어 자체와 관련이 있고 안드로이드가 하드웨어와 직접 통신하지 않기 때문에 (see here) 하드웨어 나 하드웨어가 어떻게 될지 모른다. 운전자는이 전화기에서 설계되었습니다.

희망이 도움이 ...

+0

답변 주셔서 감사합니다. 해결 방법보다 문제의 출처를 찾는 데 더 많은 관심을 가졌지 만이를 도로보다 더 구현하는 방법을 살펴볼 것입니다. – Shookit

+0

@Shookit 내 편집을 참조하십시오. 고맙습니다... – Christos

관련 문제