Android系统apps之Setting的修改和设置

2023-11-14

由于接到了一个修改系统app---Settings条目是需求,接着也看到了一个博主的文章http://blog.csdn.net/wangjinyu501/article/details/22077803 这篇文章写的很好,基本满足了需求,我这里再做下整理,作为对知识的总结和梳理。

首先我们下载源码,可以从https://android.googlesource.com/上下载,接着我们找到AndroidManifest,xml文件。找到入口,代码如下

<activity android:name="Settings"
                android:label="@string/settings_label_launcher"
                android:taskAffinity="com.android.settings"
                android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

接着我们找到Settings.java。代码如下

/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings;

import com.android.internal.util.ArrayUtils;
import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
import com.android.settings.accounts.AccountSyncSettings;
import com.android.settings.accounts.AuthenticatorHelper;
import com.android.settings.accounts.ManageAccountsSettings;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.ManageApplications;
import com.android.settings.bluetooth.BluetoothEnabler;
import com.android.settings.deviceinfo.Memory;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.vpn2.VpnSettings;
import com.android.settings.wifi.WifiEnabler;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.OnAccountsUpdateListener;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.INetworkManagementService;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.Switch;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

/**
 * Top-level settings activity to handle single pane and double pane UI layout.
 */
public class Settings extends PreferenceActivity
        implements ButtonBarHandler, OnAccountsUpdateListener {

    private static final String LOG_TAG = "Settings";

    private static final String META_DATA_KEY_HEADER_ID =
        "com.android.settings.TOP_LEVEL_HEADER_ID";
    private static final String META_DATA_KEY_FRAGMENT_CLASS =
        "com.android.settings.FRAGMENT_CLASS";
    private static final String META_DATA_KEY_PARENT_TITLE =
        "com.android.settings.PARENT_FRAGMENT_TITLE";
    private static final String META_DATA_KEY_PARENT_FRAGMENT_CLASS =
        "com.android.settings.PARENT_FRAGMENT_CLASS";

    private static final String EXTRA_CLEAR_UI_OPTIONS = "settings:remove_ui_options";

    private static final String SAVE_KEY_CURRENT_HEADER = "com.android.settings.CURRENT_HEADER";
    private static final String SAVE_KEY_PARENT_HEADER = "com.android.settings.PARENT_HEADER";

    private String mFragmentClass;
    private int mTopLevelHeaderId;
    private Header mFirstHeader;
    private Header mCurrentHeader;
    private Header mParentHeader;
    private boolean mInLocalHeaderSwitch;

    // Show only these settings for restricted users
    private int[] SETTINGS_FOR_RESTRICTED = {
            R.id.wireless_section,
            R.id.wifi_settings,
            R.id.bluetooth_settings,
            R.id.data_usage_settings,
            R.id.wireless_settings,
            R.id.device_section,
            R.id.sound_settings,
            R.id.display_settings,
            R.id.storage_settings,
            R.id.application_settings,
            R.id.battery_settings,
            R.id.personal_section,
            R.id.location_settings,
            R.id.security_settings,
            R.id.language_settings,
            R.id.user_settings,
            R.id.account_settings,
            R.id.account_add,
            R.id.system_section,
            R.id.date_time_settings,
            R.id.about_settings,
            R.id.accessibility_settings
    };

    private SharedPreferences mDevelopmentPreferences;
    private SharedPreferences.OnSharedPreferenceChangeListener mDevelopmentPreferencesListener;

    // TODO: Update Call Settings based on airplane mode state.

    protected HashMap<Integer, Integer> mHeaderIndexMap = new HashMap<Integer, Integer>();

    private AuthenticatorHelper mAuthenticatorHelper;
    private Header mLastHeader;
    private boolean mListeningToAccountUpdates;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (getIntent().getBooleanExtra(EXTRA_CLEAR_UI_OPTIONS, false)) {
            getWindow().setUiOptions(0);
        }

        mAuthenticatorHelper = new AuthenticatorHelper();
        mAuthenticatorHelper.updateAuthDescriptions(this);
        mAuthenticatorHelper.onAccountsUpdated(this, null);

        mDevelopmentPreferences = getSharedPreferences(DevelopmentSettings.PREF_FILE,
                Context.MODE_PRIVATE);

        getMetaData();
        mInLocalHeaderSwitch = true;
        super.onCreate(savedInstanceState);
        mInLocalHeaderSwitch = false;

        if (!onIsHidingHeaders() && onIsMultiPane()) {
            highlightHeader(mTopLevelHeaderId);
            // Force the title so that it doesn't get overridden by a direct launch of
            // a specific settings screen.
            setTitle(R.string.settings_label);
        }

        // Retrieve any saved state
        if (savedInstanceState != null) {
            mCurrentHeader = savedInstanceState.getParcelable(SAVE_KEY_CURRENT_HEADER);
            mParentHeader = savedInstanceState.getParcelable(SAVE_KEY_PARENT_HEADER);
        }

        // If the current header was saved, switch to it
        if (savedInstanceState != nul
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android系统apps之Setting的修改和设置 的相关文章

随机推荐

  • opencv轻松入门面向pythonpdf下载_小白入门到大佬都在看的Python电子书奉上!最好用的PDF...

    关注 转发 最后私信小编 资料 即可获取小编准备的pythonPDF资料啦 电子版的哦 只赠送前500位哦 书籍简介 像计算机科学家一样思考Python 第2版 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程 贯穿全书
  • sqlmap工具学习记

    学习时间2022 7 20 既要不辜负别人也要对得起自己 1 python2 7版本下载安装 因为sqlmap依赖环境是2 7所以我们下载2 7版本 进入下载官网Download Python Python org 选择你要下载的版本 选择
  • python爬虫之JS混淆加密、字体反爬

    1 JS混淆加密 我们之前爬取有道翻译的翻译内容时 我们通过fiddler抓取url地址时 我们发现如果我们直接将相关参数传入 会报错 只是因为 某些参数是变化的 因此 我们需要解读JS文件 取得相关参数的生成算法 利用python生成参数
  • 电流源等效噪声公式

  • 华为OD机试真题-单词倒序【2023Q1】【JAVA、Python、C++】

    题目描述 输入单行英文句子 里面包含英文字母 空格以及 三种标点符号 请将句子内每个单词进行倒序 并输出倒序后的语句 输入描述 输入字符串S S的长度1 N 100 输出描述 输出逆序后的字符串 补充说明 标点符号左右的空格 0 单词间空格
  • obb vtk 定点坐标_vtk学习笔记 --- 显示坐标系

    有的时候 在显示三维物体时 我们希望知道当前场景对应的坐标系位置或者方向 这样在旋转物体的时候 就能够很清楚地看到当前正对这视野的是什么面xy平面 还是y轴等信息了 在vtk库中有一个vtkAxesActor负责显示坐标系 在查阅了vtk的
  • OpenMAX学习资料收集

    OpenMAX框架拆解与实现 OpenMax OMX 开发入门 OpenMax人口 OpenMAX IL spec手册下载 https www khronos org files openmax il spec 1 0 pdf OpenMA
  • 重要思想总结

    重要思想总结 求二进制序列中1的个数 检测num中某一位是0还是1 不创建临时变量交换值 判断数值的位数 判断数值的位数 获取数值的每一位数 把一个整数的二进制位的奇数位和偶数位交换 将个位数 十位数 百位数 组成一个完整的数 找素数 将秒
  • centos dhcp服务器文件,centos dhcp服务器配置

    centos dhcp服务器配置 内容精选 换一换 简要介绍PHP FPM PHP FastCGI Process Manager PHP FastCGI进程管理器 用于管理PHP进程池的软件 用于接受web服务器的请求 PHP FPM提供
  • Django错误(1146,Table 'xxxx.django_session' doesn't exist")

    原文链接 https blog csdn net BlackListMan article details 82620144 出现这种错误先检查 数据库连接设置是否成功 在setting py同级文件中的 init py 中是否添加了数据库
  • SecureCRT遇到打开错误的时候

    我的解决办法 因为我用的是安装版的 我的操作是 1 删除注册表 可查 2 关闭所有的关于securecrt的进程 通过 任务管理器 的 详细信息 仔细检查关闭 3 一般就搞定了 4 参考文档 http blog csdn net lishe
  • MyBatis Plus多表联查方法

    MyBatis Plus是一款针对MyBatis框架的增强工具 它提供了很多方便的方法来实现多表联查 你可以使用MyBatis Plus的selectPage方法来实现多表联查 该方法接收一个QueryWrapper参数 你可以在Query
  • keyCode键盘码

    下次记不住了来查查吧 keyCode 8 BackSpace BackSpace keyCode 9 Tab Tab keyCode 12 Clear keyCode 13 Enter keyCode 16 Shift L keyCode
  • linux启动kvm虚拟机,如何在Linux中使用KVM(基于内核的虚拟机)创建虚拟机 - 第1部分...

    使用KVM在Linux中创建虚拟机 第1部分 本教程讨论KVM介绍 部署以及如何使用它在RedHat为基础的分布 如RHEL CentOS7和Fedora 21来创建虚拟机 什么是KVM KVM或 基于内核的虚拟机 是面向Linux的英特尔
  • git 恢复本地代码到仓库版本_Repo和Git 版本管理常用命令总结

    1 服务器版本下载 repo init u git 192 168 1 11 i700t 60501010 platform manifest git b froyo almond m M76XXTSNCJNLYA60501010 xml
  • Vue2学习第六篇:事件处理

    一 事件的基本使用 1 使用v on xxx 或 xxx 绑定事件 其中xxx是事件名 2 事件的回调需要配置在methods对象中 最终会在vm上 3 methods中配置的函数 不要用箭头函数 否则this就不是vm了 4 method
  • 【C++初阶】仿函数和priority_queue的模拟实现(附源码)

    一 仿函数 仿函数 顾名思义就是模仿函数 它其实是一个类 类里面重载了运算符 在调用这个重载的运算符时 让我们感觉是调用函数一样 可以说相当于C语言里的函数指针一样 但是函数指针的可读性不好 不如仿函数 仿函数的特点 1 仿函数即使定义相同
  • 4.1.3 英文单词的分割符验证

    在英文文本中 各个英文单词被分隔符所分开 这些分隔符包括英文标点符号 空白字符等 其中 英文标点符号比较多 如 逗号 点号 问号 冒号 分号 单引号 感叹号 双引号 连接号 破折号 省略号 小括号 中括号 大括号 所有格符号 等 在英文文本
  • python中的并行处理(多线程)几种方式(Pool, Parallel, threading)

    1 Pool from multiprocessing import Pool import os def worker arg print begin s str arg if name main po Pool 10 定义进程池 最大进
  • Android系统apps之Setting的修改和设置

    由于接到了一个修改系统app Settings条目是需求 接着也看到了一个博主的文章http blog csdn net wangjinyu501 article details 22077803 这篇文章写的很好 基本满足了需求 我这里再