`

Android 禁止屏幕休眠和锁屏的方法

 
阅读更多

Introduction

常常我们开发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏功能启动,既不想锁频,然而系统却在我们看电视或者视频的时候出来个锁屏的界面进行锁频拉,我们还要想继续看的话还要去解锁,这样好麻烦,不是我们想要的,那我们该怎么做呢,其实很简单,我这里只讲其中的两种

一 :我们只要在程序中用代码实现。代码如下:

//方法一     
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.main);    
//方法二     
    @Override   
    protected void onResume() {   
        super.onResume();   
        pManager = ((PowerManager) getSystemService(POWER_SERVICE));   
        mWakeLock = pManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK   
                | PowerManager.ON_AFTER_RELEASE, TAG);   
        mWakeLock.acquire();   
    }   
       
    @Override   
    protected void onPause() {   
        super.onPause();   
           
        if(null != mWakeLock){   
            mWakeLock.release();   
        }   
    }   
//方法三    
    public void unLock(){   
        mContentResolver = getContentResolver();   
        //不建议使用    
        //setLockPatternEnabled(Android.provider.Settings.System.LOCK_PATTERN_ENABLED,false);    
           
        //推荐使用    
        setLockPatternEnabled(Android.provider.Settings.Secure.LOCK_PATTERN_ENABLED,false);   
    }   
       
    private void setLockPatternEnabled(String systemSettingKey, boolean enabled) {   
         //不建议使用    
         //Android.provider.Settings.System.putInt(mContentResolver,systemSettingKey, enabled ? 1 : 0);    
           
         //推荐使用    
         Android.provider.Settings.Secure.putInt(mContentResolver, systemSettingKey,enabled ? 1 : 0);   
    }   
    //但注意要加权限AndroidManifest.xml文件中加入    
    //<uses-permission Android:name="android.permission.WRITE_SETTINGS" />    
    //还要特别注意的是要加入 Android:sharedUserId="android.uid.system",但有一个问题,    
    //如果加入了sharedUserId后就不能使用eclipse编译了,一定要手动通过 mm -B进行编译,然后把apk install到模拟器或设备中   

 

二:禁用系统的锁频功能,这方法不建议使用,只有在设当的环境下适当使用既可,我们只要知道这样我们也可以达到这样的功能实现就OK。

我们知道Android系统的锁屏时间存放在Setting数据库中,字段为Settings.System.SCREEN_OFF_TIMEOUT。我们可以查看SettingsProvider源码,查看如下文件的源码如下:

~/frameworks/base/packages/SettingsProvider/src/com/Android/providers/settings/DatabaseHelper.java   查看loadSystemSettings()函数的代码如下

private void loadSystemSettings(SQLiteDatabase db) {   
        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"   
                + " VALUES(?,?);");   
        Resources r = mContext.getResources();   
        loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,   
                R.bool.def_dim_screen);   
        loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,   
                "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0);   
        loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,   
                R.integer.def_screen_off_timeout);   
        // Set default cdma emergency tone    
        loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);   
        // Set default cdma call auto retry    
        loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);   
        // Set default cdma DTMF type    
        loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);   
        // Set default hearing aid    
        loadSetting(stmt, Settings.System.HEARING_AID, 0);   
        // Set default tty mode    
        loadSetting(stmt, Settings.System.TTY_MODE, 0);   
        loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,   
                R.bool.def_airplane_mode_on);   
        loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,   
                R.string.def_airplane_mode_radios);   
        loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,   
                R.string.airplane_mode_toggleable_radios);   
        loadBooleanSetting(stmt, Settings.System.AUTO_TIME,   
                R.bool.def_auto_time); // Sync time to NITZ    
        loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,   
                R.integer.def_screen_brightness);   
        loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,   
                R.bool.def_screen_brightness_automatic_mode);   
        loadDefaultAnimationSettings(stmt);   
        loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,   
                R.bool.def_accelerometer_rotation);   
        loadDefaultHapticSettings(stmt);   
        stmt.close();   
    }  

 




我们通过查看源码便知道, Settings.System.SCREEN_OFF_TIMEOUT没有初始化的话(系统首次启动,这个字段肯定是没有初始化


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-10/45294.htm

 

分享到:
评论

相关推荐

    Android中如何禁止屏幕休眠和锁屏

    Android 中如何禁止屏幕休眠和锁屏 Android 中禁止屏幕休眠和锁屏是一种常见的需求,特别是在开发一些需要长时间运行的程序时,例如 NowTV 或 XXX 播放器等。这些程序需要长时间保持屏幕常亮,以便用户可以无间断地...

    Android的屏幕禁止休眠和锁屏的方法

    在Android开发过程中,经常会有需求需要让应用在执行特定操作或展示特定内容时保持屏幕常亮状态,即禁止屏幕进入休眠模式或者自动锁屏。这种功能主要应用于游戏、视频播放器、地图导航等应用场景,确保用户体验不受...

    Android应用禁止屏幕休眠的3种方法

    Android 应用禁止屏幕休眠的 3 种方法 Android 应用禁止屏幕休眠是指在 Android 应用程序中,需要长时间运行某些任务或保持屏幕常亮,以便用户可以继续使用应用程序而不受到屏幕休眠的干扰。下面将详细介绍 Android...

    Android系统永不锁屏永不休眠的方法

    本篇文章将详细介绍两种实现Android系统永不锁屏和永不休眠的方法。 首先,我们要明白Android系统默认为了节省电量,会在一段时间无操作后自动进入休眠状态并锁屏。为了避免这种情况,开发者可以采取以下策略: 1....

    android禁止锁屏保持常亮(示例代码)

    本篇文章将详细介绍如何在Android应用中实现禁止锁屏保持屏幕常亮,并提供示例代码,特别是针对三星Galaxy设备上的特殊情况。 首先,Android系统提供了几种方式来实现屏幕常亮: 1. **使用Window属性**: 通过在...

    设置Android系统永不锁屏永不休眠的方法

    总结来说,要实现Android系统永不锁屏和永不休眠,我们需要对系统的设置和配置文件进行修改,包括移除休眠时间选项、禁用锁屏功能以及限制多用户支持。这些操作需要对Android系统有深入的理解,并且在执行时需谨慎,...

    设置Android设备WIFI在休眠时永不断开的代码实现

    在Android系统中,为了节省电池,当设备进入休眠状态时,默认情况下,Wi-Fi连接可能会被关闭或进入一种节能模式。然而,在某些应用场景下,如持续的后台数据传输或者需要保持网络连接的实时应用,我们需要确保Wi-Fi...

    Android编程实现禁止系统锁屏与解锁亮屏的方法

    在Android开发中,有时我们需要控制设备的屏幕状态,例如在执行特定任务时保持屏幕常亮,或者禁止用户锁屏和解锁。本篇文章将详细介绍如何通过编程实现这些功能,包括禁止系统锁屏、解锁亮屏以及控制屏幕的开关。 ...

    android小设置.doc

    - **禁止屏幕自动休眠**: - **文件路径**:`frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java` - **修改变量**:`private boolean mExternallyEnabled = true;` - *...

Global site tag (gtag.js) - Google Analytics