我正在构建一个在屏幕中间有一个“主”按钮的应用程序。每当按下按钮(和HELD)时,应用程序应该使屏幕变暗(尽可能降低),当释放按钮时,应将屏幕重置为原始状态。 这是我的应用程序如何处理按钮的触摸和释放事件的代码
holdButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
lowerScreenBirghtness
} else if (event.getAction() == MotionEvent.ACTION_UP) {
resetScreenBirghtness();
}
}
return true;
}
});
我做了一些研究,发现有些人的手机有自动亮度控制问题。我知道有可能通过“WRITE_SETTINGS”权限通过应用程序覆盖此设置。 任何帮助,将不胜感激。请尽可能清楚,因为我还在学习这个平台。感谢
答案 0 :(得分:4)
如果要控制屏幕亮度,则必须将其设置为手动模式,因为当您更改活动中的亮度并且系统设置为自动时,许多设备会出现各种问题。所以你的方法应该如下:
作为开发人员,您可以尊重用户对亮度的原始设置。因此,只要您尊重用户,您操纵自动亮度设置的想法实际上是最佳做法。
这是两个有用的功能,第一个读取当前级别(0-255)并在亮度处于自动模式时返回-1,如果由于某种原因无法读取设置则返回-2。第二个将亮度级别设置为您想要的亮度,如果您将-1作为brLevel传递,则将亮度设置为自动。
public static int getBrightnessLevel(Context cx) {
int result = -1;
if (cr == null) cr = cx.getContentResolver();
if (cr != null) {
boolean isAuto = false;
try {
isAuto = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS_MODE, 0) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
} catch (Exception ex) {
isAuto = false;
}
if (isAuto) {
result = -1;
} else {
try {
result = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);
} catch (Exception ex) {
result = -2;
}
}
} else {
result = -2;
}
return result;
}
public static void setBrightnessLeve(Context cx, int brLevel) {
if (cr == null) cr = cx.getContentResolver();
if (cr != null) {
try {
if (brLevel >= 0) {
Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brLevel);
} else {
Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
} catch (Exception ex) {
//Do Nothing...
}
}
}
我开发了一个亮度窗口小部件,它控制整个系统的屏幕亮度,仅适用于应用程序,这是我正在使用的方法:
用户通过滑动控件选择所需的级别(10 - 100)。这里要小心,不要让用户选择小于10%的东西,否则屏幕会变暗,他将无法恢复亮度,因为他什么也看不见。
我正在更改系统设置中的亮度设置以反映用户选择。
为了设置屏幕亮度,我正在启动一个非ui活动,其额外的用户选择亮度,因为设置更改不会立即生效。
为了完整性,这里是活动代码:
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
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-----
}
当然,您的应用程序具有不同的功能,但如果您选择这样,您可以从我的代码中获得所需内容。最后如你所说,你需要
android.permission.WRITE_SETTINGS
权限。
希望这会有所帮助......