您的位置:首页 > 其它

飞行模式下打开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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: