本篇文章教大家如何在项目里加一个宏,我们用这个宏来控制SystemUI中的手电筒的这个快捷设置的显示和隐藏
1.首先我们来定义一个宏,我们以MTK平台为例,打开device/xxx/xxx目录下的ProjectConfig.mk文件,这里ProjectConfig.mk的具体路径是不一定的,具体跟手机开发商和平台有关,我们在这个文件中可以看到好多已经定义好的宏开关,这里我们定义一个MTK_FLASHLIGHT_SUPPORT来控制状态栏手电筒的显示与隐藏,这里我们假如要求是不支持手电筒,需要隐藏,那我们可以这么定义MTK_FLASHLIGHT_SUPPORT = no
2.接着我们打开device/mediatek/common/device.mk文件,在这里我们定义一个属性值,具体如下
ifeq ($(strip $(MTK_FLASHLIGHT_SUPPORT)),yes)
PRODUCT_PROPERTY_OVERRIDES += ro.mediatek_flashlight=1
endif
这里我们就定义好了,我们来简单看一下,当MTK_FLASHLIGHT_SUPPORT这个为yes,那么ro.mediatek_flashlight=1,当MTK_FLASHLIGHT_SUPPORT这个为no,ro.mediatek_flashlight为空,好,我们来具体的使用一下这个宏
3.打开frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java文件,添加如下代码
import android.os.SystemProperties;
public QSTile<?> createTile(String tileSpec) {
IQuickSettingsPlugin quickSettingsPlugin = PluginManager
.getQuickSettingsPlugin(mContext);
if (tileSpec.equals("wifi")) return new WifiTile(this);
else if (tileSpec.equals("bt")) return new BluetoothTile(this);
else if (tileSpec.equals("cell")) return new CellularTile(this);
.............
.............
else if (tileSpec.equals("location")) return new LocationTile(this);
//start: modify
else if (tileSpec.equals("flashlight") && SystemProperties.get("ro.mediatek_flashlight").equals("1")) return new FlashlightTile(this);
//END: modify
else if (tileSpec.equals("user")) return new UserTile(this);
else if (tileSpec.equals("battery")) return new BatteryTile(this);
..............
OK,这就是宏的定义和使用,不是很难,就介绍到这里