在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3284|回复: 2

[转载] 飞行模式下,实现禁止打开蓝牙的方法

[复制链接]
发表于 2017-9-5 17:31:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在开启飞行模式的情况下,禁止打开蓝牙,即使第三方软件如360等也不能在此情景下开打蓝牙.

请按照如下步骤修改代码后,将整个工程new一遍,再重新download手机.
(1)将alps/framework/base/packages/settingsprovider/res/values/defaults.xml里面airplane_mode_toggleable_radios标签中的“bluetooth”去掉。
(2)在packages/apps/settings/src/android/settings/bluetoothangel/BluetoothEnabler.java这
支文件里进行如下修改:
1.import 如下两个包:
import android.database.ContentObserver;
import com.android.settings.AirplaneModeEnabler;
import android.os.Handler;
2. 在resume()方法的末尾添加如下语句:
//add by mtk71601
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.AIRPLANE_MODE_ON), true,
mAirplaneModeObserver);
mSwitch.setEnabled(!shouldDisableBT());
//add end
3.在pause()方法里面添加如下语句:
//add by mtk71601
mContext.getContentResolver().unregisterContentObserver(mAirplaneModeObserver);
//add end
4. 在setSwitch()方法里注释掉如下语句:
//mSwitch.setEnabled(isOn || isOff);
添加如下语句:
mSwitch.setEnabled(!shouldDisableBT()); //add by mtk71601
5. 将handleStateChanged()方法里面的BluetoothAdapter.STATE_ON,BluetoothAdapter.OFF和default这三个case里的mSwitch.setEnabled(true);
修改为:
mSwitch.setEnabled(!shouldDisableBT()); // add by mtk71601
6.在BluetoothEnabler这个class添加如下方法和成员变量:
//add by mtk71601
private boolean shouldDisableBT(){
String toggleable = Settings.System.getString(mContext.getContentResolver(),
Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
if(toggleable == null || !toggleable.contains(Settings.System.RADIO_BLUETOOTH)){
return AirplaneModeEnabler.isAirplaneModeOn(mContext);
}
return false;
}
// add by mtk71601
private ContentObserver mAirplaneModeObserver = new ContentObserver(new
Handler()) {
@Override
public void onChange(boolean selfChange) {
onAirplaneModeChanged();
}
};
// add by mtk71601
private void onAirplaneModeChanged() {
mSwitch.setEnabled(!AirplaneModeEnabler.isAirplaneModeOn(mContext));
}
(3)ALPS.JB.MP\alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar
\tool
bar\connectionSwitchPannel.java
在private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
里面的onReceive()函数里的
else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
这个判断分支内最后添加:
//add by mtk71601 added for airplan -bt toggle state
mBluetoothStateTracker.setAirlineMode(enabled);
mBluetoothIcon.getConfigView().setEnabled(mBluetoothStateTracker.isClickable());
//add end
BluetoothStateTracker 类中添加如下代码
class BluetoothStateTracker extends StateTracker {
//add by mtk71601
private
boolean mIsAirlineMode = false;
public void setAirlineMode(boolean
enable) {
if (DBG) {
Xlog.i(TAG, "Bluetooth setAirlineMode
called, enabled is: " + enable);
}
mIsAirlineMode = enable;
}
public boolean isClickable() {
Xlog.i(TAG, "BT mIsAirlineMode
is " + mIsAirlineMode + ", mIsUserSwitching is " + mIsUserSwitching);
return
!mIsAirlineMode && super.isClickable();
}
//add end
(4)\alps\packages\apps\Settings\src\com\android\settings\widget\SettingsAppWidgetProvid
er.java
//add by mtk71601
import com.android.settings.AirplaneModeEnabler;
//add end
else if ((FeatureOption.[url=http://bbs.16rd.com/forum-261-1.html]MTK[/url]_BT_SUPPORT) && (buttonId == BUTTON_BLUETOOTH)) {
//sBluetoothState.toggleState(context);
//add by mtk71601
if(!AirplaneModeEnabler.isAirplaneModeOn(context)) {
sBluetoothState.toggleState(context);
}
//add end
}
发表于 2018-1-18 20:43:29 | 显示全部楼层
太有用的資料,學習了
发表于 2018-2-28 17:52:02 | 显示全部楼层
感谢提供!!!!!!!回复 1# big白菜
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 14:44 , Processed in 0.019073 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表