android开发之增加永不暗屏菜单

原创 2016年08月31日 15:16:57

     在ODM开发过程中,不可避免的需要根据客户的需求所有调整手机的菜单功能等,今天为大家介绍我在实际开发中遇到的问题,客户要求在手机设置-显示-休眠中增加永不暗屏的菜单。具体的整理文件如下:

       首先此功能菜单在设置模块,因此它修改的文件地址为:

alps/packages/apps/Settings   

修改的文件主要有String.xml 、arrays.xml、以及DisplaySettings.java文件,

下面来看具体的改动处:

1.alps/packages/apps/Settings/res/values/arrays.xml

此文件中增加一个item,同时设置其Value值

    <!-- Display settings.  The delay in inactivity before the screen is turned off. These are shown in a list dialog. -->
    <string-array name="screen_timeout_entries">
        <item>15 seconds</item>
        <item>30 seconds</item>
        <item>1 minute</item>
        <item>2 minutes</item>
        <item>5 minutes</item>
        <item>10 minutes</item>
        <item>30 minutes</item>
        <item>Never timeout</item>
    </string-array>


    <!-- Do not translate. -->
    <string-array name="screen_timeout_values" translatable="false">
        <!-- Do not translate. -->
        <item>15000</item>
        <!-- Do not translate. -->
        <item>30000</item>
        <!-- Do not translate. -->
        <item>60000</item>
        <!-- Do not translate. -->
        <item>120000</item>
        <!-- Do not translate. -->
        <item>300000</item>
        <!-- Do not translate. -->
        <item>600000</item>
        <!-- Do not translate. -->
        <item>1800000</item>
        <!-- Do not translate. -->
        <item>-1</item>
    </string-array>


2.alps/packages/apps/Settings/res/values/strings.xml

此文件中增加一个新的字串

<string name="screen_never_timeout">Never timeout</string>

注意:若手机兼容多国言语,则需在不同的value文件中重复上述动作,我的项目语言主要为英语、中文简体、中文繁体,因此任须修改如下路径中的arrays.xml,string.xml文件

alps/packages/apps/Settings/res/values-zh-rCN

alps/packages/apps/Settings/res/values-zh-rTW

同样在arrays.xml中增加相应的item,String.xml中增加相应的显示字串


3.最重要的一步修改,代码逻辑的修改:

alps/packages/apps/Settings/src/com/android/settings/DisplaySettings.java

一、在onPreferenceChange()方法中定义

        if (KEY_SCREEN_TIMEOUT.equals(key)) {
            try {
                int value = Integer.parseInt((String) objValue);
                if(value==-1){
                    value=Integer.MAX_VALUE;
                }
                Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
                updateTimeoutPreferenceDescription(value);
            } catch (NumberFormatException e) {
                Log.e(TAG, "could not persist screen timeout setting", e);
            }
        }

二、在onCreate()方法给休眠设置时做修改

       final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT,
                FALLBACK_SCREEN_TIMEOUT_VALUE);
        if(Integer.MAX_VALUE==currentTimeout){
            mScreenTimeoutPreference.setValue(String.valueOf(-1));
        }else{
            mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout));
        }
        mScreenTimeoutPreference.setOnPreferenceChangeListener(this);

三、在updateTimeoutPreferenceDescription()方法中修改,主要设置summary的显示

 

    private void updateTimeoutPreferenceDescription(long currentTimeout) {
        ListPreference preference = mScreenTimeoutPreference;
        String summary;
        if (currentTimeout < 0||Integer.MAX_VALUE==currentTimeout) {
            // Unsupported value
            summary = preference.getContext().getString(R.string.screen_never_timeout);
        } else {
            final CharSequence[] entries = preference.getEntries();
            final CharSequence[] values = preference.getEntryValues();
            if (entries == null || entries.length == 0) {
                summary = "";
            } else {
                int best = 0;
                for (int i = 0; i < values.length; i++) {
                    long timeout = Long.parseLong(values[i].toString());
                    if (currentTimeout >= timeout && timeout>0) {
                        best = i;
                    }
                }
                summary = preference.getContext().getString(R.string.screen_timeout_summary,
                        entries[best]);
            }
        }
        preference.setSummary(summary);
    }

四、在updateState()方法中修改

        // update screen timeout
        if (mScreenTimeoutPreference != null) {
            final long screenTimeout = Settings.System.getLong(getContentResolver(), SCREEN_OFF_TIMEOUT,
                    FALLBACK_SCREEN_TIMEOUT_VALUE);
            if(Integer.MAX_VALUE==screenTimeout){
                mScreenTimeoutPreference.setValue(String.valueOf(-1));
            }else{
                mScreenTimeoutPreference.setValue(String.valueOf(screenTimeout));
            }
            updateTimeoutPreferenceDescription(screenTimeout);
        }

之后单遍push之后可做验证,好了本期就我遇到问题分享到这里,谢谢!


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android亮屏、暗屏、解锁、关闭系统对话的监听事件

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV...

Android frameworks去掉熄屏前先变暗的功能

设置>显示:这里可以设置自动休眠超时时间。 当设置为30s时,到24s左右屏幕会先变暗,告知用户屏幕快熄灭了,6s以后才会真正熄屏。 现在需要去掉这个功能,在PowerManagerSer...

android禁止系统休眠,使屏幕不变暗的两种方法

Android 禁止系统休眠,使屏幕不变暗,保持游戏中屏幕高亮 实现这一功能的方法有两种,一种是在Manifest.xml文件里面声明,一种是在代码里面修改LayoutParams的标志位。具体...

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

 Introduction 常常我们开发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏功能启动,既不想锁...

Android修改源代码控制永不锁屏

锁定屏幕对于移动终端来说是非常有必要的,但是对于机顶盒产品就没有这个必要了。所以本文介绍一下怎样让Android设备永不锁屏。 Android系统的锁屏时间存放在Setting数据库中,字段为Set...
  • MyArrow
  • MyArrow
  • 2012年11月03日 15:25
  • 5341

android 设置 永不休眠

如果想第一次烧录系统开机就是永不休眠。这个需要修改def_screen_off_timeout = -1,在android 第一次开机的时候会去读取这个值, 在文件SettingsProvider/...

Android开发技巧:永不关闭的Toast信息框

Toast信息提示框之所以在显示一定时间后会自动关闭,是因为在系统中有一个Toast队列。系统会依次从队列中取(出队列)一个Toast,并显示它。在显示一段时间后,再关闭,然后再显示下一个Toast信...
  • llyrike
  • llyrike
  • 2013年05月02日 16:13
  • 353

Android开发仿美团下拉列表菜单

  • 2015年03月12日 15:18
  • 2.05MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android开发之增加永不暗屏菜单
举报原因:
原因补充:

(最多只允许输入30个字)