。
去掉菜单还可以找到key,然后用setvisible
比如在vendor/mediatek/proprietary/packages/apps/MtkSettings/ src/com/android/settings/dashboard/DashboardFragment.java
这里有个专门处理的方法displayResourceTiles加入
Preference preference_setting = findPreference(key的名字);
preference_setting.setVisible(false);
Android12 s的项目都是这样去掉菜单的,和之前不一样
override/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/display/AutoBrightnessPreferenceController.java
里面有个getAvailabilityStatus()方法控制,注意这个是int类型的,
return mContext.getResources().getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available)
? AVAILABLE_UNSEARCHABLE
: UNSUPPORTED_ON_DEVICE;
就直接改成return UNSUPPORTED_ON_DEVICE;当然这个直接改这个布尔值也可以,但是我找到的布尔本来就是false,但最后还是返回的true,所以应该有overlay,但没找到在哪。后来找到了在vendor下的mediatek/proprietary/packages/overlay/vendor/FrameworkResOverlayExt/brightness_adaptive_support/res/values/config.xml
这里设置成了true
这个UNSUPPORTED_ON_DEVICE变量是在这配置的,实际上这个值是 int类型,所以这个控制显示的方法也是返回int类型的。
vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/core/BasePreferenceController.java
public static final int UNSUPPORTED_ON_DEVICE = 3;
位置Location也是同理
src/com/android/settings/location/TopLevelLocationPreferenceController.java
public int getAvailabilityStatus() {
/*/tyd.yantao 20220808 delete Location
return AVAILABLE;
//*/
return UNSUPPORTED_ON_DEVICE;
}
WiFi的也同理
src/com/android/settings/network/TopLevelNetworkEntryPreferenceController.java
连接设备菜单同理
src/com/android/settings/connecteddevice/TopLevelConnectedDevicesPreferenceController.java
手势里的按住电源按钮也同理
src/com/android/settings/gestures/PowerMenuPreferenceController.java
关于手机里面的关于蓝牙和WiFi的菜单没有controller,所以直接在xml上注释掉
vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/my_device_info.xml
<!--tyd.yantao 20220809 delete MAC
<Preference
android:key="saved_accesspoints_wifi_mac_address"
android:order="45"
@@ -154,6 +155,7 @@
android:summary="@string/view_saved_network"
android:fragment="com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2"
settings:enableCopying="false"/>
+ -->
<!--tyd.yantao 20220809 delete bt
<Preference
android:key="bt_address"
android:order="47"
@@ -172,6 +175,7 @@
android:summary="@string/summary_placeholder"
android:selectable="false"
settings:enableCopying="true"/>
+ -->
WiFi的除了这个preference其实还有IPdress还有个MAC的不能点击的preference,这个在config里面改个布尔值就可
./vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/config.xml
<!-- Whether wifi_ip_address should be shown or not. -->
<bool name="config_show_wifi_ip_address">false</bool>
<!-- Whether wifi_mac_address should be shown or not. -->
<bool name="config_show_wifi_mac_address">false</bool>
网络和互联网-热点和网络共享,删除-WLAN热点
src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
public boolean isAvailable() {
return false
通过广播来控制设置里的菜单是否隐藏:
base/services/core/java/com/android/server/BatteryService.java
接收广播处理,如果是需要批量隐藏,可以写数组遍历添加
public String[] def_setting = {
"com.action.gps.enable",
"com.action.wifi.enable",
"com.action.bluetooth.enable",
} ;
然后添加广播过滤
for (int i = 0; i < def_setting.length; i++) {
filter.addAction( def_setting[i] );
}
最后接到广播执行
for (int i = 0; i < def_setting.length; i++) {
if(action.equals(def_setting[i]) ){
Boolean data = intent.getBooleanExtra("enable", true);
android.util.Log.d("tydtech","data:"+data);
android.provider.Settings.System.putInt(mContext.getContentResolver(),"def_setting"+i,data?1:0);
}
}
然后就是获取这个数据库的值做出对应的效果
在vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/dashboard/DashboardFragment.java
private void displayResourceTiles() {方法中
String[] def2_setting = {"tydnull","toggle_wifi","tether_settings","bluetooth_settings"} ;
for (int i = 0; i < def2_setting.length; i++) {
Preference preference_setting = findPreference( def2_setting[i] );
if (preference_setting != null ) {
if(android.provider.Settings.System.getInt(getContext().getContentResolver(),"def_setting"+i,1) ==0){
preference_setting.setVisible(false);
}else{
preference_setting.setVisible(true);
}
}
}
注意数组里的key名字要看好具体是哪个。然后这里的tydnull,是由于第一个不用,就不要管他
tether_settings这个就是热点和网络共享菜单,