接触android开发后,许多东西都要百度查阅,后来发现有点零碎,掌握的不够系统,甚至有的东西很容易遗忘。所以才有了这篇博文,或许可以说这系列博文吧(后面会慢慢整理)。
适用者说明:系统了解Context,但又不想看英文API的读者。如果想快速了解Context,这篇可能不适合,还是去百度其他的吧。
声明:本文主要参考API文档,及部分google翻译。
类位置:android.content.Context
类声明:public abstract class Context extends Object //直接继承java.lang.Object类
直接子类:ContextWrapper和MockContext
ContextWrapper:代理执行Context,将其所有调用简单地委托给另一个Context。许多间接子类继承自该类。
MockContext:一个模拟的上下文类。
间接子类:有众多,不一一列举,只提一个刚开始学android时比较重要的:Application类
类位置:android.app.Application
类声明:public class Application extends ContextWrapper implements ComponentCallbacks2
详见另一博文【跟着API看anroid之Application——android.app.Application】
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类的方法。
在开始之前,需要说明Context的所有方法存在一个特点,及全部都为abstract public方法,具体实现由子类来。为了加深理解,下面对函数的整理,不完全按照API的顺序来。
本节,将首先整理一下,在Context常量部分提到的几个函数。
final T getSystemService (Class serviceClass)
根据服务的类名,返回系统级服务的句柄。参数为“所需要服务的类别”,如常量中获取的那一些Manager类。
如:WindowManager.class.getName()//获得Class类型,作为参数。
PS: class.getName();//含包名 class.getSimpleName();//不含包名
Note:通过这个API获得的系统服务可能与它们从中获得的上下文密切相关。 一般来说,不要在各种不同的上下文(活动,应用程序,服务,提供者等)之间共享服务对象,
-----------------------------------------------------函数分割线--------------------------------------------------
-----------------------------------------------------函数分割线--------------------------------------------------
abstract boolean bindService (Intent service, ServiceConnection conn, int flags)
连接到应用程序服务,根据需要创建它。 这定义了您的应用程序和服务之间的依赖关系。 给定的conn在创建时会收到服务对象,并被告知它是否会死亡以及什么时候重新启动。 只要存在调用上下文,该服务就会被系统认为是必需的。 例如,如果此Context是一个已停止的Activity,则该服务将不需要继续运行,直到活动恢复。如果您没有绑定到给定服务的权限,则此函数将引发SecurityException。
参数说明:
Intent:标识要连接的服务。 Intent可以指定显式组件名称或逻辑描述(动作,类别等)以匹配由服务发布的IntentFilter
ServiceConnection:在服务启动和停止时接收信息。 这必须是有效的ServiceConnection对象; 它不能为空。
int:flag为上文介绍的Context常量,绑定的操作选项
返回值说明:如果您已成功绑定到该服务,则返回true; 如果未建立连接,则返回false,因此您将不会收到服务对象。
-----------------------------------------------------函数分割线--------------------------------------------------
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)
-----------------------------------------------------函数分割线--------------------------------------------------
创建Context的特征函数:根据不同条件返回当前上下文的一个新Context对象,如上面介绍的createPackageContext 函数
-----------------------------------------------------函数分割线--------------------------------------------------
abstract String[] databaseList();
abstract String[] fileList();
abstract boolean deleteDatabase(String name);
abstract deleteFile(String name);
数据库及文件相关的函数操作。
-----------------------------------------------------函数分割线--------------------------------------------------
-----------------------------------------------------函数分割线--------------------------------------------------
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
getSystemService(String name);
getSystemServiceName(Class
getText(int resId);
getTheme();
getWallpaper();
getWallpaperDesiredMinimumHeight();
getWallpaperDesiredMinimumWidth();
-----------------------------------------------------函数分割线--------------------------------------------------
总算告一段落了。
后面还有注册/注销广播接收器、发送广播、开启Activity、开启关闭Service等函数。
所谓总结,其实是对个人收获的总结,通过仔细看了一天的API,基本可以上掌握了Context类。许多常量、许多函数,对于刚开始进行android开发的我来说,已经有了了解,在实际中用到的话,可以快速查阅使用。make it.
最后,以此文纪念我的五一劳动节的第一天。
2018-4-29 22:10