飞行模式下打开wifi  和 Setting界面增加Shut down & Reboot功能

来源:互联网 发布:linux中没有yum命令 编辑:程序博客网 时间:2024/05/01 22:42

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,wimax27    <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    @Override77    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);    }}
0 0
原创粉丝点击