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架构设置篇】之设置界面添加并实现永不休眠功能

最近初步研究了下Android不休眠功能的实现,记录在此的目的是留作自己或他人的参考,最重要的是知其所以然! 之所以说“初步”,一是因为没做额外引申,二是因为系统(不仅限于Android)的电源管理是...
  • u013686019
  • u013686019
  • 2015年11月04日 20:32
  • 1939

android5.1系统定制应用全屏界面实现禁止状态栏下拉

在frameworks/base打补丁
  • weicaihui2008
  • weicaihui2008
  • 2015年11月09日 19:22
  • 2317

弹出PopupWindow背景变暗的实现

弹出PopuoWindow后 代码里设置的是PopupWindow默认获取焦点 所以PopupWindow显示的时候其它控件点击是没有反应的 用到的方法是 pwMyPopWindow.setFocu...
  • l970859633
  • l970859633
  • 2016年05月18日 10:15
  • 1699

android开发自定义控件学习 侧拉菜单

  • 2017年11月09日 16:41
  • 3KB
  • 下载

Android开发之滑动选择菜单(仿QQ滑动删除)代码

  • 2017年06月02日 11:06
  • 16KB
  • 下载

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

  • 2015年03月12日 15:18
  • 2.05MB
  • 下载

android开发 仿美团团购顶部的下拉菜单

  • 2014年11月26日 23:16
  • 886KB
  • 下载

android开发菜单实现

  • 2013年03月24日 17:49
  • 382KB
  • 下载

Android开发登录及主页面底部菜单

  • 2012年03月15日 20:44
  • 632KB
  • 下载

android开发底部菜单设计

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

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