学习记录:接口功能配置之 Settings及QuickSettings
来源:互联网 发布:淘宝 安能小包发货 编辑:程序博客网 时间:2024/06/09 22:14
1. SystemUI
android SystemUI包括StatusBar(状态栏)、NavigationBar(导航栏)、Quicksettings以及settings等。
StatusBar为桌面最上面的状态栏,显示时间,信号强度,是否静音,是否连接wifi等。
NavigationBar为手机最底端的返回键,home键等。
Quicksettings为手机顶端下拉菜单显示的WLAN,声音,信号等操作图标。
settings为手机的设定。
2. SystemFeature
systemFeature是系统特征,保存在手机system/etc/permissons/platfom.xml以及对应的...xml文件,指定系统是否具备某些特性。
/** * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's * audio pipeline is low-latency, more suitable for audio applications sensitive to delays or * lag in sound input or output. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device is capable of communicating with * other devices via Bluetooth. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device is capable of communicating with * other devices via Bluetooth Low Energy radio. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has a camera facing away * from the screen. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_CAMERA = "android.hardware.camera"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device's camera supports auto-focus. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has at least one camera pointing in * some direction. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device's camera supports flash. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has a front facing camera. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device is capable of communicating with * consumer IR devices. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports one or more methods of * reporting current location. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_LOCATION = "android.hardware.location"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has a Global Positioning System * receiver and can report precise location. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device can report location with coarse * accuracy using a network-based geolocation system. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device can record audio via a * microphone. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_MICROPHONE = "android.hardware.microphone"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device can communicate using Near-Field * Communications (NFC). */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_NFC = "android.hardware.nfc"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports host- * based NFC card emulation. * * TODO remove when depending apps have moved to new constant. * @hide * @deprecated */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_NFC_HCE = "android.hardware.nfc.hce"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports host- * based NFC card emulation. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes an accelerometer. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a barometer (air * pressure sensor.) */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a magnetometer (compass). */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a gyroscope. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a light sensor. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a proximity sensor. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a hardware step counter. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes a hardware step detector. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has a telephony radio with data * communication support. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEPHONY = "android.hardware.telephony"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has a CDMA telephony stack. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device has a GSM telephony stack. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports connecting to USB devices * as the USB host. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_USB_HOST = "android.hardware.usb.host"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports connecting to USB accessories. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The SIP API is enabled on the device. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SIP = "android.software.sip"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports SIP-based VOIP. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SIP_VOIP = "android.software.sip.voip"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device's display has a touch screen. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device's touch screen supports * multitouch sufficient for basic two-finger gesture detection. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device's touch screen is capable of * tracking two or more fingers fully independently. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device's touch screen is capable of * tracking a full hand of fingers fully independently -- that is, 5 or * more simultaneous independent pointers. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device does not have a touch screen, but * does support touch emulation for basic events. For instance, the * device might use a mouse or remote control to drive a cursor, and * emulate basic touch pointer events like down, up, drag, etc. All * devices that support android.hardware.touchscreen or a sub-feature are * presumed to also support faketouch. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device does not have a touch screen, but * does support touch emulation for basic events that supports distinct * tracking of two or more fingers. This is an extension of * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note * that unlike a distinct multitouch screen as defined by * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT}, these kinds of input * devices will not actually provide full two-finger gestures since the * input is being transformed to cursor movement on the screen. That is, * single finger gestures will move a cursor; two-finger swipes will * result in single-finger touch events; other two-finger gestures will * result in the corresponding two-finger touch event. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device does not have a touch screen, but * does support touch emulation for basic events that supports tracking * a hand of fingers (5 or more fingers) fully independently. * This is an extension of * {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note * that unlike a multitouch screen as defined by * {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND}, not all two finger * gestures can be detected due to the limitations described for * {@link #FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT}. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports portrait orientation * screens. For backwards compatibility, you can assume that if neither * this nor {@link #FEATURE_SCREEN_LANDSCAPE} is set then the device supports * both portrait and landscape. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports landscape orientation * screens. For backwards compatibility, you can assume that if neither * this nor {@link #FEATURE_SCREEN_PORTRAIT} is set then the device supports * both portrait and landscape. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports live wallpapers. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports app widgets. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports a home screen that is replaceable * by third party applications. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_HOME_SCREEN = "android.software.home_screen"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports adding new input methods implemented * with the {@link android.inputmethodservice.InputMethodService} API. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_INPUT_METHODS = "android.software.input_methods"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports device policy enforcement via device admins. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports WiFi (802.11) networking. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_WIFI = "android.hardware.wifi"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports Wi-Fi Direct networking. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct"; /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: This is a device dedicated to showing UI * on a television. Television here is defined to be a typical living * room television experience: displayed on a big screen, where the user * is sitting far away from it, and the dominant form of input will be * something like a DPAD, not through touch or mouse. */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEVISION = "android.hardware.type.television";
在\frameworks\base\core\java\android\content\pm\PackageManager的hasSystemFeature(name)方法用来查询系统是否具备某特性。
/** * Check whether the given feature name is one of the available * features as returned by {@link #getSystemAvailableFeatures()}. * * @return Returns true if the devices supports the feature, else * false. */ public abstract boolean hasSystemFeature(String name);
而这个方法实际上调用到文件frameworks\base\services\Java\com\android\server\pm\PackageManagerService.java 的方法:
public boolean hasSystemFeature(String name) { synchronized (mPackages) { return mAvailableFeatures.containsKey(name); } }
3. UserRestriction
UserRestiction是多用户模式下对用户权限的限制,虽然android4.4支持多用户模式,但手机终端并没有开放这项功能,在android5.0之后才开放,好像是因为专利的问题。但基于系统的开发,是可以调用这项功能的。
源代码主要位于\frameworks\base\core\java\android\os\UserManager.java
/** * Key for user restrictions. Specifies if a user is disallowed from adding and removing * accounts. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts"; /** * Key for user restrictions. Specifies if a user is disallowed from changing Wi-Fi * access points. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_CONFIG_WIFI = "no_config_wifi"; /** * Key for user restrictions. Specifies if a user is disallowed from installing applications. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_INSTALL_APPS = "no_install_apps"; /** * Key for user restrictions. Specifies if a user is disallowed from uninstalling applications. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps"; /** * Key for user restrictions. Specifies if a user is disallowed from toggling location sharing. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_SHARE_LOCATION = "no_share_location"; /** * Key for user restrictions. Specifies if a user is disallowed from enabling the * "Unknown Sources" setting, that allows installation of apps from unknown sources. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources"; /** * Key for user restrictions. Specifies if a user is disallowed from configuring bluetooth. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth"; /** * Key for user restrictions. Specifies if a user is disallowed from transferring files over * USB. The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer"; /** * Key for user restrictions. Specifies if a user is disallowed from configuring user * credentials. The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials"; /** * Key for user restrictions. Specifies if a user is disallowed from removing users. * The default value is <code>false</code>. * <p/> * Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() */ public static final String DISALLOW_REMOVE_USER = "no_remove_user";上述罗列的是android4.4.4_r1,在android5.0中Restriction项会丰富很多。
UserRestriction的判定由 UserManager.java文件的下述方法:
/** * Returns the user-wide restrictions imposed on the user specified by <code>userHandle</code>. * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. * @return a Bundle containing all the restrictions. */ public Bundle getUserRestrictions(UserHandle userHandle) { try { return mService.getUserRestrictions(userHandle.getIdentifier()); } catch (RemoteException re) { Log.w(TAG, "Could not get user restrictions", re); return Bundle.EMPTY; } }
4 QuickSettings修改
依据接口功能配置,隐藏部分接口给用户,因此需要修改QuickSettings以及Settings部分UI代码。
QuickSettings的配置项加载是调用\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QuickSettingsControllers.java loadTiles()方法,加入判断SystemFeature或者UserRestriction来判断是否加载某配置项。
另外,android为用户提供了配置QuickSettings项的界面,可增删配置项。
在\leadcore\third-pkages\apps\Settings\src\com\android\settings\quickSettings\QuickSettingsUtil.java的registerTile()方法,加入判断SystemFeature或者UserRestriction来判断是否加载某配置项。
5.Settings的修改
在\leadcore\third-pkages\apps\Settings\src\com\android\settings\Settings.java的updateHeaderList()方法,加判断SystemFeature或者UserRestriction来判断是否加载某配置项。
- 学习记录:接口功能配置之 Settings及QuickSettings
- 学习记录:系统接口功能配置及应用权限管理
- maven学习-settings配置
- android Settings之辅助功能
- Maven配置之settings.xml
- Maven配置之settings.xml
- mybatis基本配置之settings
- 深度学习之Windows下安装caffe及配置Python和matlab接口
- 深度学习之Windows下安装caffe及配置Python和matlab接口
- maven学习九之pom.xml或settings.xml对nexus的配置
- maven 配置篇 之 settings.xml
- Maven 配置篇 之 settings.xml
- maven 配置篇 之 settings.xml
- maven 配置篇 之 settings.xml
- maven 配置篇 之 settings.xml
- maven 配置篇 之 settings.xml
- maven 配置篇 之 settings.xml
- maven 配置篇 之 settings.xml
- git查看远程仓库信息
- Playgrounds配件Parrot Education的深入发掘(一)
- LeetCode_linked-list-cycle-ii
- mysql语法
- 二分搜索——在有序数组中找到目标函数出来的最左端的位置
- 学习记录:接口功能配置之 Settings及QuickSettings
- POJ 1269 Intersecting Lines(直线相交判断,求交点)
- 111. Minimum Depth of Binary Tree
- Dubbo源码阅读之 客户端远程调用
- webpack
- 多数据速率变换中的插值和抽取
- hibernate主键生成策略---【小白系列】0基础到熟练应用hibernate框架(七)
- linux学习笔记之SSH协议与远程登录工具
- spark源码之Job执行(2)任务调度taskscheduler