Android系统之路(初识MTK) ------ System-Bluetooth name/WiFi AP name/sleep add never/Notification popup
来源:互联网 发布:sql group by having 编辑:程序博客网 时间:2024/05/22 15:47
今天拿到一个客户新的订单需求,大概有40多个需求,今天先讲更改系统的蓝牙/wifi 热点/消息通知/sleep 添加 never选项,分别是:
蓝牙:连接显示名、系统界面显示名字,重命名前的默认名字
wifi 热点:连接名字,重命名前默认 Network name
Notification popup :系统 Notification popup 默认不勾选
休眠添加never选项,默认30s:添加永不休眠,默认30s
首先我们要知道系统默认的蓝牙名字 ANDROID BT
Linux input ...> find 你的源码根目录/ -type f|xargs grep "ANDROID BT" -l
这句命令是找出源码下所有带有字符串 ANDROID BT 所在的文件,搜索无果,直接进入源码
packages\apps\Settings\src\com\android\settings\bluetooth\BluetoothSettins.java
跟踪源码找到如下代码
@Override public void onResume() { ...... if (mLocalAdapter != null) { updateContent(mLocalAdapter.getBluetoothState()); } }
跟踪updateContent函数,修改如下代码
if (mMyDevicePreference == null) { mMyDevicePreference = new Preference(getActivity()); } // Engineer-Jsp add default bluetooth name if (android.os.SystemProperties.isWalPadVersion()) { mMyDevicePreference.setSummary(getResources().getString( R.string.bluetooth_is_visible_message, "Walpad C")); }else{ mMyDevicePreference.setSummary(getResources().getString( R.string.bluetooth_is_visible_message, mLocalAdapter.getName())); } mMyDevicePreference.setSelectable(false);
其中 isWalpadVersion 函数是我在frameworks/base/core/java/android/os/SystemProperties.java中定义的
public static boolean isWalPadVersion(){ return SystemProperties.get("ro.product.model").contains("Walpad"); }根据编译文件设置的客户平板型号定制产品而定,这样写有人可能会觉得多此一举,显的麻烦,但是作为一个系统,能把它做成兼容模式岂不是更好?
因为下次再有系统定制订单需求,我们只需要修改配置文件和分支就够了,轻松方便,而不需要再去new 代码了
setSummary(...,...)函数就是蓝牙设置打开蓝牙之后在界面显示的效果
R.string.bluetooth.is.visible_message 内容:
<string name="bluetooth_is_visible_message"><xliff:g id="device_name">%1$s</xliff:g> is visible to nearby devices while Bluetooth Settings is open.</string>device_name 即为我们替换的名字,即Walpad C,效果图:
接下来修改重名命选项的蓝牙设备名称,onOptionsItemSelected(MenuItem item) 根据 item 追踪重命名的 Dialog 找到如下逻辑:
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { ...... mAlertDialog = new AlertDialog.Builder(getActivity()) .setTitle(R.string.bluetooth_rename_device) .setView(createDialogView(deviceName))// 继续追踪createDialogView(deviceName)方法...... return mAlertDialog; }
根据逻辑,修改如下:
private View createDialogView(String deviceName) { ...... // Engineer-Jsp add default bluetooth name if (android.os.SystemProperties.isWalPadVersion()) {// 根据model显示名称 mDeviceNameView.setText("Walpad C"); }else{ mDeviceNameView.setText(deviceName); // set initial value before adding listener } ...... return view; }
效果图:
连接显示名修改:
// Engineer-Jsp add default bluetooth name if (android.os.SystemProperties.isWalPadVersion()) { mMyDevicePreference.setSummary(getResources().getString( R.string.bluetooth_is_visible_message, "Walpad C")); mLocalAdapter.setName("Walpad C");//在之前讲到的修改除再添加此句 }else{ mMyDevicePreference.setSummary(getResources().getString( R.string.bluetooth_is_visible_message, mLocalAdapter.getName())); }
效果:
修改wifi重命名前的名字,根据信息搜索到源码packages\apps\Settings\src\com\android\settings\wifi\WifiApDialog.java
根据逻辑,查找到如下代码:
@Override protected void onCreate(Bundle savedInstanceState) { Context context = getContext(); ...... if (mWifiConfig != null) { // Engineer-Jsp add default bluetooth name if (android.os.SystemProperties.isWalPadVersion()) { //根据型号显示ssid mSsid.setText("Walpad C"); }else{ mSsid.setText(mWifiConfig.SSID); } /// M: set selection mSecurity.setSelection(mExt.getSelection(mSecurityTypeIndex)); if (mSecurityTypeIndex == WPA2_INDEX) { mPassword.setText(mWifiConfig.preSharedKey); } ///M: get configured channel @{ mChannel = mWifiConfig.channel; mChannelWidth = mWifiConfig.channelWidth; /// @} } ...... }
效果:
连接名字:
修改系统 Notification popup 默认不勾选
搜索关键字:源码目录...>find ./ -name ".xml" | xargs grep "Popup notification"
找到xml文件之后找到对应string name 名称,发现他被一个布局文件调用,packages\apps\Mms\res\xml\notificationpreferences.xml - pref_summary_popup_notification -
defaultValue="false" 把这个默认false,即可
效果:
修改休眠选项默认 30s 添加永不休眠选项:
默认休眠30s修改:frameworks\base\packages\SettingsProvider\res\values\defaults.xml
<integer name="def_screen_off_timeout">30000</integer>
添加永不休眠选项:
private static final boolean sNeedScreenTimeoutNever = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);...... if (sNeedScreenTimeoutNever && mScreenTimeoutPreference != null) { //rmt add Resources res = getResources(); final String[] entries = res.getStringArray(R.array.screen_timeout_entries); final String[] values = res.getStringArray(R.array.screen_timeout_values); int entriesLength = entries.length; final String[] newEntries = new String[entriesLength + 1]; for (int i = 0; i < entriesLength + 1; i++) { if (i != entriesLength) { newEntries[i] = entries[i]; } else { newEntries[i] = res.getString(R.string.zen_mode_when_never); } } int valuesLength = values.length; final String[] newValues = new String[valuesLength + 1]; for (int i = 0; i < valuesLength + 1; i++) { if (i != valuesLength) { newValues[i] = values[i]; } else { newValues[i] = "2147483647"; } } mScreenTimeoutPreference.setEntries(newEntries); mScreenTimeoutPreference.setEntryValues(newValues); ...... } private void updateTimeoutPreferenceDescription(long currentTimeout) { ...... } else if(currentTimeout == Integer.MAX_VALUE) { //Engineer-Jsp add summary = preference.getContext().getString(R.string.zen_mode_when_never);}....... }
效果:
- Android系统之路(初识MTK) ------ System-Bluetooth name/WiFi AP name/sleep add never/Notification popup
- Android系统之路(初识MTK) ------ Bluetooth bug resolved on Google/关于谷歌蓝牙bug的解决
- Android系统之路(初识MTK) ------ make update-api长按Power键添加Reboot项/内置默认Ringtone/SMS/Notification/Alarm删除系统铃声
- Android之Notification初识
- Cannot add extension with name 'android'......
- Android系统之路(初识MTK) ------ 客制化开机LOGO跟开机动画/系统默认壁纸
- Android系统之路(初识MTK) ------ 设置系统默认语言/客制化可选语言/设置默认时区
- Android系统之路(初识MTK) ------ OTA打包ROM安装系统img等到ZIP
- 域名管理系统DNS(Domain Name System)
- DNS--域名系统 (Domain Name System)
- DNS(Domain Name System) 域名系统 解析
- DNS(Domain Name System,域名系统)
- System.getProperty(String name)获取系统属性
- DNS 域名系统 (Domain Name System)
- DNS(Domain Name System,域名系统)
- JNI获取android wifi interface name
- Android系统之路(初识MTK) ------ 默认打开开发者模式默认打开USB调试
- Android系统之路(初识MTK) ------ 内置三方apk到Rom可移动/可卸载
- vi编辑器的使用
- 使用google地图绘画轨迹
- Android性能优化之渲染
- Linux如何实现开机启动程序详解
- addr2line命令使用
- Android系统之路(初识MTK) ------ System-Bluetooth name/WiFi AP name/sleep add never/Notification popup
- redis第三天之各种数据类型对应的jedis操作命令
- ubuntu 12.04 下安装android编译环境
- 查看和改变网卡的速度和双工(ethtool)
- LeetCode 242 Valid Anagram(有效字谜)(*)
- iOS中加数据锁的方式
- @property属性修饰符
- 在iOS 9中不在使用UIAlertView使用UIAlertController
- 文字轮播无缝滚动