飞行模式下打开wifi 和 Setting界面增加Shut down & Reboot功能
2016-03-10 15:51
435 查看
1.飞行模式下打开wifi
问题描述:打开飞行模式后,能打开wifi解决方法:
在/frameworks/base/packages/SettingsProvider/res/values/defaults.xml下面配置.
25 <!-- Comma-separated list of bluetooth, wifi, and cell. --> 26 <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc,wimax</string> //在打开飞行模式时候,立即关闭配置在这里的应用cell,bluetooth,wifi,nfc,wimax 27 <string name="airplane_mode_toggleable_radios" translatable="false">bluetooth,wifi,nfc</string> //在飞行模式被打开以后,这时候去打开wifi等应用,是可以打开bluetooth,wifi,nfc等应用的 //注意26:是在打开飞行模式时,如果wifi是被打开着的,这时瞬间wifi等应用就被断开了 //27:是在飞行模式被打开以后,这个时候去打开bluetooth,wifi,nfc等应用是可以被打开的哟, 就可在quick setting里面打开WiFi,进入设置里,也可以打开飞行模式
在设备上的路径
data/data/com.android.providers.settings/databases 目录里的settings.db里面的system
飞行模式下禁止打开蓝牙:
这里主要控制的是quick setting的开关。如果想要在飞行模式打开下,禁止打开蓝牙,就是如下处理:
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
修改之前:
76 @Override 77 protected void handleClick() { 78 final boolean isEnabled = (Boolean)mState.value; 79 MetricsLogger.action(mContext, getMetricsCategory(), !isEnabled); 80 mController.setBluetoothEnabled(!isEnabled); 81 }
修改之后:
//首先判断是否是飞行模式 public boolean isAirplaneModeOn() { return (Settings.System.getInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0); } @Override protected void handleClick() { //将飞行模式作为判断 if (!isRadioProhibited() && !isAirplaneModeOn()) { final boolean isEnabled = (Boolean)mState.value; mController.setBluetoothEnabled(!isEnabled); } }
如果想要禁止wifi的话也是一样的做法哟。
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
99 protected void handleClick() { 100 mState.copyTo(mStateBeforeClick); 101 MetricsLogger.action(mContext, getMetricsCategory(), !mState.enabled); 102 mController.setWifiEnabled(!mState.enabled); 103 } 104
2.Setting界面增加Shut down & Reboot功能
其实下面的解决方法不是很好,没有在AndroidManifest.xml里面写activity,也没有在SettingActivity.java里面写东西,这样是不好的,因为任何一个Fragment必须依附在Activity上,这里我没有用到Activity,也是绝了。经过大神的讲解,没有定义Activity,Setting也没有挂,是因为在Utils.java中Utils.java public static Intent onBuildStartFragmentIntent(Context context, String fragmentName, 716 Bundle args, String titleResPackageName, int titleResId, CharSequence title, 717 boolean isShortcut) { 718 Intent intent = new Intent(Intent.ACTION_MAIN); 719 intent.setClass(context, SubSettings.class); //如果没有定义activity,那就直接搞成SubSettings.class, 720 intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName); 721 intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, args); 722 intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RES_PACKAGE_NAME, 723 titleResPackageName); 724 intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, titleResId); 725 intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title); 726 intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, isShortcut); 727 return intent; 728 }
解决方法:
modify两文件,add两文件。
全部都在packages/apps/Settings下面修改及添加文件的哟
# modified: res/values/strings.xml
# modified: res/xml/dashboard_categories.xml
Untracked files:
(use “git add …” to include in what will be committed)
# res/xml/aaa.xml
# src/com/android/settings/XXXXX.java
网上左拼又凑弄起的 public class XXXXX extends SettingsPreferenceFragment { private static final String TAG = "XXXXX"; private static final String MYSHUTDOWNSETTINGS = "myshutdownsetting"; private static final String MYREBOOTSETTINGS = "myrebootsetting"; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.aaa);//加载自己定义在res/xml/下面的布局文件 } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference.getKey().equals(MYSHUTDOWNSETTINGS)) { //关机界面,action="android.intent.action.ACTION_REQUEST_SHUTDOWN" Log.d(TAG, "MYSHUTDOWNSETTINGS"); Intent i = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); i.putExtra("android.intent.extra.KEY_CONFIRM", false); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); return true; } else if (preference.getKey().equals(MYREBOOTSETTINGS)) { //重启,action="android.intent.action.REBOOT" Log.d(TAG, "MYREBOOTSETTINGS"); Intent i = new Intent("android.intent.action.REBOOT"); i.putExtra("nowait", 1); i.putExtra("interval", 1); i.putExtra("window", 0); startActivity(i); return true; } return super.onPreferenceTreeClick(preferenceScreen, preference); } }
相关文章推荐
- Linux下ejabberd安装配置
- bootstrap - btn 实例
- 继承、封装、多态
- c++ 桥接模式
- Android系统源码剖析(一)---Settings
- 字符串的查找
- raw和assets
- C++类虚函数表
- flexbox弹性盒子布局
- 字符串的查找
- java对象和json对象之间互相转换
- 高并发通用技术点
- 3.6 锐化空间滤波器
- 为什么开发人员不希望做代码检视???
- js中使用控件名和数组下标方式获取控件的值时失败
- bootstrap - btn
- 3.10 布局方面慎用div,避免造成div泛滥
- iOS实现手势解锁操作
- C++中引用、指针,传值的联系和区别
- 林业病虫害预警机制的思考