在有一次处理屏幕的时候,我通过设置值发现怎么都实现不了。
控制屏幕的两种方法:
第一:通过获取PowerManager对象,利用反射。打开/关闭屏幕,上代码:
/**
* 关闭屏幕 ,其实是使系统休眠
*
* @param context 上下文
*/
public static void goToSleep(Context context) {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
try {
if (powerManager != null) {
powerManager.getClass().getMethod("goToSleep", long.class).invoke(powerManager, SystemClock.uptimeMillis());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
/**
* 唤醒屏幕
*
* @param context 上下文
*/
public static void wakeUp(Context context) {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
try {
if (powerManager != null) {
powerManager.getClass().getMethod("wakeUp", long.class).invoke(powerManager, SystemClock.uptimeMillis());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
第二:通过设置数据库来设置屏幕亮度,需要权限如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
/**
* 获取当前亮度
*
* @param context 上下文
* @return 返回当前亮度值0-255
*/
public static int getScreenBrightness(Context context) {
int nowBrightnessValue = 0;
ContentResolver resolver = context.getContentResolver();
try {
nowBrightnessValue = android.provider.Settings.System.getInt(
resolver, Settings.System.SCREEN_BRIGHTNESS);
} catch (Exception e) {
e.printStackTrace();
}
return nowBrightnessValue;
}
/**
* @param resolver 系统内容提供者 Context.getContentResolver()
* @param brightness 亮度0-255之间
*/
public static void saveBrightness(ContentResolver resolver, int brightness) {
Uri uri = android.provider.Settings.System
.getUriFor("screen_brightness");
android.provider.Settings.System.putInt(resolver, "screen_brightness",
brightness);
resolver.notifyChange(uri, null);
}
发现使用设置数据库,常常不产生效果。有时候值改变了,但是屏幕效果不能出来。故采用power解决了。
在处理这个问题的时候我还采用了aidl的方式,但是总有一些莫名的问题。最后没办法放弃了。
开启了 remote: