2

Я назову метод public final class PowerManager с аннотацией @hide.Вызов setPowerSaveMode класса PowerManager с отражением

метод:

/** 
* Set the current power save mode. 
* 
* @return True if the set was allowed. 
* 
* @see #isPowerSaveMode() 
* 
* @hide 
*/ 
public boolean setPowerSaveMode(boolean mode) { 
    try { 
     return mService.setPowerSaveMode(mode); 
    } catch (RemoteException e) { 
     return false; 
    } 
} 

В моем коде я пытался вызвать метод с отражением:

Class c; 
    try { 
     c = Class.forName("android.os.PowerManager"); 
     Method m = c.getMethod("setPowerSaveMode", new Class[]{Boolean.class}); 
     Boolean response = (Boolean) m.invoke(true); 
     Log.d("test", "invoked?: " + response); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 

, но я бегу с java.lang.NoSuchMethodException: setPowerSaveMode [class java.lang.Boolean].

Где я ошибаюсь? Как я могу назвать этот метод?

Спасибо заранее!

ответ

1

У меня есть решение с этим кодом:

PowerManager powerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE);   
    //NEED ROOT PERMISSION :(permission nedded: android.permission.DEVICE_POWER (only system app) 
    Class c; 
    try { 
     c = Class.forName("android.os.PowerManager"); 
     Method[] ar = c.getDeclaredMethods(); 
     for (Method m : ar) { 
      Log.d("test", "we have: "+m.getName()); 
      if (m.getName().equalsIgnoreCase("setPowerSaveMode")) { 
       Boolean response = (Boolean) m.invoke(powerManager, true); 
       Log.d("test", "invoked?: " + response); 
      } 
     } 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 

Но нужно разрешение android.permission.DEVICE_POWER только для системы приложения.