安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 移动安全 > 跟着API看anroid之Context——android.content.Context

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

时间:2021-01-21来源:未知 作者:安云网点击:
接触android开发后,许多东西都要百度查阅,后来发现有点零碎,掌握的不够系统,甚至有的东西很容易遗忘。所以才有了这篇博文,或许可以说这系列博文吧(后面会慢慢整理)。 适用者说明:系统了解Context,但又不想看英文
//内容来自安云网

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

适用者说明:系统了解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描述
StringACCESSIBILITY_SERVICE无障碍服务.获取 AccessibilityManager ,以注册事件侦听器向UI用户提供反馈
StringACCOUNT_SERVICE记账服务,获取 AccountManager ,以便在你选定的时机进行意图(Intent)处理
StringACTIVITY_SERVICE活动服务,获取 ActivityManager,以与全局系统状态进行交互。
StringALARM_SERVICE时钟服务,获取AlarmManager ,以便在你选定的时机进行意图(Intent)处理。类似ACCOUNT_SERVICE
StringAPPWIDGET_SERVICEapp小部件服务,获取AppWidgetManager ,用来对AppWidgets进行访问
StringAPP_OPS_SERVICEapp操作服务,获取AppOpsManager ,跟踪设备上应用程序的操作
StringAUDIO_SERVICE音频服务,获取AudioManager ,对音量、铃声、音频设置进行处理管理
StringBATTERY_SERVICE电池服务,获取BatteryManager ,以管理电池状态。【可参考下面电源服务PowerService
StringBLUETOOTH_SERVICE蓝牙服务,获取BluetoothManager,以使用蓝牙
StringCAMERA_SERVICE相机服务,获取CameraManager,以与相机设备进行交互
StringCAPTIONING_SERVICE字幕服务,获取CaptioningManager ,以获取字幕属性并侦听首选项的
StringCARRIER_CONFIG_SERVICE运营商配置服务,获取CarrierConfigManager,以获取运营商配置信息
StringCLIPBOARD_SERVICE剪切板服务,获取ClipboardManager,以访问和修改全局剪切板的内容
StringCONNECTIVITY_SERVICE网络连接服务,获取ConnectivityManager,以进行网络连接
StringCONSUMER_IR_SERVICE红外线服务,获取ConsumerIrManager ,从设备传输红外线信号
StringDEVICE_POLICY_SERVICE设备策略服务,获取DevicePolicyManager ,以使用全局设备策略管理
StringDISPLAY_SERVICE显示服务,获取DisplayManager,以与显示设备进行交互
String



String
DOWNLOAD_SERVICE

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

接上表

StringDROPBOX_SERVICE下拉框服务,获取DropBoxManager ,以记录诊断日志
StringFINGERPRINT_SERVICE指纹服务,获取FingerprintManager ,以处理指纹
StringHARDWARE_PROPERTIES_SERVICE硬件属性服务,获取HardwarePropertiesManager ,以获取硬件属性服务
StringINPUT_METHOD_SERVICE输入法服务,获取InputMethodManager,以访问输入法信息
StringINPUT_SERVICE输入服务,获取InputManager,与输入设备进行交互
StringJOB_SCHEDULER_SERVICE工作调度服务,获取JobScheduler ,以管理偶尔的后台任务
StringKEYGUARD_SERVICE键盘锁服务,获取NotificationManager ,以控制键盘锁
StringLAUNCHER_APPS_SERVICE加载app服务,获取LauncherApps ,跨用户的配置文件来查询和监控可启动的应用程序
StringLAYOUT_INFLATER_SERVICE布局扩充服务,获取LayoutInflater ,以扩充布局资源
StringLOCATION_SERVICE定位服务,获取LocationManager,以控制位置更新
StringMEDIA_PROJECTION_SERVICE媒体投影服务,获取MediaProjectionManager ,管理媒体投影的会话
StringMEDIA_ROUTER_SERVICE媒体路由服务,获取MediaRouter ,管理和控制媒体路由
StringMEDIA_SESSION_SERVICE媒体会话服务,获取MediaSessionManager,管理媒体会话
StringMIDI_SERVICE获取MidiManager ,以访问MIDI服务
StringNETWORK_STATS_SERVICE网络状态服务,获取NetworkStatsManager ,查询网络使用情况,并统计信息
StringNFC_SERVICENFC服务,获取NfcManager,以使用NFC(近距离无线通信技术)
StringNOTIFICATION_SERVICE通知服务,获取NotificationManager ,通知用户后台事件【键盘锁服务也获取NotificationManager 
StringNSD_SERVICENSD服务,获取NsdManager,处理网络服务发现的管理(网络服务发现)
StringPOWER_SERVICE电源服务,获取PowerManager,    控制电源管理,包括唤醒锁,在运行长时间服务保持设备开启
StringPRINT_SERVICE打印服务,PrintManager 打印和管理打印机及打印任务
StringRESTRICTIONS_SERVICE限制服务,获取RestrictionsManager ,检索应用程序受限的权限并请求受限操作的权限
StringSEARCH_SERVICE搜索服务,获取SearchManager,以处理搜索 
StringSENSOR_SERVICE传感器服务,获取SensorManager,以访问传感器
StringSTORAGE_SERVICE存储服务,获取StorageManager,以访问系统的存储功能
StringSYSTEM_HEALTH_SERVICE系统状态服务,获取SystemHealthManager,访问系统运行状况(电源、电池、内存等)
StringTELECOM_SERVICE电信服务,获取TelecomManager ,管理设备与电信相关的功能
StringTELEPHONY_SERVICE电话服务,获取TelephonyManager ,处理管理设备的电话功能
StringTELEPHONY_SUBSCRIPTION_SE电话订购服务,获取SubscriptionManager,处理管理设备的电话订购
StringTEXT_SERVICES_MANAGER_SE文本服务,获取TextServicesManager ,访问文本服务
StringTV_INPUT_SERVICE电视输入服务,获取TvInputManager ,与电视输入设备进行交互

跟着API看anroid之Context——android.content.Context怎么这么多的静态常量啊~~~~感慨之余也体会到Context类的基础性及重要性。继续,接上表


StringUI_MODE_SERVICEUI模式服务,获取UiModeManager ,控制UI模式
StringUSAGE_STATS_SERVICE使用情况统计服务,获取UsageStatsManager ,查询设备使用情况统计信息
StringUSB_SERVICEUSB服务,获取UsbManager,访问USB设备
StringUSER_SERVICE用户服务,获取UserManager ,管理支持多用户设备上的用户
StringVIBRATOR_SERVICE振动器服务,获取Vibrator ,与振动硬件进行交互
StringWALLPAPER_SERVICE壁纸服务,retrieve a com.android.server.WallpaperService for accessing wallpapers访问壁纸
StringWIFI_P2P_SERVICEWIFI点对点服务,获取WifiP2pManager ,处理WIFI对等连接的管理
StringWIFI_SERVICEWIFI服务,获取WifiManager,处理WIFI接入管理
StringWINDOW_SERVICEwindow窗口服务,获取WindowManager ,访问系统窗口管理器

以为均为服务类
getSystemService(class)   或  getSystemService(String name)  详见下面的方法介绍
intBIND_ABOVE_CLIENT绑定高于客户端,绑定该服务的客户端会认为该服务比应用程序本身重要
intBIND_ADJUST_WITH_ACTIVITY绑定调整的敏感性,允许活动根据是否对用户可见来调整目标服务的进程重要性
intBIND_ALLOW_OOM_MANAGEMENT绑定所有内存管理,允许绑定服务的进程进行正常的内存管理
intBIND_AUTO_CREATE绑定自动创建,只要绑定存在,可自动创建服务
intBIND_DEBUG_UNBIND绑定debug调用,绑定调试帮助以解决不匹配的调用
intBIND_EXTERNAL_SERVICE绑定外部服务,
intBIND_IMPORTANT绑定的服务对于客户来说非常重要,应该以客户端前台进程级别运用
intBIND_NOT_FOREGROUND不允许绑定的服务拥有前台运行进程的级别
intBIND_WAIVE_PRIORITY绑定的服务不影响主机进程的调度和内存管理优先级

以上均为绑定服务的设置bindService(Intent, ServiceConnection, int) 做为该方法的第三个参数,详见下面的方法介绍
intCONTEXT_IGNORE_SECURITY忽视安全,忽略被请求的Context的任何安全限制,允许它始终被加载。
intCONTEXT_INCLUDE_CODE包含代码,包含具有上下文的应用程序代码。
intCONTEXT_RESTRICTED受限,受限制的上下文可能禁用特定功能

以上均为创建context的设置createPackageContext(String,int) 做该方法的第二个参数,方法返回Context,详见下面方法介绍
intMODE_APPEND文件创建的模式,文件尾添加模式,不做擦出
intMODE_ENABLE_WRITE_AHEAD_LOGGINGDatabase打开方式的标志,数据库默认打开启用预写日志记录
intMODE_NO_LOCALIZED_COLLATORSDatabase打开方式的标志,打开数据库时不支持本地化的整理器。
intMODE_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();

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

跟着API看anroid之Context——android.content.Context总算告一段落了。

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

4、Context总结

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


本文标题: 跟着API看anroid之Context——android.content.Context 安云网
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容