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

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

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

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

1、Context概述

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


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 ,与电视输入设备进行交互

大哭怎么这么多的静态常量啊~~~~感慨之余也体会到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


参数说明:

        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.吐舌头


最后,以此文纪念我的五一劳动节的第一天。

2018-4-29 22:10




  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: android.content.SharedPreferences是Android中的一个API,用于为应用程序存储和读取键值对形式的数据。它提供了一种轻量级的数据存储方式,适用于存储一些简单的配置信息或用户偏好设置。 android.content.Context.getSharedPreferences()是一个Context类中的方法,用于获取一个SharedPreferences对象。ContextAndroid中很重要的一个类,代表当前应用程序的运行环境。通过Context的getSharedPreferences()方法,我们可以获取到应用程序的默认SharedPreferences,也可以通过指定名称获取到不同的SharedPreferences。 使用SharedPreferences可以方便地进行数据的存储和读取操作。它通过键值对的方式存储数据,其中键是一个唯一标识,值可以是各种基本类型的数据,如字符串、整数、布尔值等。可以通过调用SharedPreferences的edit()方法获取到一个SharedPreferences.Editor对象,通过这个Editor对象可以进行数据的写入操作。可以使用putXXX()方法将数据存储到SharedPreferences中,并通过commit()方法将修改提交保存。另外,还可以通过SharedPreferences的getXXX()方法读取已经存储的数据。 SharedPreferences适用于存储一些简单的配置信息或用户偏好设置,其存储方式是以XML文件的形式保存在应用程序的/data/data/<package name>/shared_prefs/目录下。可以通过SharedPreferences的getDefaultSharedPreferences()方法获取默认的SharedPreferences对象,它的名称是根据应用程序的包名来自动生成的。 使用SharedPreferences可以方便地进行数据的读写操作,特别适合用于存储一些简单的应用配置或用户设置。但是对于需要存储大量复杂数据结构的情况,或者需要频繁读写数据的场景,可能不太适合使用SharedPreferences,可以考虑使用其他更合适的数据存储方式,如数据库。 ### 回答2: android.content.SharedPreferences和android.content.Context.getSharedPreferences都是Android中用于实现数据持久化的工具类和方法。 android.content.SharedPreferences是一个接口,用于存储简单键值对数据。它提供了一种轻量级的存储方式,可以非常方便地存储和读取数据。SharedPreferences可以实现应用程序的配置信息存储,用户偏好设置的存储等功能。它的底层实现是基于XML文件的,数据存储在应用程序的沙盒目录中。 android.content.Context.getSharedPreferences是Context类的一个方法,用于获取SharedPreferences对象。Context是一个Android中的核心类,代表了应用程序的环境信息。在Android应用程序的各个组件中都可以通过Context对象获取应用程序的资源、启动新的组件、发送广播等等。通过Context.getSharedPreferences方法,我们可以获取一个SharedPreferences对象,并利用这个对象进行数据的存储和读取。 总结起来,android.content.SharedPreferences和android.content.Context.getSharedPreferences都是用于实现数据持久化的工具。SharedPreferences是数据存储的接口,它提供了简单的存储方式,可以存储键值对数据;而Context.getSharedPreferences是获取SharedPreferences对象的方法,通过Context类的实例获取SharedPreferences对象,方便进行数据的存储和读取。这两个工具的使用可以帮助开发者实现应用程序的配置数据存储、用户偏好设置的存储等功能。 ### 回答3: android.content.SharedPreferences是Android平台上用于存储和读取轻量级的键值对数据的类。它是一种基于XML文件的存储机制,可用于存储应用程序的相关配置信息、用户偏好设置等。 首先,我们需要获取SharedPreferences对象,这可以通过调用Context类的getSharedPreferences方法来实现。这个方法需要传入两个参数,一个是存储文件的名称,另一个是操作模式。 getSharedPreferences方法返回一个SharedPreferences对象,我们可以通过这个对象进行数据的读取和写入。其中,存储文件的名称是一个用于标识数据的关键词,它对应着一个XML文件,用来存储键值对数据。操作模式有多种选项,如MODE_PRIVATE、MODE_MULTI_PROCESS等,用于指定多个应用程序共享数据的方式。 一旦我们获取到了SharedPreferences对象,就可以通过它的edit方法获取一个Editor对象,从而可以进行数据的编辑操作。Editor对象提供了一系列的方法,如putBoolean、putInt、putString等,用于向SharedPreferences中写入数据。 另外,在读取数据时,我们可以通过SharedPreferences对象的getBoolean、getInt、getString等方法获取存储的数据。 总之,SharedPreferences提供了一个简单而方便的存储数据的方式,适用于各种应用场景。不过需要注意的是,SharedPreferences适合存储少量的简单数据,对于大量数据的存储,建议使用其他的存储方式,如数据库。 通过android.content.SharedPreferences和android.content.Context.getSharedPreferences方法,我们可以实现方便的存储和读取数据的功能,从而更好地满足应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值