跟着API看anroid之Context——android.content.Context

  • A+
所属分类:移动安全

接触android开发后,许多东西都要百度查阅,后来发现有点零碎,掌握的不够系统,甚至有的东西很容易遗忘。所以才有了这篇博文,或许可以说这系列博文吧(后面会慢慢整理)。

适用者说明:系统了解Context,但又不想看英文API的读者。如果想快速了解Context,这篇可能不适合,还是去百度其他的吧。

声明:本文主要参考API文档,及部分google翻译。

1、Context概述

类位置:android.content.Context 

类声明:public abstract class Context extends Object        //直接继承java.lang.Object类

直接子类:ContextWrapper和MockContext

跟着API看anroid之Context——android.content.Context

ContextWrapper:代理执行Context,将其所有调用简单地委托给另一个Context。许多间接子类继承自该类。

MockContext:一个模拟的上下文类。

间接子类:有众多,不一一列举,只提一个刚开始学android时比较重要的:Application类

        类位置:android.app.Application

        类声明:public class Application extends ContextWrapper implements ComponentCallbacks2

        详见另一博文【跟着API看anroid之Application——android.app.Application】

Context类说明:可以理解为一个接口(抽象类),它提供了有关应用程序的全局信息。从它继承或者从它的直接或间接子类继承,那么继承的子类就可以拿到应用程序的全局信息。全局信息指: 它允许访问特定于应用程序的资源和类,以及对诸如启动活动,广播和接收意图等应用程序级操作的上调

2、Context的常量

静态常量
类型 常量名 r描述
String ACCESSIBILITY_SERVICE 无障碍服务.获取 AccessibilityManager ,以注册事件侦听器向UI用户提供反馈
String ACCOUNT_SERVICE 记账服务,获取 AccountManager ,以便在你选定的时机进行意图(Intent)处理
String ACTIVITY_SERVICE 活动服务,获取 ActivityManager,以与全局系统状态进行交互。
String ALARM_SERVICE 时钟服务,获取AlarmManager ,以便在你选定的时机进行意图(Intent)处理。类似ACCOUNT_SERVICE
String APPWIDGET_SERVICE app小部件服务,获取AppWidgetManager ,用来对AppWidgets进行访问
String APP_OPS_SERVICE app操作服务,获取AppOpsManager ,跟踪设备上应用程序的操作
String AUDIO_SERVICE 音频服务,获取AudioManager ,对音量、铃声、音频设置进行处理管理
String BATTERY_SERVICE 电池服务,获取BatteryManager ,以管理电池状态。【可参考下面电源服务PowerService
String BLUETOOTH_SERVICE 蓝牙服务,获取BluetoothManager,以使用蓝牙
String CAMERA_SERVICE 相机服务,获取CameraManager,以与相机设备进行交互
String CAPTIONING_SERVICE 字幕服务,获取CaptioningManager ,以获取字幕属性并侦听首选项的
String CARRIER_CONFIG_SERVICE 运营商配置服务,获取CarrierConfigManager,以获取运营商配置信息
String CLIPBOARD_SERVICE 剪切板服务,获取ClipboardManager,以访问和修改全局剪切板的内容
String CONNECTIVITY_SERVICE 网络连接服务,获取ConnectivityManager,以进行网络连接
String CONSUMER_IR_SERVICE 红外线服务,获取ConsumerIrManager ,从设备传输红外线信号
String DEVICE_POLICY_SERVICE 设备策略服务,获取DevicePolicyManager ,以使用全局设备策略管理
String DISPLAY_SERVICE 显示服务,获取DisplayManager,以与显示设备进行交互
String


String
DOWNLOAD_SERVICE

下载服务,获取DownloadManager,以请求HTTP下载

接上表

String DROPBOX_SERVICE 下拉框服务,获取DropBoxManager ,以记录诊断日志
String FINGERPRINT_SERVICE 指纹服务,获取FingerprintManager ,以处理指纹
String HARDWARE_PROPERTIES_SERVICE 硬件属性服务,获取HardwarePropertiesManager ,以获取硬件属性服务
String INPUT_METHOD_SERVICE 输入法服务,获取InputMethodManager,以访问输入法信息
String INPUT_SERVICE 输入服务,获取InputManager,与输入设备进行交互
String JOB_SCHEDULER_SERVICE 工作调度服务,获取JobScheduler ,以管理偶尔的后台任务
String KEYGUARD_SERVICE 键盘锁服务,获取NotificationManager ,以控制键盘锁
String LAUNCHER_APPS_SERVICE 加载app服务,获取LauncherApps ,跨用户的配置文件来查询和监控可启动的应用程序
String LAYOUT_INFLATER_SERVICE 布局扩充服务,获取LayoutInflater ,以扩充布局资源
String LOCATION_SERVICE 定位服务,获取LocationManager,以控制位置更新
String MEDIA_PROJECTION_SERVICE 媒体投影服务,获取MediaProjectionManager ,管理媒体投影的会话
String MEDIA_ROUTER_SERVICE 媒体路由服务,获取MediaRouter ,管理和控制媒体路由
String MEDIA_SESSION_SERVICE 媒体会话服务,获取MediaSessionManager,管理媒体会话
String MIDI_SERVICE 获取MidiManager ,以访问MIDI服务
String NETWORK_STATS_SERVICE 网络状态服务,获取NetworkStatsManager ,查询网络使用情况,并统计信息
String NFC_SERVICE NFC服务,获取NfcManager,以使用NFC(近距离无线通信技术)
String NOTIFICATION_SERVICE 通知服务,获取NotificationManager ,通知用户后台事件【键盘锁服务也获取NotificationManager 
String NSD_SERVICE NSD服务,获取NsdManager,处理网络服务发现的管理(网络服务发现)
String POWER_SERVICE 电源服务,获取PowerManager,    控制电源管理,包括唤醒锁,在运行长时间服务保持设备开启
String PRINT_SERVICE 打印服务,PrintManager 打印和管理打印机及打印任务
String RESTRICTIONS_SERVICE 限制服务,获取RestrictionsManager ,检索应用程序受限的权限并请求受限操作的权限
String SEARCH_SERVICE 搜索服务,获取SearchManager,以处理搜索 
String SENSOR_SERVICE 传感器服务,获取SensorManager,以访问传感器
String STORAGE_SERVICE 存储服务,获取StorageManager,以访问系统的存储功能
String SYSTEM_HEALTH_SERVICE 系统状态服务,获取SystemHealthManager,访问系统运行状况(电源、电池、内存等)
String TELECOM_SERVICE 电信服务,获取TelecomManager ,管理设备与电信相关的功能
String TELEPHONY_SERVICE 电话服务,获取TelephonyManager ,处理管理设备的电话功能
String TELEPHONY_SUBSCRIPTION_SE 电话订购服务,获取SubscriptionManager,处理管理设备的电话订购
String TEXT_SERVICES_MANAGER_SE 文本服务,获取TextServicesManager ,访问文本服务
String TV_INPUT_SERVICE 电视输入服务,获取TvInputManager ,与电视输入设备进行交互

大哭怎么这么多的静态常量啊~~~~感慨之余也体会到Context类的基础性及重要性。继续,接上表

String UI_MODE_SERVICE UI模式服务,获取UiModeManager ,控制UI模式
String USAGE_STATS_SERVICE 使用情况统计服务,获取UsageStatsManager ,查询设备使用情况统计信息
String USB_SERVICE USB服务,获取UsbManager,访问USB设备
String USER_SERVICE 用户服务,获取UserManager ,管理支持多用户设备上的用户
String VIBRATOR_SERVICE 振动器服务,获取Vibrator ,与振动硬件进行交互
String WALLPAPER_SERVICE 壁纸服务,retrieve a com.android.server.WallpaperService for accessing wallpapers访问壁纸
String WIFI_P2P_SERVICE WIFI点对点服务,获取WifiP2pManager ,处理WIFI对等连接的管理
String WIFI_SERVICE WIFI服务,获取WifiManager,处理WIFI接入管理
String WINDOW_SERVICE window窗口服务,获取WindowManager ,访问系统窗口管理器
以为均为服务类
getSystemService(class)   或  getSystemService(String name)  详见下面的方法介绍
int BIND_ABOVE_CLIENT 绑定高于客户端,绑定该服务的客户端会认为该服务比应用程序本身重要
int BIND_ADJUST_WITH_ACTIVITY 绑定调整的敏感性,允许活动根据是否对用户可见来调整目标服务的进程重要性
int BIND_ALLOW_OOM_MANAGEMENT 绑定所有内存管理,允许绑定服务的进程进行正常的内存管理
int BIND_AUTO_CREATE 绑定自动创建,只要绑定存在,可自动创建服务
int BIND_DEBUG_UNBIND 绑定debug调用,绑定调试帮助以解决不匹配的调用
int BIND_EXTERNAL_SERVICE 绑定外部服务,
int BIND_IMPORTANT 绑定的服务对于客户来说非常重要,应该以客户端前台进程级别运用
int BIND_NOT_FOREGROUND 不允许绑定的服务拥有前台运行进程的级别
int BIND_WAIVE_PRIORITY 绑定的服务不影响主机进程的调度和内存管理优先级
以上均为绑定服务的设置 bindService(Intent, ServiceConnection, int) 做为该方法的第三个参数,详见下面的方法介绍
int CONTEXT_IGNORE_SECURITY 忽视安全,忽略被请求的Context的任何安全限制,允许它始终被加载。
int CONTEXT_INCLUDE_CODE 包含代码,包含具有上下文的应用程序代码。
int CONTEXT_RESTRICTED 受限,受限制的上下文可能禁用特定功能
以上均为创建context的设置 createPackageContext(String,int) 做该方法的第二个参数,方法返回Context,详见下面方法介绍
int MODE_APPEND 文件创建的模式,文件尾添加模式,不做擦出
int MODE_ENABLE_WRITE_AHEAD_LOGGING Database打开方式的标志,数据库默认打开启用预写日志记录
int MODE_NO_LOCALIZED_COLLATORS Database打开方式的标志,打开数据库时不支持本地化的整理器。
int MODE_PRIVATE 文件创建的模式,默认的模式,文件只用由创建的应用程序访问
以上均为与文件相关的设置标志 openFileOutput(String,int) 做第二个参数,返回FileOutputStream,详见下面方法介绍

至此Context的静态常量全部看完。根据Context类的说明,当想要拿到全局的信息时,可以通过寻找静态常量的方式得到。上面已经出现过几个方法了,下面,继续跟着API分析Context类的方法。

3、Context的抽象公有函数

在开始之前,需要说明Context的所有方法存在一个特点,及全部都为abstract public方法,具体实现由子类来。为了加深理解,下面对函数的整理,不完全按照API的顺序来。

3.1重点的几个函数

本节,将首先整理一下,在Context常量部分提到的几个函数。


  • final <T> T getSystemService (Class<T> serviceClass)

根据服务的类名,返回系统级服务的句柄。参数为“所需要服务的类别”,如常量中获取的那一些Manager类。

如:WindowManager.class.getName()//获得Class类型,作为参数。

PS:        class.getName();//含包名        class.getSimpleName();//不含包名

Note:通过这个API获得的系统服务可能与它们从中获得的上下文密切相关。 一般来说,不要在各种不同的上下文(活动,应用程序,服务,提供者等)之间共享服务对象,

-----------------------------------------------------函数分割线--------------------------------------------------


  • abstract Object getSystemService (String name)

方法的重载,功能一样,参数变为字符串,返回的对象变成基类Object。所以用时需要对返回值进行强制类型转换。可选的参数包含上文介绍的所有Context的String类型的常量。通过Context.WINDOW_SERVICE;类名点的方式使用。

-----------------------------------------------------函数分割线--------------------------------------------------


  • abstract boolean bindService (Intent service, ServiceConnection conn, int flags)

连接到应用程序服务,根据需要创建它。 这定义了您的应用程序和服务之间的依赖关系。 给定的conn在创建时会收到服务对象,并被告知它是否会死亡以及什么时候重新启动。 只要存在调用上下文,该服务就会被系统认为是必需的。 例如,如果此Context是一个已停止的Activity,则该服务将不需要继续运行,直到活动恢复。如果您没有绑定到给定服务的权限,则此函数将引发SecurityException

跟着API看anroid之Context——android.content.Context

参数说明:

        Intent:标识要连接的服务。 Intent可以指定显式组件名称或逻辑描述(动作,类别等)以匹配由服务发布的IntentFilter

        ServiceConnection:在服务启动和停止时接收信息。 这必须是有效的ServiceConnection对象; 它不能为空。

        int:flag为上文介绍的Context常量,绑定的操作选项

返回值说明:如果您已成功绑定到该服务,则返回true; 如果未建立连接,则返回false,因此您将不会收到服务对象。

-----------------------------------------------------函数分割线--------------------------------------------------


  • abstract Context createPackageContext String packageName, int flags)

为给定的应用程序名称返回一个新的Context对象。 此上下文与启动时的命名应用程序相同,其中包含相同的资源和类加载器。 每次调用此方法都会返回一个Context对象的新实例; 上下文对象不共享,但它们共享公共状态(Resources,ClassLoader等),因此Context实例本身相当轻量级。可能会抛   PackageManager.NameNotFoundException  和 SecurityException异常

参数说明:

        String packageName:应用的包名:通过context.getPackageName();函数来获取包名。

        int flags:为上文介绍的Context常量,Option flags, one of CONTEXT_INCLUDE_CODE or CONTEXT_IGNORE_SECURITY.

3.2API中的其他函数

下面的函数不具体展开说明,只是进行分类处理,因为不是只对API的翻译工作,而是通过读API加深对Context类的了解。


  • abstract int checkCalling*Permission(**)

check特征的函数:检查调用过程是不是已经被允许了(被授予了相应权限)。

返回值说明:如果被允许返回PERMISSION_GRANTED(许可授予);否则返回 PERMISSION_DENIED(没有权限)。该两个值为PackageManager类的常量,值分别为:0 (0x00000000)和 -1 (0xffffffff)

-----------------------------------------------------函数分割线--------------------------------------------------


  • abstract Context create**Context(**)

创建Context的特征函数:根据不同条件返回当前上下文的一个新Context对象,如上面介绍的createPackageContext 函数

-----------------------------------------------------函数分割线--------------------------------------------------


abstract String[] databaseList();

abstract String[] fileList();

abstract boolean deleteDatabase(String name);

abstract deleteFile(String name);

数据库及文件相关的函数操作。


-----------------------------------------------------函数分割线--------------------------------------------------


  • abstract void enforceCalling*Permission(**)

上 面是检查的功能,该函数为执行,对应起来很好理解。

-----------------------------------------------------函数分割线--------------------------------------------------

get类函数,为重点。详细列出

getApplicationContext();

getApplicationInfo();

getAssets();

getCacheDir();

getClassLoader();

getCodeCacheDir();

getColor(int id);

getColorStateList(int id);

getContentResolver();

getDataDir();

getDatabasePath(String name);

getDir(String name, int mode);

getDrawable(int id);

getExternalCacheDir();

getExternalCacheDirs();

getExternalFilesDir(String type);

getExternalFilesDirs(String type);

getExternalMediaDirs();

getFileStreamPath(String name);

getFilesDir();

getMainLooper();

getNoBackupFilesDir();

getObbDir();

getObbDirs();

getPackageCodePath();

getPackageManager();

getPackageName();

getPackageResourcePath();

getResources();

getSharedPreferences(String name, int mode);

getString(int resId, Object...formatArgs);//(int resId);

getSystemService(Class<T> serviceClass);

getSystemService(String name);

getSystemServiceName(Class<T> serviceClass);

getText(int resId);

getTheme();

getWallpaper();

getWallpaperDesiredMinimumHeight();

getWallpaperDesiredMinimumWidth();

-----------------------------------------------------函数分割线--------------------------------------------------

睡觉总算告一段落了。

后面还有注册/注销广播接收器、发送广播、开启Activity、开启关闭Service等函数。

4、Context总结

所谓总结,其实是对个人收获的总结,通过仔细看了一天的API,基本可以上掌握了Context类。许多常量、许多函数,对于刚开始进行android开发的我来说,已经有了了解,在实际中用到的话,可以快速查阅使用。make it

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: