繁体   English   中英

android 4.2 如何调整屏幕亮度

[英]android 4.2 how to adjust the screen brightness

我有一个 android 设备,它只能运行一个应用程序(如 ATM 屏幕)。 现在我想实现以下功能:

如果设备超过 30 分钟未使用,我会将屏幕亮度调到最低。 这时候,如果我触摸屏幕,我应该把屏幕亮度调到最大。 用户看不到任何Android系统菜单、应用程序等。他们只能使用这个应用程序(不能关闭它)。 此应用程序将在此设备上运行并关闭电源。

我不知道如何实现这个功能。
谢谢。

您可以使用扩展service的类并可以调暗屏幕亮度。 使用AlarmManager检查用户从不触摸屏幕的时间。 我会给你一个使用Service类的例子:

public class DimScreen extends Service {

    public static  int ID_NOTIFICATION = 2018;

    private WindowManager windowManager;
    private LinearLayout saverScreen;
    private PopupWindow pwindo;

    boolean mHasDoubleClicked = false;
    long lastPressTime;
    private Boolean _enable = true;


    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override 
    public void onCreate() {
        super.onCreate();
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        saverScreen = new LinearLayout(this);
        saverScreen.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
        Bitmap sample = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
        saverScreen.setBackground(new BitmapDrawable(this.getResources(),
                convertColorIntoBlackAndWhiteImage(sample)));
        saverScreen.setClickable(false);
        saverScreen.setFocusable(false);
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.FILL_PARENT,
                WindowManager.LayoutParams.FILL_PARENT,
                PixelFormat.TRANSLUCENT);
        params.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN
                |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                |WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                |WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                |WindowManager.LayoutParams.FLAG_DIM_BEHIND;
        params.dimAmount = (float) 0.6;
        params.screenBrightness = (float) 0.3;
        params.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE;
        windowManager.addView(saverScreen, params);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (saverScreen != null) windowManager.removeView(saverScreen);
    }
    private Bitmap convertColorIntoBlackAndWhiteImage(Bitmap orginalBitmap) {
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(2);
        ColorMatrixColorFilter colorMatrixFilter = new ColorMatrixColorFilter(
                colorMatrix);

        Bitmap blackAndWhiteBitmap = orginalBitmap.copy(
                Bitmap.Config.ARGB_8888, true);

        Paint paint = new Paint();
        paint.setColorFilter(colorMatrixFilter);

        Canvas canvas = new Canvas(blackAndWhiteBitmap);
        canvas.drawBitmap(blackAndWhiteBitmap, 0, 0, paint);

        return blackAndWhiteBitmap;
    }
}

在您的 Activity 类调用中

startService(new Intent(this,DimScreen.class));

您现在只需实现AlarmManager 如果用户从不触摸屏幕,则启动Service类。 如果用户中断应用程序,则调用stopService

尝试这个

WindowManager.LayoutParams localLayoutParams = getWindow() .getAttributes(); localLayoutParams.screenBrightness = 0.12F; getWindow().setAttributes(localLayoutParams);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM