2011-08-03 4 views
1

내 도구에서 반사 방법을 사용하여 의 밝기를 변경하려고 시도했지만 이 코드가 순간에 실패했습니다. setBacklightBrightness.invoke (power, new Object [] {Brightness}); 및 쓰기 호출 오류. 도와주세요!안드로이드에서 작동하지 않는 이유 setBacklightBrightness (int)

public static void LoadIPowerClass(Context context) 
{ 
    try{ 
    //Load classes and objects 

    Object power; 
    Context fContext = context; 
    Class <?> ServiceManager = Class.forName("android.os.ServiceManager"); 
    Class <?> Stub = Class.forName("android.os.IPowerManager$Stub"); 


    Method getService = ServiceManager.getMethod("getService", new Class[] {String.class}); 
    //Method asInterface = GetStub.getMethod("asInterface", new Class[] {IBinder.class});//of this class? 
    Method asInterface = Stub.getMethod("asInterface", new Class[] {IBinder.class}); //of this class? 
    IBinder iBinder = (IBinder) getService.invoke(null, new Object[] {Context.POWER_SERVICE});// 
    power = asInterface.invoke(null,iBinder);//or call constructor Stub?// 

    Method setBacklightBrightness = power.getClass().getMethod("setBacklightBrightness", new Class[]{int.class}); 

    int Brightness = 5; 

    setBacklightBrightness.invoke(power, new Object[]{Brightness});//HERE Failen 

    Log.i(TAG, "Load internal IPower classes Ok");    
    }catch(InvocationTargetException e){      //HERE catch!!!! 

.... 

답변

1

코드에 대해 대단히 감사합니다. 매우 잘 작동합니다!

예외에 대해서는 앱에 DEVICE_POWER 권한이 누락되었을 수 있습니다. 이 사용 권한을 얻으려면 루트 uid를 사용해야합니다. <manifest> 태그 안에 android:sharedUserId="android.uid.system"을 추가하고 전화의 OEM 키 (생성자가 사용하는 개인 키 또는 개발 플랫폼의 개인 키)를 사용하여 응용 프로그램에 서명하십시오.

감사합니다.