`
moor212
  • 浏览: 176131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 屏幕亮度控制问题

阅读更多
Android的屏幕亮度好像在2.1+的时候提供了自动调节的功能,所以,如果当开启自动调节功能的时候, 我们进行调节好像是没有一点作用的,这点让我很是无语,结果只有进行判断,看是否开启了屏幕亮度的自动调节功能。

/**
     * 判断是否开启了自动亮度调节
     *
     * @param aContext
     * @return
     */
    public static boolean isAutoBrightness(ContentResolver aContentResolver) {
        boolean automicBrightness = false;
        try {
            automicBrightness = Settings.System.getInt(aContentResolver,
                    Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
        } catch (SettingNotFoundException e) {
            e.printStackTrace();
        }
        return automicBrightness;
    }

然后就是要觉得当前的亮度了,这个就比较纠结了:

/**
     * 获取屏幕的亮度
     *
     * @param activity
     * @return
     */
    public static int getScreenBrightness(Activity activity) {
        int nowBrightnessValue = 0;
        ContentResolver resolver = activity.getContentResolver();
        try {
            nowBrightnessValue = android.provider.Settings.System.getInt(
                    resolver, Settings.System.SCREEN_BRIGHTNESS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return nowBrightnessValue;
    }

那如何修改屏幕的亮度呢?

/**
     * 设置亮度
     *
     * @param activity
     * @param brightness
     */
    public static void setBrightness(Activity activity, int brightness) {
        // Settings.System.putInt(activity.getContentResolver(),
        // Settings.System.SCREEN_BRIGHTNESS_MODE,
        // Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
        activity.getWindow().setAttributes(lp);

    }

那么,能设置了,但是为什么还是会出现,设置了,没反映呢?

嘿嘿,那是因为,开启了自动调节功能了,那如何关闭呢?这才是最重要的:

/**
     * 停止自动亮度调节
     *
     * @param activity
     */
    public static void stopAutoBrightness(Activity activity) {
        Settings.System.putInt(activity.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
    }

能开启,那自然应该能关闭了哟哟,那怎么关闭呢?很简单的:

/**
     * 开启亮度自动调节
     *
     * @param activity
     */
    public static void startAutoBrightness(Activity activity) {
        Settings.System.putInt(activity.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
    }

至此,应该说操作亮度的差不多都有了,结束!

哎,本来认为是应该结束了,但是悲剧得是,既然像刚才那样设置的话,只能在当前的activity中有作用,一段退出的时候,会发现毫无作用,悲剧,原来是忘记了保存了。汗!

/**
     * 保存亮度设置状态
     *
     * @param resolver
     * @param brightness
     */
    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.registerContentObserver(uri, true, myContentObserver);
        resolver.notifyChange(uri, null);
    }


转自:http://www.cnblogs.com/Tiger-Dog/articles/2058033.html

以上是转到,以下是加的。

还要进行授权,否者不能用。
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>

注意:授权都放在<manifest></manifest>之间。


(2)只能是Lunch的activity中可用,很纠结。
上网搜了另一种方法
引入了一个包hardware09.jar,在0.9的版本中,android是调用IHardwareService来进行屏幕亮度调整的,但在1.0r2,1.0r1 以后的SDK中却找不到这个类。

这时又要翻出0.9的SDK了,在0.9 SDK中android.os包中有相关类。只要将这些相关类添加到项目类路径中,我们也可以用IHardwareService来调整屏幕亮度了。以下代码G1下测试通过。

/**
* 取得当前用户自定义的屏幕亮度
*/  
private int getOldBrightness() {   
int brightness;   
  
try {   
   brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);   
} catch (SettingNotFoundException snfe) {   
   brightness = 255;   
}   
  
return brightness;   
}   
  
/**
* 设置屏幕亮度
*/  
private void setBrightness(int brightness) {   
IHardwareService hardware = IHardwareService.Stub.asInterface(ServiceManager.getService("hardware"));   
  
if (hardware != null) {   
  try {   
    hardware.setScreenBacklight(brightness);   
   } catch (RemoteException e) {   
    e.printStackTrace();   
   }   
}   
}  

/**
* 取得当前用户自定义的屏幕亮度
*/
private int getOldBrightness() {
int brightness;

try {
  brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException snfe) {
  brightness = 255;
}

return brightness;
}

/**
* 设置屏幕亮度
*/
private void setBrightness(int brightness) {
IHardwareService hardware = IHardwareService.Stub.asInterface(ServiceManager.getService("hardware"));

if (hardware != null) {
  try {
   hardware.setScreenBacklight(brightness);
  } catch (RemoteException e) {
   e.printStackTrace();
  }
}
}
注意brightness的值为0 - 255,0最暗,255最亮。

(IHardwareService包,也就是那个hardware09.jar)


(3)一般性的解决方案:
在tabhost架构的程序中,引用主启动页面的属性,进行设置。
int dispalyBright = android.provider.Settings.System.getInt(getParent().getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS,-1);



android.provider.Settings.System
.putInt(
getParent().getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS,
temInt);
WindowManager.LayoutParams lp = getParent().getWindow()
.getAttributes();
lp.screenBrightness = temInt / 255f;
分享到:
评论

相关推荐

    Android Studio 屏幕亮度调节Demo

    在Android平台上,开发者可以利用系统提供的API来实现对设备...以上就是关于"Android Studio 屏幕亮度调节"的知识点,这个Demo提供了一个基础的框架,你可以根据实际需求进行扩展和优化,以满足更复杂的亮度控制需求。

    Android屏幕亮度调节源代码

    下面,我们将深入探讨Android屏幕亮度调节的源代码及其相关知识点。 首先,我们需要理解Android中的`WindowManager.LayoutParams`类,它包含了窗口参数,其中包括了屏幕亮度的设置。`LayoutParams`中的`...

    Android 调节屏幕亮度(当前应用和系统亮度)

    在Android开发中,控制屏幕亮度是一项常见的功能,无论是为了优化用户体验,还是为了适应不同环境下的设备使用。本文将深入探讨如何通过编程方式实现对当前应用和整个系统的亮度调节。 首先,我们要了解Android系统...

    android屏幕亮度调节源码

    本文将深入探讨Android屏幕亮度调节的源码实现,帮助开发者理解其工作原理,并为自定义和优化这一功能提供基础。 首先,Android系统通过硬件抽象层(HAL)与设备的显示控制器进行交互,来控制屏幕亮度。在`...

    Android调节屏幕亮度demo

    在Android平台上,开发一款能够调节屏幕亮度的应用是一个常见的需求,特别是在关注用户体验和视力保护的场景下,例如夜间阅读。这个“Android调节屏幕亮度demo”项目就是为此目的而设计的。它利用Android SDK提供的...

    Android-滑动屏幕调整屏幕亮度.zip

    “Android-滑动屏幕调整屏幕亮度.zip”是一个包含了多个文件的压缩包,它可能包含源代码、相关文档和资源文件,这些内容共同构成了一个功能模块,允许用户通过滑动屏幕来调整屏幕亮度。这个功能模块可能是一个独立的...

    android 屏幕亮度调节

    在Android应用开发中,我们可以通过编程的方式实现对当前应用或全局系统屏幕亮度的控制。以下将详细讲解如何在Android中进行屏幕亮度调节。 首先,Android系统提供了两种方式来调整屏幕亮度:一种是针对当前应用的...

    Android项目滑动屏幕调整屏幕亮度.rar

    这个压缩包文件"Android项目滑动屏幕调整屏幕亮度.rar"包含了实现这一功能的源码,是学习和理解Android自定义手势控制的一个良好实践。 首先,我们要了解Android系统是如何管理屏幕亮度的。Android系统通过`...

    Android应用源码滑动屏幕调整屏幕亮度-IT计算机-毕业设计.zip

    首先,我们需要了解Android系统中的亮度控制接口。Android提供了`WindowManager.LayoutParams`类,它包含了一个`screenBrightness`属性,用于设置窗口的亮度。当用户滑动屏幕时,我们可以监听滑动事件,然后根据滑动...

    Android应用源码滑动屏幕调整屏幕亮度.zip

    10. **Android组件通信**:理解Activity、Service、BroadcastReceiver等组件间的通信方式,可能会在实际项目中实现屏幕亮度控制的其他功能时派上用场。 通过对这份源码的学习,开发者可以深入理解Android系统服务的...

    Android 手势调节亮度和音量

    "Android手势调节亮度和音量"这一特性允许用户通过简单的滑动手势来调整设备的屏幕亮度和音量,大大提升了操作的便利性。下面将详细阐述这一功能的实现原理、应用场景以及相关开发技术。 首先,我们要理解Android...

    安卓Android源码——滑动屏幕调整屏幕亮度.rar

    在安卓(Android)系统中,滑动屏幕调整屏幕亮度是一项常见的用户交互功能,它允许用户通过在屏幕顶部或底部边缘上下滑动来改变设备的显示亮度。这一特性涉及到Android系统的触摸事件处理、电源管理以及图形界面等多...

    Android 播放电影时滑动屏幕调整屏幕亮度

    首先,我们需要理解Android系统的亮度控制机制。Android系统提供了`WindowManager.LayoutParams`类,其中包含了`screenBrightness`属性,用于设置窗口的亮度。这个属性的值范围是0.0(全暗)到1.0(全亮),默认值由...

    android 屏幕亮度调节方法详解

    在Android系统中,屏幕亮度调节是一项重要的功能,它关乎用户体验和设备功耗。本文将深入探讨如何实现Android设备的屏幕亮度自动调节,以及涉及到的关键组件和流程。 首先,我们要理解屏幕亮度自动调节的核心原理,...

    Android-Swipper-Android库可滑动手势来控制音量亮度和搜索

    2. **搜索功能集成**:除了基本的音量和亮度控制,Swipper还支持集成搜索功能。用户可以设置特定的滑动手势触发全局搜索,这对于那些需要频繁搜索的应用来说是一个非常实用的功能。 3. **高度自定义**:Swipper库...

    Android 调整亮度

    在Android平台上,调整设备屏幕亮度是一项常见的功能,尤其对于用户来说,可以根据环境光线和个人喜好来定制屏幕显示的亮度。在给定的`BrightnessDemo`项目中,我们可以学习如何实现这一功能。下面,我们将深入探讨...

    Android手机屏幕亮度及Alpha值设置

    屏幕亮度控制着显示屏的明暗程度,而Alpha值则关乎到视图或控件的透明度。以下是对这两个概念的详细解释以及如何在Android应用中进行设置。 **一、屏幕亮度设置** 屏幕亮度调整在Android设备上主要通过调节屏幕...

    android滑动屏幕调整屏幕亮度.zip

    首先,我们要了解Android系统中控制屏幕亮度的基本原理。Android系统通过`Settings.System.SCREEN_BRIGHTNESS`这个系统设置来控制屏幕亮度。当用户手动调整亮度时,系统会更新这个设置值。为了实现在屏幕上滑动调整...

    Android 调试背光亮度曲线-斜线

    在Android系统中,背光亮度控制是用户体验的重要组成部分,它直接影响到设备的视觉舒适度和电池寿命。"Android调试背光亮度曲线-斜线"这个主题聚焦于如何调整和优化设备的背光亮度曲线,使其更符合用户需求或提高...

Global site tag (gtag.js) - Google Analytics