Context

转载:http://blog.csdn.net/guolin_blog/article/details/47028975


前几篇文章,我也是费劲心思写了一个ListView系列的三部曲,虽然在内容上可以说是绝对的精华,但是很多朋友都表示看不懂。好吧,这个系列不仅是把大家给难倒了,也确实是把我给难倒了,之前为了写瀑布流ListView的Demo就写了大半个月的时间。那么本篇文章我们就讲点轻松的东西,不去分析那么复杂的源码了,而是来谈一谈大家都熟知的Context。


Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了。但是这并不代表Context没有什么东西好讲的,实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学习一下那些你所不知道的细节。


Context类型


我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是我们这里讨论的Context。可以这样讲,Context是维持Android程序中各组件能够正常工作的一个核心功能类。


下面我们来看一下Context的继承结构:


Context的继承结构还是稍微有点复杂的,可以看到,直系子类有两个,一个是ContextWrapper,一个是ContextImpl。那么从名字上就可以看出,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能的实现类。而ContextWrapper又有三个直接的子类,ContextThemeWrapper、Service和Application。其中,ContextThemeWrapper是一个带主题的封装类,而它有一个直接子类就是Activity。


那么在这里我们至少看到了几个所比较熟悉的面孔,Activity、Service、还有Application。由此,其实我们就已经可以得出结论了,Context一共有三种类型,分别是Application、Activity和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。


那么Context到底可以实现哪些功能呢?这个就实在是太多了,弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等等等都需要用到Context。由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。


Context数量


那么一个应用程序中到底有多少个Context呢?其实根据上面的Context类型我们就已经可以得出答案了。Context一共有Application、Activity和Service三种类型,因此一个应用程序中Context数量的计算公式就可以这样写:

[plain]  view plain  copy
  1. Context数量 = Activity数量 + Service数量 + 1  

上面的1代表着Application的数量,因为一个应用程序中可以有多个Activity和多个Service,但是只能有一个Application。


Application Context的设计


基本上每一个应用程序都会有一个自己的Application,并让它继承自系统的Application类,然后在自己的Application类中去封装一些通用的操作。其实这并不是Google所推荐的一种做法,因为这样我们只是把Application当成了一个通用工具类来使用的,而实际上使用一个简单的单例类也可以实现同样的功能。但是根据我的观察,有太多的项目都是这样使用Application的。当然这种做法也并没有什么副作用,只是说明还是有不少人对于Application理解的还有些欠缺。那么这里我们先来对Application的设计进行分析,讲一些大家所不知道的细节,然后再看一下平时使用Application的问题。


首先新建一个MyApplication并让它继承自Application,然后在AndroidManifest.xml文件中对MyApplication进行指定,如下所示:

[html]  view plain  copy
  1. <application  
  2.     android:name=".MyApplication"  
  3.     android:allowBackup="true"  
  4.     android:icon="@drawable/ic_launcher"  
  5.     android:label="@string/app_name"  
  6.     android:theme="@style/AppTheme" >  
  7.     ......  
  8. </application>  
指定完成后,当我们的程序启动时Android系统就会创建一个MyApplication的实例,如果这里不指定的话就会默认创建一个Application的实例。


前面提到过,现在很多的Application都是被当作通用工具类来使用的,那么既然作为一个通用工具类,我们要怎样才能获取到它的实例呢?如下所示:

[java]  view plain  copy
  1. public class MainActivity extends Activity {  
  2.       
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.         MyApplication myApp = (MyApplication) getApplication();  
  8.         Log.d("TAG""getApplication is " + myApp);  
  9.     }  
  10.       
  11. }  

可以看到,代码很简单,只需要调用getApplication()方法就能拿到我们自定义的Application的实例了,打印结果如下所示:



那么除了getApplication()方法,其实还有一个getApplicationContext()方法,这两个方法看上去好像有点关联,那么它们的区别是什么呢?我们将代码修改一下:

[java]  view plain  copy
  1. public class MainActivity extends Activity {  
  2.       
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.         MyApplication myApp = (MyApplication) getApplication();  
  8.         Log.d("TAG""getApplication is " + myApp);  
  9.         Context appContext = getApplicationContext();  
  10.         Log.d("TAG""getApplicationContext is " + appContext);  
  11.     }  
  12.       
  13. }  

同样,我们把getApplicationContext()的结果打印了出来,现在重新运行代码,结果如下图所示:




咦?好像打印出的结果是一样的呀,连后面的内存地址都是相同的,看来它们是同一个对象。其实这个结果也很好理解,因为前面已经说过了,Application本身就是一个Context,所以这里获取getApplicationContext()得到的结果就是MyApplication本身的实例。


那么有的朋友可能就会问了,既然这两个方法得到的结果都是相同的,那么Android为什么要提供两个功能重复的方法呢?实际上这两个方法在作用域上有比较大的区别。getApplication()方法的语义性非常强,一看就知道是用来获取Application实例的,但是这个方法只有在Activity和Service中才能调用的到。那么也许在绝大多数情况下我们都是在Activity或者Service中使用Application的,但是如果在一些其它的场景,比如BroadcastReceiver中也想获得Application的实例,这时就可以借助getApplicationContext()方法了,如下所示:

[java]  view plain  copy
  1. public class MyReceiver extends BroadcastReceiver {  
  2.   
  3.     @Override  
  4.     public void onReceive(Context context, Intent intent) {  
  5.         MyApplication myApp = (MyApplication) context.getApplicationContext();  
  6.         Log.d("TAG""myApp is " + myApp);  
  7.     }  
  8.   
  9. }  

也就是说,getApplicationContext()方法的作用域会更广一些,任何一个Context的实例,只要调用getApplicationContext()方法都可以拿到我们的Application对象。

那么更加细心的朋友会发现,除了这两个方法之外,其实还有一个getBaseContext()方法,这个baseContext又是什么东西呢?我们还是通过打印的方式来验证一下:




哦?这次得到的是不同的对象了,getBaseContext()方法得到的是一个ContextImpl对象。这个ContextImpl是不是感觉有点似曾相识?回去看一下Context的继承结构图吧,ContextImpl正是上下文功能的实现类。也就是说像Application、Activity这样的类其实并不会去具体实现Context的功能,而仅仅是做了一层接口封装而已,Context的具体功能都是由ContextImpl类去完成的。那么这样的设计到底是怎么实现的呢?我们还是来看一下源码吧。因为Application、Activity、Service都是直接或间接继承自ContextWrapper的,我们就直接看ContextWrapper的源码,如下所示:

[java]  view plain  copy
  1. /** 
  2.  * Proxying implementation of Context that simply delegates all of its calls to 
  3.  * another Context.  Can be subclassed to modify behavior without changing 
  4.  * the original Context. 
  5.  */  
  6. public class ContextWrapper extends Context {  
  7.     Context mBase;  
  8.       
  9.     /** 
  10.      * Set the base context for this ContextWrapper.  All calls will then be 
  11.      * delegated to the base context.  Throws 
  12.      * IllegalStateException if a base context has already been set. 
  13.      *  
  14.      * @param base The new base context for this wrapper. 
  15.      */  
  16.     protected void attachBaseContext(Context base) {  
  17.         if (mBase != null) {  
  18.             throw new IllegalStateException("Base context already set");  
  19.         }  
  20.         mBase = base;  
  21.     }  
  22.   
  23.     /** 
  24.      * @return the base context as set by the constructor or setBaseContext 
  25.      */  
  26.     public Context getBaseContext() {  
  27.         return mBase;  
  28.     }  
  29.   
  30.     @Override  
  31.     public AssetManager getAssets() {  
  32.         return mBase.getAssets();  
  33.     }  
  34.   
  35.     @Override  
  36.     public Resources getResources() {  
  37.         return mBase.getResources();  
  38.     }  
  39.   
  40.     @Override  
  41.     public ContentResolver getContentResolver() {  
  42.         return mBase.getContentResolver();  
  43.     }  
  44.   
  45.     @Override  
  46.     public Looper getMainLooper() {  
  47.         return mBase.getMainLooper();  
  48.     }  
  49.       
  50.     @Override  
  51.     public Context getApplicationContext() {  
  52.         return mBase.getApplicationContext();  
  53.     }  
  54.   
  55.     @Override  
  56.     public String getPackageName() {  
  57.         return mBase.getPackageName();  
  58.     }  
  59.   
  60.     @Override  
  61.     public void startActivity(Intent intent) {  
  62.         mBase.startActivity(intent);  
  63.     }  
  64.       
  65.     @Override  
  66.     public void sendBroadcast(Intent intent) {  
  67.         mBase.sendBroadcast(intent);  
  68.     }  
  69.   
  70.     @Override  
  71.     public Intent registerReceiver(  
  72.         BroadcastReceiver receiver, IntentFilter filter) {  
  73.         return mBase.registerReceiver(receiver, filter);  
  74.     }  
  75.   
  76.     @Override  
  77.     public void unregisterReceiver(BroadcastReceiver receiver) {  
  78.         mBase.unregisterReceiver(receiver);  
  79.     }  
  80.   
  81.     @Override  
  82.     public ComponentName startService(Intent service) {  
  83.         return mBase.startService(service);  
  84.     }  
  85.   
  86.     @Override  
  87.     public boolean stopService(Intent name) {  
  88.         return mBase.stopService(name);  
  89.     }  
  90.   
  91.     @Override  
  92.     public boolean bindService(Intent service, ServiceConnection conn,  
  93.             int flags) {  
  94.         return mBase.bindService(service, conn, flags);  
  95.     }  
  96.   
  97.     @Override  
  98.     public void unbindService(ServiceConnection conn) {  
  99.         mBase.unbindService(conn);  
  100.     }  
  101.   
  102.     @Override  
  103.     public Object getSystemService(String name) {  
  104.         return mBase.getSystemService(name);  
  105.     }  
  106.   
  107.     ......  
  108. }  

由于ContextWrapper中的方法还是非常多的,我就进行了一些筛选,只贴出来了部分方法。那么上面的这些方法相信大家都是非常熟悉的,getResources()、getPackageName()、getSystemService()等等都是我们经常要用到的方法。那么所有这些方法的实现又是什么样的呢?其实所有ContextWrapper中方法的实现都非常统一,就是调用了mBase对象中对应当前方法名的方法。


那么这个mBase对象又是什么呢?我们来看第16行的attachBaseContext()方法,这个方法中传入了一个base参数,并把这个参数赋值给了mBase对象。而attachBaseContext()方法其实是由系统来调用的,它会把ContextImpl对象作为参数传递到attachBaseContext()方法当中,从而赋值给mBase对象,之后ContextWrapper中的所有方法其实都是通过这种委托的机制交由ContextImpl去具体实现的,所以说ContextImpl是上下文功能的实现类是非常准确的。


那么另外再看一下我们刚刚打印的getBaseContext()方法,在第26行。这个方法只有一行代码,就是返回了mBase对象而已,而mBase对象其实就是ContextImpl对象,因此刚才的打印结果也得到了印证。


使用Application的问题


虽说Application的用法确实非常简单,但是我们平时的开发工作当中也着实存在着不少Application误用的场景,那么今天就来看一看有哪些比较容易犯错的地方是我们应该注意的。


Application是Context的其中一种类型,那么是否就意味着,只要是Application的实例,就能随时使用Context的各种方法呢?我们来做个实验试一下就知道了:

[java]  view plain  copy
  1. public class MyApplication extends Application {  
  2.       
  3.     public MyApplication() {  
  4.         String packageName = getPackageName();  
  5.         Log.d("TAG""package name is " + packageName);  
  6.     }  
  7.       
  8. }  

这是一个非常简单的自定义Application,我们在MyApplication的构造方法当中获取了当前应用程序的包名,并打印出来。获取包名使用了getPackageName()方法,这个方法就是由Context提供的。那么上面的代码能正常运行吗?跑一下就知道了,你将会看到如下所示的结果:




应用程序一启动就立刻崩溃了,报的是一个空指针异常。看起来好像挺简单的一段代码,怎么就会成空指针了呢?但是如果你尝试把代码改成下面的写法,就会发现一切正常了:

[java]  view plain  copy
  1. public class MyApplication extends Application {  
  2.       
  3.     @Override  
  4.     public void onCreate() {  
  5.         super.onCreate();  
  6.         String packageName = getPackageName();  
  7.         Log.d("TAG""package name is " + packageName);  
  8.     }  
  9.       
  10. }  

运行结果如下所示:




在构造方法中调用Context的方法就会崩溃,在onCreate()方法中调用Context的方法就一切正常,那么这两个方法之间到底发生了什么事情呢?我们重新回顾一下ContextWrapper类的源码,ContextWrapper中有一个attachBaseContext()方法,这个方法会将传入的一个Context参数赋值给mBase对象,之后mBase对象就有值了。而我们又知道,所有Context的方法都是调用这个mBase对象的同名方法,那么也就是说如果在mBase对象还没赋值的情况下就去调用Context中的任何一个方法时,就会出现空指针异常,上面的代码就是这种情况。Application中方法的执行顺序如下图所示:




Application中在onCreate()方法里去初始化各种全局的变量数据是一种比较推荐的做法,但是如果你想把初始化的时间点提前到极致,也可以去重写attachBaseContext()方法,如下所示:

[java]  view plain  copy
  1. public class MyApplication extends Application {  
  2.       
  3.     @Override  
  4.     protected void attachBaseContext(Context base) {  
  5.         // 在这里调用Context的方法会崩溃  
  6.         super.attachBaseContext(base);  
  7.         // 在这里可以正常调用Context的方法  
  8.     }  
  9.       
  10. }  

以上是我们平时在使用Application时需要注意的一个点,下面再来介绍另外一种非常普遍的Application误用情况。


其实Android官方并不太推荐我们使用自定义的Application,基本上只有需要做一些全局初始化的时候可能才需要用到自定义Application,官方文档描述如下:


但是就我的观察而言,现在自定义Application的使用情况基本上可以达到100%了,也就是我们平时自己写测试demo的时候可能不会使用,正式的项目几乎全部都会使用自定义Application。可是使用归使用,有不少项目对自定义Application的用法并不到位,正如官方文档中所表述的一样,多数项目只是把自定义Application当成了一个通用工具类,而这个功能并不需要借助Application来实现,使用单例可能是一种更加标准的方式。


不过自定义Application也并没有什么副作用,它和单例模式二选一都可以实现同样的功能,但是我见过有一些项目,会把自定义Application和单例模式混合到一起使用,这就让人大跌眼镜了。一个非常典型的例子如下所示:

[java]  view plain  copy
  1. public class MyApplication extends Application {  
  2.       
  3.     private static MyApplication app;  
  4.       
  5.     public static MyApplication getInstance() {  
  6.         if (app == null) {  
  7.             app = new MyApplication();  
  8.         }  
  9.         return app;  
  10.     }  
  11.       
  12. }  

就像单例模式一样,这里提供了一个getInstance()方法,用于获取MyApplication的实例,有了这个实例之后,就可以调用MyApplication中的各种工具方法了。


但是这种写法对吗?这种写法是大错特错!因为我们知道Application是属于系统组件,系统组件的实例是要由系统来去创建的,如果这里我们自己去new一个MyApplication的实例,它就只是一个普通的Java对象而已,而不具备任何Context的能力。有很多人向我反馈使用 LitePal 时发生了空指针错误其实都是由于这个原因,因为你提供给LitePal的只是一个普通的Java对象,它无法通过这个对象来进行Context操作。


那么如果真的想要提供一个获取MyApplication实例的方法,比较标准的写法又是什么样的呢?其实这里我们只需谨记一点,Application全局只有一个,它本身就已经是单例了,无需再用单例模式去为它做多重实例保护了,代码如下所示:

[java]  view plain  copy
  1. public class MyApplication extends Application {  
  2.       
  3.     private static MyApplication app;  
  4.       
  5.     public static MyApplication getInstance() {  
  6.         return app;  
  7.     }  
  8.       
  9.     @Override  
  10.     public void onCreate() {  
  11.         super.onCreate();  
  12.         app = this;  
  13.     }  
  14.       
  15. }  

getInstance()方法可以照常提供,但是里面不要做任何逻辑判断,直接返回app对象就可以了,而app对象又是什么呢?在onCreate()方法中我们将app对象赋值成this,this就是当前Application的实例,那么app也就是当前Application的实例了。




------------------------------------------Context方法----------------------------------------------



API级别1中添加
公共课

ContextWrapper

扩展 上下文
java.lang.Object
   ↳ android.content.Context
     ↳ android.content.ContextWrapper
已知的直接子类
已知的间接子类

班级概况


代理实现Context,将其所有调用简单地委派给另一个Context。可以被子类化以修改行为而不改变原始上下文。

概要


[扩大]
继承常量
从类 android.content.Context
公共建设者
ContextWrapper  Context  base)
公共方法
布尔值 bindService  Intent  service,  ServiceConnection  conn,int flags)
连接到应用程序服务,如果需要创建它。
int checkCallingOrSelfPermission  String  permission)
确定是否一个IPC的调用过程 ,或者您 已被授予特定权限。
int checkCallingOrSelfUriPermission  Uri  uri,int modeFlags)
确定是否一个IPC的调用过程 ,或者你 已经获准访问特定URI。
int checkCallingPermission  String  permission)
确定您正在处理的IPC的调用进程是否已获得特定权限。
int checkCallingUriPermission  Uri  uri,int modeFlags)
确定呼叫进程和用户ID是否被授予访问特定URI的权限。
int checkPermission  String 权限,int pid,int uid)
确定在系统中运行的特定进程和用户ID是否允许给定的权限。
int checkUriPermission  Uri  uri,int pid,int uid,int modeFlags)
确定特定进程和用户标识是否已被授予访问特定URI的权限。
int checkUriPermission  Uri  uri,  String  readPermission,  String  writePermission,int pid,int uid,int modeFlags)
检查Uri和正常许可。
void clearWallpaper ()
此方法已弃用。WallpaperManager.clear()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

背景 createConfigurationContext 配置  overrideConfiguration)
为当前上下文返回一个新的Context对象,但其资源被调整以匹配给定的配置。
背景 createDisplayContext 显示 显示)
为当前上下文返回一个新的Context对象,并调整其资源以匹配给定Display的指标。
背景 createPackageContext  String  packageName,int flags)
为给定的应用程序名称返回一个新的Context对象。
串[] databaseList ()
返回与该Context的应用程序包相关联的私有数据库的字符串数组。
布尔值 deleteDatabase  String  name)
删除与此Context的应用程序包关联的现有私有SQLiteDatabase。
布尔值 deleteFile  String  name)
删除与该Context的应用程序包相关联的给定私有文件。
void enforceCallingOrSelfPermission 字符串 权限, 字符串 消息)
如果您和您正在处理的IPC的调用进程都不被授予特定权限,则抛出一个  SecurityException
void enforceCallingOrSelfUriPermission  Uri  uri,int modeFlags,  String  message)
如果IPC的调用过程 或者您 没有被授予访问特定URI的权限,则抛出 SecurityException
void enforceCallingPermission  String 权限,  String 消息)
如果您正在处理的IPC的调用进程尚未被授予特定权限,则抛出一个 SecurityException
void enforceCallingUriPermission  Uri  uri,int modeFlags,  String  message)
如果调用进程和用户标识未被授予访问特定URI的权限,则抛出 SecurityException
void enforcePermission  String 权限,int pid,int uid,  String 消息)
如果在系统中运行的特定进程和用户ID不允许给定的权限,则抛出一个 SecurityException
void enforceUriPermission  Uri  uri,int pid,int uid,int modeFlags,  String  message)
如果特定进程和用户ID未被授予访问特定URI的权限,则抛出 SecurityException
void enforceUriPermission  Uri  uri,  String  readPermission,  String  writePermission,int pid,int uid,int modeFlags,  String  message)
执行Uri和正常许可。
串[] fileList ()
返回一个字符串数组,命名与该Context的应用程序包关联的私有文件。
背景 getApplicationContext ()
返回当前进程的单个全局Application对象的上下文。
ApplicationInfo getApplicationInfo ()
返回此上下文的包的完整应用程序信息。
AssetManager getAssets ()
返回应用程序包的AssetManager实例。
背景 getBaseContext ()
文件 getCacheDir ()
返回文件系统上应用程序特定缓存目录的绝对路径。
ClassLoader getClassLoader ()
返回一个可以用来检索此包中的类的类加载器。
ContentResolver getContentResolver ()
返回应用程序包的ContentResolver实例。
文件 getDatabasePath  String  name)
返回 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory) 存储创建数据库的文件系统上的绝对路径 
文件 getDir  String  name,int mode)
检索,创建如果需要,一个新的目录,应用程序可以在其中放置自己的自定义数据文件。
文件 getExternalCacheDir ()
返回主外部文件系统(即 Environment.getExternalStorageDirectory() 应用程序可以放置其所拥有的缓存文件的位置)的目录的绝对路径
文件[] GetExternalCacheDirs ()
在应用程序可以放置其所拥有的高速缓存文件的所有外部存储设备上返回到特定于应用程序的目录的绝对路径。
文件 getExternalFilesDir  String  type)
返回主外部文件系统(即某处 Environment.getExternalStorageDirectory() )的目录的绝对路径,其中应用程序可以放置其拥有的持久性文件。
文件[] getExternalFilesDirs  String  type)
返回所有外部存储设备上应用程序特定目录的绝对路径,应用程序可以放置其拥有的持久性文件。
文件 getFileStreamPath  String  name)
返回 openFileOutput(String, int) 存储创建文件的文件系统的绝对路径 
文件 getFilesDir ()
返回文件系统 openFileOutput(String, int) 中存储创建文件的目录的绝对路径
Looper getMainLooper ()
为当前进程的主线程返回Looper。
文件 getObbDir ()
返回可以找到此应用程序的OBB文件(如果有的话)的主外部存储目录。
文件[] getObbDirs ()
返回所有外部存储设备上应用程序特定目录的绝对路径,其中可以找到应用程序的OBB文件(如果有的话)。
getPackageCodePath ()
返回此上下文的主要Android软件包的完整路径。
PackageManager getPackageManager ()
返回PackageManager实例以查找全局包信息。
getPackageName ()
返回此应用程序的包的名称。
getPackageResourcePath ()
返回此上下文的主要Android软件包的完整路径。
资源 getResources ()
为应用程序的包返回一个Resources实例。
SharedPreferences getSharedPreferences  String  name,int mode)
检索并保留首选项文件'name'的内容,返回一个SharedPreferences,通过它可以检索和修改其值。
目的 getSystemService  String  name)
通过名称将句柄返回到系统级服务。
资源 getTheme ()
返回与此上下文关联的Theme对象。
可抽出 getWallpaper ()
此方法已弃用。WallpaperManager.get()改用。
int getWallpaperDesiredMinimumHeight ()
此方法已弃用。WallpaperManager.getDesiredMinimumHeight()改用。
int getWallpaperDesiredMinimumWidth ()
此方法已弃用。WallpaperManager.getDesiredMinimumWidth()改用。
void grantUriPermission  String  toPackage,  Uri  uri,int modeFlags)
授予访问特定Uri到另一个包的权限,无论该包是否具有访问Uri内容提供商的一般权限。
布尔值 isRestricted ()
指示此上下文是否受限。
FileInputStream openFileInput  String  name)
打开与该Context的应用程序包相关联的私有文件进行阅读。
FileOutputStream openFileOutput  String  name,int mode)
打开与此Context的应用程序包相关联的私有文件进行写入。
SQLiteDatabase openOrCreateDatabase  String  name,int mode,  SQLiteDatabase.CursorFactory  factory)
打开与此Context的应用程序包关联的新的私有SQLiteDatabase。
SQLiteDatabase openOrCreateDatabase  String  name,int mode,  SQLiteDatabase.CursorFactory  factory,  DatabaseErrorHandler  errorHandler)
打开与此Context的应用程序包关联的新的私有SQLiteDatabase。
可抽出 peekWallpaper ()
此方法已弃用。WallpaperManager.peek()改用。
意图 registerReceiver  BroadcastReceiver  receiver,  IntentFilter 过滤器)
注册要在主活动线程中运行的BroadcastReceiver。
意图 registerReceiver  BroadcastReceiver  receiver,  IntentFilter  filter,  String  broadcastPermission,  Handler  scheduler)
注册接收意向广播,在调度程序的上下文中  运行
void removeStickyBroadcast 意图 意图)
删除以前发送的数据 sendStickyBroadcast(Intent) ,这样就好像粘性广播从未发生过。
void removeStickyBroadcastAsUser  Intent  intent,  UserHandle 用户)
版本 removeStickyBroadcast(Intent) 允许您指定要发送广播的用户。
void revokeUriPermission  Uri  uri,int modeFlags)
删除所有访问以前添加的特定内容提供商Uri的权限 grantUriPermission(String, Uri, int)
void sendBroadcast 意图 意图)
将所有意向广播给所有感兴趣的BroadcastReceivers。
void sendBroadcast  Intent  intent,  String  receiverPermission)
将所有意向广播给所有感兴趣的BroadcastReceivers,允许执行可选的所需权限。
void sendBroadcastAsUser  Intent  intent,  UserHandle 用户)
版本 sendBroadcast(Intent) 允许您指定要发送广播的用户。
void sendBroadcastAsUser  Intent  intent,  UserHandle  user,  String  receiverPermission)
版本 sendBroadcast(Intent, String) 允许您指定要发送广播的用户。
void sendOrderedBroadcast  Intent  intent,  String  receiverPermission,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
版本 sendBroadcast(Intent) 允许您从广播中接收数据。
void sendOrderedBroadcast  Intent  intent,  String  receiverPermission)
将给定意图广播给所有感兴趣的BroadcastReceivers,一次提供一个,以允许更多的接收者在将其传送到较不优选的接收器之前消费广播。
void sendOrderedBroadcastAsUser  Intent  intent,  UserHandle  user,  String  receiverPermission,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
void sendStickyBroadcast 意图 意图)
执行一个 sendBroadcast(Intent) “粘性”,意思是在广播完成后,您发送的意图将保持不变,以便其他人可以通过返回值快速检索该数据 registerReceiver(BroadcastReceiver, IntentFilter)
void sendStickyBroadcastAsUser 意图 意图,  UserHandle 用户)
版本 sendStickyBroadcast(Intent) 允许您指定要发送广播的用户。
void sendStickyOrderedBroadcast  Intent  intent,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
版本 sendStickyBroadcast(Intent) 允许您从广播中接收数据。
void sendStickyOrderedBroadcastAsUser  Intent  intent,  UserHandle  user,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
版本  sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)  允许您指定要发送广播的用户。
void setTheme (int)
设置这个上下文的基础主题。
void setWallpaper 图位图)
此方法已弃用。WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

void setWallpaper  InputStream  data)
此方法已弃用。WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

void startActivities  Intent []  intents
同样 startActivities(Intent[], Bundle) ,没有指定的选项。
void startActivities  Intent []  intents  Bundle 选项)
启动多项新活动。
void startActivity 意图 意图)
同样 startActivity(Intent, Bundle) ,没有指定的选项。
void startActivity 意图 意图, 捆绑 选项)
启动新的活动。
布尔值 startInstrumentation  ComponentName  className,  String  profileFile,  Bundle 参数)
开始执行一个 Instrumentation 类。
void startIntentSender  IntentSender  intent,  Intent  fillInIntent,int flagsMask,int flagsValues,int extraFlags,  Bundle  options)
喜欢 startActivity(Intent, Bundle) ,但采取IntentSender启动。
void startIntentSender  IntentSender  intent,  Intent  fillInIntent,int flagsMask,int flagsValues,int extraFlags)
ComponentName startService 意图 服务)
请求启动给定的应用程序服务。
布尔值 stopService 意图 名称)
请求停止给定的应用程序服务。
void unbindService  ServiceConnection  conn)
断开应用程序服务。
void unregisterReceiver  BroadcastReceiver  receiver)
取消注册之前注册的BroadcastReceiver。
保护方法
void attachBaseContext  Context  base)
设置此ContextWrapper的基本上下文。
[扩大]
继承方法
 从类 android.content.Context
 从类 java.lang.Object

公共建设者


public ContextWrapper Context base)
API级别1中添加

公共方法


public boolean bindService Intent service,ServiceConnection conn,int flags)
API级别1中添加

连接到应用程序服务,如果需要创建它。这定义了应用程序和服务之间的依赖关系。给定的 连接将在创建时接收服务对象,并被告知它是否死亡并重新启动。只要呼叫上下文存在,该服务将被认为是系统所需要的。例如,如果此上下文是停止的活动,则在恢复活动之前,该服务将不再需要继续运行。

SecurityException如果您没有绑定到给定服务的权限,则此函数将抛出。

注意:不能从BroadcastReceiver组件调用 此方法。您可以使用从BroadcastReceiver到Service的通信的模式是调用 startService(Intent)包含要发送的命令的参数,服务stopSelf(int)在执行该命令时调用其 方法。请参阅API演示应用程序/服务/服务启动参数控制器。然而,使用已经注册的BroadcastReceiver的此方法是可以的 registerReceiver(BroadcastReceiver, IntentFilter),因为该BroadcastReceiver的生命周期与另一个对象(注册它的对象)绑定在一起。

参数
服务 标识要连接的服务。Intent可以指定显式组件名称或逻辑描述(操作,类别等)以匹配 IntentFilter服务发布的内容。
当服务启动和停止时接收信息。这必须是一个有效的ServiceConnection对象; 它不能为null。
标志 绑定的操作选项。可能是0, , BIND_AUTO_CREATEBIND_DEBUG_UNBIND, BIND_NOT_FOREGROUNDBIND_ABOVE_CLIENT, BIND_ALLOW_OOM_MANAGEMENTBIND_WAIVE_PRIORITY
返回
  • 如果您已成功绑定到该服务,true则返回; false如果没有连接,则返回,因此您将不会收到服务对象。
public int checkCallingOrSelfPermission String permission)
API级别1中添加

确定是否一个IPC的调用过程,或者您已被授予特定权限。这是一样的 checkCallingPermission(String),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
允许 正在检查的权限的名称。
返回
public int checkCallingOrSelfUriPermission Uri uri,int modeFlags)
API级别1中添加

确定是否一个IPC的调用过程,或者你已经获准访问特定URI。这是一样的 checkCallingUriPermission(Uri, int),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public int checkCallingPermission String permission)
API级别1中添加

确定您正在处理的IPC的调用进程是否已获得特定权限。这基本上是与调用 checkPermission(String, int, int)与PID和返回UID getCallingPid()getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此功能将始终失败。这样做是为了防止意外泄漏的权限; 你可以checkCallingOrSelfPermission(String) 用来避免这种保护。

参数
允许 正在检查的权限的名称。
返回
public int checkCallingUriPermission Uri uri,int modeFlags)
API级别1中添加

确定调用进程和用户标识是否已被授予访问特定URI的权限。这基本上是与调用checkUriPermission(Uri, int, int, int)与PID和返回UID getCallingPid()getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此功能将始终失败。

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public int checkPermission String permission,int pid,int uid)
API级别1中添加

确定在系统中运行的特定进程和用户ID是否允许给定的权限。

参数
允许 正在检查的权限的名称。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
返回
public int checkUriPermission Uri uri,int pid,int uid,int modeFlags)
API级别1中添加

确定特定进程和用户标识是否已被授予访问特定URI的权限。这只会检查明确授予的权限 - 如果给定的进程/ uid具有对URI内容提供商的更一般访问权限,则此检查将始终失败。

参数
uri 正在检查的uri。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public int checkUriPermission Uri uri,String readPermission,String writePermission,int pid,int uid,int modeFlags)
API级别1中添加

检查Uri和正常许可。这使您可以同时执行checkPermission(String, int, int),并checkUriPermission(Uri, int, int, int)在一次调用。

参数
uri Uri的权限要检查,否则不执行此检查。
readPermission 提供整体读取权限的权限,否则不执行此检查。
writePermission 提供整体写入权限的权限,否则不执行此检查。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public void clearWallpaper ()
API级别1中添加

此方法已弃用。
WallpaperManager.clear()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

投掷
IOException  
public Context createConfigurationContext 配置 overrideConfiguration)
API级别17中添加

为当前上下文返回一个新的Context对象,但其资源被调整以匹配给定的配置。每次调用此方法返回一个Context对象的新实例; 上下文对象不是共享的,但是通常的状态(ClassLoader,同一配置的其他资源)可能是这样,Context本身可以是相当轻量级的。

参数
overrideConfiguration 一个Configuration指定什么值在原来的语境资源的基础配置进行修改。如果基本配置发生更改(例如由于方向更改),则此上下文的资源也将更改,除了那些已使用值显式覆盖的内容。
返回
public Context createDisplayContext 显示显示)
API级别17中添加

为当前上下文返回一个新的Context对象,并调整其资源以匹配给定Display的指标。每次调用此方法返回一个Context对象的新实例; 上下文对象不是共享的,但是通常的状态(ClassLoader,同一配置的其他资源)可能是这样,Context本身可以是相当轻量级的。返回的显示上下文提供了一个配置为在给定显示上显示窗口的WindowManager (见getSystemService(String))。WindowManager的getDefaultDisplay() 方法可以用于从返回的上下文中检索显示。

参数
显示 一个Display对象,指定要衡量Context资源的度量标准的显示,以及应显示哪些新窗口。
返回
public Context createPackageContext String packageName,int flags)
API级别1中添加

为给定的应用程序名称返回一个新的Context对象。该上下文与命名应用程序启动时获取的内容相同,包含相同的资源和类加载器。每次调用此方法返回一个Context对象的新实例; 上下文对象不共享,但它们共享公共状态(Resources,ClassLoader等),因此Context实例本身是相当轻量级的。

PackageManager.NameNotFoundException如果没有给定的包名称的应用程序,则抛出。

抛出SecurityException如果请求上下文不能加载到调用者的出于安全原因的过程(参见 CONTEXT_INCLUDE_CODE更多信息}。

参数
packageName 应用程序包的名称
标志 选项标志,其中之一CONTEXT_INCLUDE_CODE 或CONTEXT_IGNORE_SECURITY
返回
public String [] databaseList ()
API级别1中添加

返回与该Context的应用程序包相关联的私有数据库的字符串数组。

返回
  • 数组命名私有数据库的字符串。
public boolean deleteDatabase String name)
API级别1中添加

删除与此Context的应用程序包关联的现有私有SQLiteDatabase。

参数
名称 数据库的名称(在应用程序包中唯一)。
返回
  • true如果数据库被成功删除; 否则false
public boolean deleteFile String name)
API级别1中添加

删除与该Context的应用程序包相关联的给定私有文件。

参数
名称 要删除的文件的名称; 不能包含路径分隔符。
返回
  • true如果文件已成功删除; 否则 false
public void enforceCallingOrSelfPermission String permission,String message)
API级别1中添加

如果您和您正在处理的IPC的调用进程都不被授予特定权限,则抛出一个 SecurityException。这是一样的enforceCallingPermission(String, String),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
允许 正在检查的权限的名称。
信息 如果抛出异常,则包含该消息。
public void enforceCallingOrSelfUriPermission Uri uri,int modeFlags,String message)
API级别1中添加

如果IPC的调用过程或者您没有被授予访问特定URI的权限,则抛出SecurityException。这是一样的enforceCallingUriPermission(Uri, int, String),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public void enforceCallingPermission String permission,String message)
API级别1中添加

如果您正在处理的IPC的调用进程尚未被授予特定权限,则抛出一个SecurityException。这基本上是与调用 enforcePermission(String, int, int, String)与PID和返回UID getCallingPid() 和getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此函数将始终抛出SecurityException异常。这样做是为了防止意外泄漏的权限; 你可以enforceCallingOrSelfPermission(String, String)用来避免这种保护。

参数
允许 正在检查的权限的名称。
信息 如果抛出异常,则包含该消息。
public void enforceCallingUriPermission Uri uri,int modeFlags,String message)
API级别1中添加

如果调用进程和用户标识未被授予访问特定URI的权限,则抛出SecurityException。这基本上是与调用 enforceUriPermission(Uri, int, int, int, String)与PID和返回UID getCallingPid()getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此函数将始终抛出SecurityException异常。

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public void enforcePermission String permission,int pid,int uid,String message)
API级别1中添加

如果在系统中运行的特定进程和用户ID不允许给定的权限,则抛出一个SecurityException

参数
允许 正在检查的权限的名称。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
信息 如果抛出异常,则包含该消息。
public void enforceUriPermission Uri uri,int pid,int uid,int modeFlags,String message)
API级别1中添加

如果特定进程和用户ID未被授予访问特定URI的权限,则抛出SecurityException。这只会检查明确授予的权限 - 如果给定的进程/ uid具有对URI内容提供商的更一般访问权限,则此检查将始终失败。

参数
uri 正在检查的uri。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public void enforceUriPermission Uri uri,String readPermission,String writePermission,int pid,int uid,int modeFlags,String message)
API级别1中添加

执行Uri和正常许可。这使您可以同时执行enforcePermission(String, int, int, String),并enforceUriPermission(Uri, int, int, int, String)在一次调用。

参数
uri Uri的权限要检查,否则不执行此检查。
readPermission 提供整体读取权限的权限,否则不执行此检查。
writePermission 提供整体写入权限的权限,否则不执行此检查。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public String [] fileList ()
API级别1中添加

返回一个字符串数组,命名与该Context的应用程序包关联的私有文件。

返回
  • 一组命名私有文件的字符串。
public Context getApplicationContext ()
API级别1中添加

返回当前进程的单个全局Application对象的上下文。这通常只能在需要一个生命周期与当前上下文分开的Context的情况下使用,该过程与进程的生命周期而不是当前组件相关联。

考虑一下如何与之互动 registerReceiver(BroadcastReceiver, IntentFilter)

  • 如果从活动上下文中使用,接收方正在该活动中注册。这意味着在活动完成销毁之前,您应该注销; 事实上,如果你不这样做,框架将清理您的泄漏注册,因为它删除活动并记录错误。因此,如果您使用活动上下文来注册一个静态的接收者(对进程的全局性,与活动实例无关),那么该注册将被删除,无论您使用的活动被销毁。

  • 如果从这里返回的上下文使用,接收方正在注册与您的应用程序相关联的全局状态。因此,永远不会被你注册。如果接收器与静态数据相关联,而不是特定的组件,则这是必要的。但是如果您忘记取消注册,取消绑定等等,那么在其他地方使用ApplicationContext可能会导致严重的泄漏。

public ApplicationInfo getApplicationInfo ()
API级别4中添加

返回此上下文的包的完整应用程序信息。

public AssetManager getAssets ()
API级别1中添加

返回应用程序包的AssetManager实例。

public Context getBaseContext ()
API级别1中添加

返回
  • 由构造函数或setBaseContext设置的基础上下文
public File getCacheDir ()
API级别1中添加

返回文件系统上应用程序特定缓存目录的绝对路径。这些文件将是设备在存储空间不足时首先被删除的文件。这些文件将被删除不能保证。 注意:您不应该依靠系统为您删除这些文件; 您应该总是有一个合理的最大值,例如1 MB,用于使用缓存文件的空间量,并在超出该空间时修剪这些文件。

返回
  • 目录保存应用程序缓存文件的路径。
public ClassLoader getClassLoader ()
API级别1中添加

返回一个可以用来检索此包中的类的类加载器。

public ContentResolver getContentResolver ()
API级别1中添加

返回应用程序包的ContentResolver实例。

public File getDatabasePath String name)
API级别1中添加

返回openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)存储创建数据库的文件系统上的绝对路径 。

参数
名称 要获取路径的数据库的名称。
返回
  • 给定数据库的绝对路径。
public File getDir String name,int mode)
API级别1中添加

检索,创建如果需要,一个新的目录,应用程序可以在其中放置自己的自定义数据文件。您可以使用返回的File对象来创建和访问此目录中的文件。请注意,通过File对象创建的文件只能由您自己的应用程序访问; 您只能设置整个目录的模式,而不是单个文件。

参数
名称 要检索的目录的名称。这是作为应用程序数据一部分创建的目录。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE并 MODE_WORLD_WRITEABLE控制权限。
返回
  • 一个File请求的目录对象。该目录将被创建,如果它不存在。
public File getExternalCacheDir ()
API级别8中添加

返回主外部文件系统(即Environment.getExternalStorageDirectory()应用程序可以放置其所拥有的缓存文件的位置)的绝对路径,这些文件在应用程序的内部,用户通常不作为媒体可见。

这就像getCacheDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 该平台并不总是监视外部存储器中可用的空间,因此可能不会自动删除这些文件。目前,这里的唯一时间文件将被平台删除,当运行JELLY_BEAN_MR1或更新时 Environment.isExternalStorageEmulated()返回true。请注意,您应该管理您将使用的最大空间,就像这样getCacheDir()
  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。有关Environment存储状态的信息,请参阅API 。
  • 这些文件没有执行安全性。例如,任何持有的应用程序WRITE_EXTERNAL_STORAGE都可以写入这些文件。

从开始KITKAT,无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它。这仅适用于为调用应用程序的程序包名生成的路径。访问属于其他包的路径WRITE_EXTERNAL_STORAGE 和/或是READ_EXTERNAL_STORAGE必需的。

在具有多个用户(如描述UserManager)的设备上,每个用户都有自己的隔离外部存储。应用程序只能为运行的用户访问外部存储。

返回
  • 在外部存储器上保存应用程序缓存文件的目录的路径。如果外部存储器当前未安装,则返回null,因此无法确保路径存在; 当可用时,您将需要再次调用此方法。
public File [] getExternalCacheDirs ()
API级别19中添加

在应用程序可以放置其所拥有的高速缓存文件的所有外部存储设备上返回到特定于应用程序的目录的绝对路径。这些文件是应用程序内部的,通常用户作为媒体通常不可见。

这就像getCacheDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。

这里返回的外部存储设备被认为是设备的永久部分,包括模拟的外部存储和物理介质插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,如USB闪存驱动器。

应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可能选择将大型文件存储在具有最多可用空间的设备上,如通过测量StatFs

无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它们。在二级外部存储设备上写入这些路径之外的访问不可用。

返回的第一个路径与getExternalCacheDir()。返回的路径可能是null存储设备不可用。

public File getExternalFilesDir String type)
API级别8中添加

返回主外部文件系统(即某处Environment.getExternalStorageDirectory())的目录的绝对路径,其中应用程序可以放置其拥有的持久性文件。这些文件是应用程序的内部,用户作为媒体通常不可见。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。有关Environment存储状态的信息,请参阅API 。
  • 这些文件没有执行安全性。例如,任何持有的应用程序WRITE_EXTERNAL_STORAGE都可以写入这些文件。

从开始KITKAT,无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它。这仅适用于为调用应用程序的程序包名生成的路径。访问属于其他包的路径WRITE_EXTERNAL_STORAGE 和/或是READ_EXTERNAL_STORAGE必需的。

在具有多个用户(如描述UserManager)的设备上,每个用户都有自己的隔离外部存储。应用程序只能为运行的用户访问外部存储。

以下是在应用程序的私有存储中操作文件的典型代码示例:

void createExternalStoragePrivateFile (){ //创建一个我们将私有文件放在外部//存储上的路径File file = new File getExternalFilesDir null ),“DemoFile.jpg” ); 尝试{ //非常简单的代码将图片从应用程序的//资源复制到外部文件中。请注意,此代码不会检查错误,并假定图片很小(不要尝试以块形式复制)。请注意,如果外部存储器//当前未安装,则会静默失败。InputStream is = getResources ()。openRawResource ř 绘制气球); OutputStream os = new FileOutputStream file ); byte [] data = new byte [ is available ()]; 数据);         os 数据); 关闭();         os 关闭(); } catch IOException e { //无法创建文件,可能是因为外部存储尚未安装。登录w “ExternalStorage” “写入错误” + 文件e ); } } void deleteExternalStoragePrivateFile (){ //获取外部存储上的文件路径。如果外部//存储器当前没有挂载,这将失败。File file = new File getExternalFilesDir null ),“DemoFile.jpg” ); if file != null {         file delete (); } } boolean hasExternalStoragePrivateFile (){ //获取外部存储上的文件路径。如果外部//存储器当前没有挂载,这将失败。File file = new File getExternalFilesDir null ),“DemoFile.jpg” ); 如果文件= null { return file exists (); } return false ; } 
    
    
       

     
        
        
        
        
        
          
          
          
        

        

       
        
        
          
    


 
    
    
       
       

    


 
    
    
       
       
        
    
     

如果向此函数提供非空类型,则返回的文件将是指定给定类型的子目录的路径。虽然介质扫描程序不会自动扫描这些文件,但您可以使用这些文件将其显式添加到介质数据库 MediaScannerConnection.scanFile。请注意,这不同于 Environment.getExternalStoragePublicDirectory(),它提供了所有应用程序共享的媒体目录。这里返回的目录由应用程序拥有,并且在卸载应用程序时将删除其内容。与此不同 Environment.getExternalStoragePublicDirectory(),此处返回的目录将自动为您创建。

以下是在应用程序的私有存储中处理图片并将其添加到媒体数据库的典型代码示例:

void createExternalStoragePrivatePicture (){ //创建一个路径,我们将把我们的图片放在我们自己的私人//图片目录中。请注意,我们不需要在DIRECTORY_PICTURES中放置//图片,因为媒体扫描器将会看到//这些目录中的所有媒体; 这可能与其他//媒体类型(例如DIRECTORY_MUSIC)有用,可帮助您将媒体分类到用户显示。文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); File file = new File path “DemoPicture.jpg” ); 尝试{ //非常简单的代码将图片从应用程序的//资源复制到外部文件中。请注意,此代码不会检查错误,并假定图片很小(不要尝试以块形式复制)。请注意,如果外部存储器//当前未安装,则会静默失败。InputStream is = getResources ()。openRawResource ř 绘制气球); OutputStream os = new FileOutputStream file ); byte [] data = new byte [ is available ()]; 数据);         os 数据); 关闭();         os 关闭(); //告诉媒体扫描器有关新文件,以便它立即可供用户使用。MediaScannerConnection SCANFILE 的String [] { 文件的toString ()},null 新的MediaScannerConnection OnScanCompletedListener (){ public void onScanCompleted String path Uri uri { Log i “ExternalStorage” “Scanned” + path + “:” ); 登录“ExternalStorage” “ - > uri =” + uri ); } }); } catch IOException e { //无法创建文件,可能是因为外部存储尚未安装。登录w “ExternalStorage” “写入错误” + 文件e ); } } void deleteExternalStoragePrivatePicture (){ //创建一个路径,我们将把我们的图片放在用户的公共图片目录中,并删除该文件。如果外部//存储器当前没有挂载,这将失败。文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” );         文件delete (); } } boolean hasExternalStoragePrivatePicture (){ //创建一个路径,我们将把我们的图片放在用户的公共图片目录中,并检查文件是否存在。如果//当前未安装外部存储器,则会认为//图片不存在。文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } 文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } 文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } 
    
    
    
    
    
    
    
       

     
        
        
        
        
        
          
          
          
        

        


        
        
        
                    
                  
               
                   
                  
            
        
       
        
        
          
    


 
    
    
    
    
       
           

    


 
    
    
    
    
    
       
           
        
    
     

参数
类型 要返回的文件目录的类型。可能是空的文件,目录或子目录下面的环境常量之一根: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONESDIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES,或 DIRECTORY_MOVIES
返回
  • 在外部存储器上保存应用程序文件的目录的路径。如果外部存储器当前未安装,则返回null,因此无法确保路径存在; 当可用时,您将需要再次调用此方法。
public File [] getExternalFilesDirs String type)
API级别19中添加

返回所有外部存储设备上应用程序特定目录的绝对路径,应用程序可以放置其拥有的持久性文件。这些文件是应用程序内部的,通常用户作为媒体通常不可见。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。

这里返回的外部存储设备被认为是设备的永久部分,包括模拟的外部存储和物理介质插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,如USB闪存驱动器。

应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可能选择将大型文件存储在具有最多可用空间的设备上,如通过测量StatFs

无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它们。在二级外部存储设备上写入这些路径之外的访问不可用。

返回的第一个路径与getExternalFilesDir(String)。返回的路径可能是null存储设备不可用。

public File getFileStreamPath String name)
API级别1中添加

返回openFileOutput(String, int)存储创建文件的文件系统的绝对路径 。

参数
名称 要获取路径的文件的名称。
返回
  • 给定文件的绝对路径。
public File getFilesDir ()
API级别1中添加

返回文件系统openFileOutput(String, int)中存储创建文件的目录的绝对路径。

返回
  • 目录保存应用程序文件的路径。
public Looper getMainLooper ()
API级别1中添加

为当前进程的主线程返回Looper。这是用于调度应用程序组件(活动,服务等)的线程。

根据定义,该方法返回与通过调用获得的结果相同的结果Looper.getMainLooper()

返回
  • 主要活套。
public File getObbDir ()
已在 API级别11中添加

返回可以找到此应用程序的OBB文件(如果有的话)的主外部存储目录。请注意,如果应用程序没有任何OBB文件,则该目录可能不存在。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。例如,任何持有的应用程序WRITE_EXTERNAL_STORAGE都可以写入这些文件。

从开始KITKAT,无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它。这仅适用于为调用应用程序的程序包名生成的路径。访问属于其他包的路径WRITE_EXTERNAL_STORAGE 和/或是READ_EXTERNAL_STORAGE必需的。

在具有多个用户(如所述UserManager)的设备上,多个用户可以共享相同的OBB存储位置。应用程序应确保在不同用户下运行的多个实例不会互相干扰。

public File [] getObbDirs ()
API级别19中添加

返回所有外部存储设备上应用程序特定目录的绝对路径,其中可以找到应用程序的OBB文件(如果有的话)。注意,如果应用程序没有任何OBB文件,这些目录可能不存在。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。

这里返回的外部存储设备被认为是设备的永久部分,包括模拟的外部存储和物理介质插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,如USB闪存驱动器。

应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可能选择将大型文件存储在具有最多可用空间的设备上,如通过测量StatFs

无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它们。在二级外部存储设备上写入这些路径之外的访问不可用。

返回的第一个路径与getObbDir()。返回的路径可能是null存储设备不可用。

public String getPackageCodePath ()
API级别1中添加

返回此上下文的主要Android软件包的完整路径。Android包是一个包含应用程序的主要代码和资产的ZIP文件。

注意:这对于应用程序通常不是有用的,因为它们不应该直接访问文件系统。

返回
  • 字符串代码和资产的路径。
public PackageManager getPackageManager ()
API级别1中添加

返回PackageManager实例以查找全局包信息。

public String getPackageName ()
API级别1中添加

返回此应用程序的包的名称。

public String getPackageResourcePath ()
API级别1中添加

返回此上下文的主要Android软件包的完整路径。Android包是一个包含应用程序主要资源的ZIP文件。

注意:这对于应用程序通常不是有用的,因为它们不应该直接访问文件系统。

返回
  • 字符串资源的路径。
public Resources getResources ()
API级别1中添加

为应用程序的包返回一个Resources实例。

public SharedPreferences getSharedPreferences String name,int mode)
API级别1中添加

检索并保留首选项文件'name'的内容,返回一个SharedPreferences,通过它可以检索和修改其值。只有一个SharedPreferences对象的实例返回给任何一个同名的调用者,这意味着它们会在制作完成后立即看到对方的编辑。

参数
名称 所需的首选项文件。如果此名称的首选项文件不存在,则在您检索编辑器(SharedPreferences.edit())然后提交更改(Editor.commit())时将创建它。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE 并MODE_WORLD_WRITEABLE控制权限。MODE_MULTI_PROCESS如果多个进程突破相同的SharedPreferences文件,也可以使用该位 。 MODE_MULTI_PROCESS 始终在应用程序中定位Gingerbread(Android 2.3)及以下版本,默认情况下在以后版本中关闭。
返回
public Object getSystemService String name)
API级别1中添加

通过名称将句柄返回到系统级服务。返回对象的类根据请求的名称而异。目前可用的名称有:

WINDOW_SERVICE (“窗口”)
您可以在其中放置自定义窗口的顶级窗口管理器。返回的对象是a  WindowManager
LAYOUT_INFLATER_SERVICE (“layout_inflater”)
LayoutInflater在这种情况下膨胀布局资源。
ACTIVITY_SERVICE (“活动”)
ActivityManager用于与系统的全局活动状态进行交互。
POWER_SERVICE (“功率”)
PowerManager用于控制电源管理。
ALARM_SERVICE (“报警”)
AlarmManager用于在您选择时收到意向。
NOTIFICATION_SERVICE (“通知”)
NotificationManager用于通知用户背景事件。
KEYGUARD_SERVICE (“keyguard”)
KeyguardManager用于控制键盘保护
LOCATION_SERVICE (“位置”)
LocationManager用于控制位置(例如,GPS)更新。
SEARCH_SERVICE (“搜索”)
SearchManager用于处理搜索。
VIBRATOR_SERVICE (“振动器”)
Vibrator用于与振动器硬件相互作用。
CONNECTIVITY_SERVICE (“连接”)
ConnectivityManager用于处理网络连接的管理。
WIFI_SERVICE (“无线上网”)
WifiManager用于管理Wi-Fi连接。
INPUT_METHOD_SERVICE (“输入法”)
一个 InputMethodManager 用于输入法管理。
UI_MODE_SERVICE (“uimode”)
一种 UiModeManager用于控制用户界面模式。
DOWNLOAD_SERVICE (“下载”)
DownloadManager用于请求HTTP下载

注意:通过此API获取的系统服务可能与从其获取的上下文密切相关。一般来说,不要在各种不同的上下文(活动,应用程序,服务,提供商等)之间共享服务对象

参数
名称 所需服务的名称。
返回
  • 该服务,如果名称不存在,则为null。
public Resources.Theme getTheme ()
API级别1中添加

返回与此上下文关联的Theme对象。

public Drawable getWallpaper ()
API级别1中添加

此方法已弃用。
WallpaperManager.get()改用。

public int getWallpaperDesiredMinimumHeight ()
API级别1中添加

此方法已弃用。
WallpaperManager.getDesiredMinimumHeight()改用。

public int getWallpaperDesiredMinimumWidth ()
API级别1中添加

此方法已弃用。
WallpaperManager.getDesiredMinimumWidth()改用。

public void grantUriPermission String toPackage,Uri uri,int modeFlags)
API级别1中添加

授予访问特定Uri到另一个包的权限,无论该包是否具有访问Uri内容提供商的一般权限。这可以用于授予特定的临时权限,通常是响应于用户交互(例如用户打开您希望其他人显示的附件)。

通常,您应该使用Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION使用Intent直接启动活动而不是此功能。如果您直接使用此功能,那么revokeUriPermission(Uri, int)当目标不再允许访问它时,您应该确保调用 。

要成功,拥有Uri的内容提供商必须 grantUriPermissions在其清单中设置<grant-uri-permissions>属性或包含 标签。

参数
包装 您希望允许访问Uri的软件包。
uri 您想要授予访问权限的Uri。
modeFlags 所需的访问模式。任何组合 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
public boolean isRestricted ()
API级别4中添加

指示此上下文是否受限。

返回
  • true如果此上下文受限制,false否则。
public FileInputStream openFileInput String name)
API级别1中添加

打开与该Context的应用程序包相关联的私有文件进行阅读。

参数
名称 要打开的文件的名称; 不能包含路径分隔符。
返回
public FileOutputStream openFileOutput String name,int mode)
API级别1中添加

打开与此Context的应用程序包相关联的私有文件进行写入。创建文件(如果不存在)。

参数
名称 要打开的文件的名称; 不能包含路径分隔符。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_APPEND附加到现有文件, MODE_WORLD_READABLEMODE_WORLD_WRITEABLE控制权限。
返回
public SQLiteDatabase openOrCreateDatabase String name,int mode,SQLiteDatabase.CursorFactory factory)
API级别1中添加

打开与此Context的应用程序包关联的新的私有SQLiteDatabase。创建数据库文件(如果不存在)。

参数
名称 数据库的名称(在应用程序包中唯一)。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE 并MODE_WORLD_WRITEABLE控制权限。用于MODE_ENABLE_WRITE_AHEAD_LOGGING默认启用预写记录。
调用查询时调用实例化一个游标的可选工厂类。
返回
  • 具有给定名称的新创建的数据库的内容。
public SQLiteDatabase openOrCreateDatabase String name,int mode,SQLiteDatabase.CursorFactoryfactory,DatabaseErrorHandler errorHandler)
已在 API级别11中添加

打开与此Context的应用程序包关联的新的私有SQLiteDatabase。创建数据库文件(如果不存在)。

接受输入参数:DatabaseErrorHandler当sqlite报告数据库损坏时,用于处理损坏的具体实例。

参数
名称 数据库的名称(在应用程序包中唯一)。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE 并MODE_WORLD_WRITEABLE控制权限。用于MODE_ENABLE_WRITE_AHEAD_LOGGING默认启用预写记录。
调用查询时调用实例化一个游标的可选工厂类。
errorHandler DatabaseErrorHandler当sqlite的报告数据库损坏时使用。如果为空,DefaultDatabaseErrorHandler则为假。
返回
  • 具有给定名称的新创建的数据库的内容。
公众 可绘制 peekWallpaper ()
API级别1中添加

此方法已弃用。
WallpaperManager.peek()改用。

public Intent registerReceiver BroadcastReceiver receiver,IntentFilter filter)
API级别1中添加

注册要在主活动线程中运行的BroadcastReceiver。该 接收器将匹配任何广播意图被称为过滤器,在主应用程序线程。

该系统可以播放“粘性”的意图 - 这些在广播完成后留下来,发送到任何后续的注册。如果您的IntentFilter匹配这些粘意图之一,是意图将这个函数返回 ,并发送至接收器,就好像它刚刚被播出。

可能有多个粘性意图匹配过滤器,在这种情况下,这些将被发送到接收器。在这种情况下,这些函数只能直接返回其中的一个; 返回的哪一个由系统任意决定。

如果你知道你注册的意图是粘性的,你可以为你的接收者提供null 。在这种情况下,没有注册接收者 - 该函数只返回匹配过滤器的粘性意图。在多次匹配的情况下,适用与上述相同的规则。

查看BroadcastReceiver有关Intent广播的更多信息。

由于ICE_CREAM_SANDWICH,用这种方法注册的接收器将正确尊重 setPackage(String)指定的意图正在播出。在此之前,它将被忽略并传递给所有匹配的注册接收器。如果使用这个安全,请小心。

注意:该方法不能从 BroadcastReceiver组件调用; 也就是说,来自在应用程序的清单中声明的​​BroadcastReceiver。然而,可以从另一个已经在运行时注册的BroadcastReceiver来调用此方法registerReceiver(BroadcastReceiver, IntentFilter),因为这样注册的BroadcastReceiver的生命周期与注册的对象相关联。

参数
接收器 BroadcastReceiver处理广播。
过滤 选择要接收的意向广播。
返回
  • 第一个粘性意图发现匹配过滤器,如果没有匹配过滤器,则为null。
public Intent registerReceiver BroadcastReceiver receiver,IntentFilter filter,String broadcastPermission,Handlerscheduler)
API级别1中添加

注册接收意向广播,在调度程序的上下文中 运行。查看 registerReceiver(BroadcastReceiver, IntentFilter)更多信息。这允许您强制执行谁可以向接收方广播意图的权限,或者让接收者在与主应用程序线程不同的线程中运行。

查看BroadcastReceiver有关Intent广播的更多信息。

由于ICE_CREAM_SANDWICH,用这种方法注册的接收器将正确尊重 setPackage(String)指定的意图正在播出。在此之前,它将被忽略并传递给所有匹配的注册接收器。如果使用这个安全,请小心。

参数
接收器 BroadcastReceiver处理广播。
过滤 选择要接收的意向广播。
broadcastPermission 字符串命名广播者必须持有的权限才能向您发送Intent。如果为空,则不需要权限。
调度器 处理程序识别将接收到意图的线程。如果为null,将使用进程的主线程。
返回
  • 第一个粘性意图发现匹配过滤器,如果没有匹配过滤器,则为null。
public void removeStickyBroadcast Intent intent)
API级别1中添加

删除以前发送的数据sendStickyBroadcast(Intent),这样就好像粘性广播从未发生过。

您必须持有该BROADCAST_STICKY 权限才能使用此API。如果您不持有该权限,SecurityException将被抛出。

参数
意图 以前广播的意图。
public void removeStickyBroadcastAsUser Intent intent,UserHandle user)
API级别17中添加

版本removeStickyBroadcast(Intent)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

您必须持有该BROADCAST_STICKY 权限才能使用此API。如果您不持有该权限,SecurityException将被抛出。

参数
意图 以前广播的意图。
用户 UserHandle从中删除粘性广播。
public void revokeUriPermission Uri uri,int modeFlags)
API级别1中添加

删除所有访问以前添加的特定内容提供商Uri的权限grantUriPermission(String, Uri, int)。给定的Uri将匹配与给定Uri相同或子路径的所有以前授予的Uris。也就是说,撤销“content:// foo / target”将撤销“content:// foo / target”和“content:// foo / target / sub”,而不是“content:// foo”。

参数
uri 你想撤销Uri的访问权限。
modeFlags 所需的访问模式。任何组合 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
public void sendBroadcast Intent intent)
API级别1中添加

将所有意向广播给所有感兴趣的BroadcastReceivers。这个调用是异步的 它立即返回,并且您将在运行接收器时继续执行。接收机不传播结果,接收机不能中止广播。如果要允许接收者传播结果或中止广播,则必须使用有序广播发送 sendOrderedBroadcast(Intent, String)

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
public void sendBroadcast Intent intent,String receiverPermission)
API级别1中添加

将所有意向广播给所有感兴趣的BroadcastReceivers,允许执行可选的所需权限。这个调用是异步的 它立即返回,并且您将在运行接收器时继续执行。接收机不传播结果,接收机不能中止广播。如果要允许接收者传播结果或中止广播,则必须使用有序广播发送 sendOrderedBroadcast(Intent, String)

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
receiverPermission (可选)字符串命名接收方必须拥有的权限才能接收广播。如果为空,则不需要权限。
public void sendBroadcastAsUser Intent intent,UserHandle user)
API级别17中添加

版本sendBroadcast(Intent)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

参数
意图 意图广播
用户 UserHandle发送的意图。
public void sendBroadcastAsUser Intent intent,UserHandle user,String receiverPermission)
API级别17中添加

版本sendBroadcast(Intent, String)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
用户 UserHandle发送的意图。
receiverPermission (可选)字符串命名接收方必须拥有的权限才能接收广播。如果为空,则不需要权限。
public void sendOrderedBroadcast Intent intent,String receiverPermission,BroadcastReceiver resultReceiver,Handlerscheduler,int initialCode,String initialData,Bundle initialExtras)
API级别1中添加

版本sendBroadcast(Intent)允许您从广播中接收数据。这是通过在调用时提供您自己的BroadcastReceiver来完成的,这将在广播结束时被视为最终的接收者 - 其onReceive(Context, Intent)方法将使用从其他接收器收集 的结果值进行调用。广播将以与呼叫相同的方式进行序列化 sendOrderedBroadcast(Intent, String)

喜欢sendBroadcast(Intent),这种方法是异步的; 它将在resultReceiver.onReceive()被调用之前返回。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
receiverPermission 字符串命名接收者必须拥有的权限才能接收广播。如果为空,则不需要权限。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void sendOrderedBroadcast Intent intent,String receiverPermission)
API级别1中添加

将给定意图广播给所有感兴趣的BroadcastReceivers,一次提供一个,以允许更多的接收者在将其传送到较不优选的接收器之前消费广播。这个调用是异步的 它立即返回,并且您将在运行接收器时继续执行。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
receiverPermission (可选)字符串命名接收方必须拥有的权限才能接收广播。如果为空,则不需要权限。
public void sendOrderedBroadcastAsUser Intent intent,UserHandle user,String receiverPermission,BroadcastReceiverresultReceiver,Handler scheduler,int initialCode,String initialData,Bundle initialExtras)
API级别17中添加

版本 sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
用户 UserHandle发送的意图。
receiverPermission 字符串命名接收者必须拥有的权限才能接收广播。如果为空,则不需要权限。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void sendStickyBroadcast Intent intent)
API级别1中添加

执行一个sendBroadcast(Intent)“粘性”,意味着广播完成后,您发送的意图将保持不变,以便其他人可以通过返回值快速检索该数据registerReceiver(BroadcastReceiver, IntentFilter)。在所有其他方面,这样做都是一样的 sendBroadcast(Intent)

您必须持有该BROADCAST_STICKY 权限才能使用此API。如果您不持有该权限,SecurityException将被抛出。

参数
意图 意图广播; 所有符合此意图的接收器都将接收广播,而意向将被重新广播到未来的接收者。
public void sendStickyBroadcastAsUser Intent intent,UserHandle user)
API级别17中添加

版本sendStickyBroadcast(Intent)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

参数
意图 意图广播; 所有符合此意图的接收器都将接收广播,而意向将被重新广播到未来的接收者。
用户 UserHandle发送的意图。
public void sendStickyOrderedBroadcast Intent intent,BroadcastReceiver resultReceiver,Handler scheduler,int initialCode,String initialData,Bundle initialExtras)
API级别5中添加

版本sendStickyBroadcast(Intent)允许您从广播中接收数据。这是通过在调用时提供您自己的BroadcastReceiver来完成的,这将在广播结束时被视为最终的接收者 - 其onReceive(Context, Intent)方法将使用从其他接收器收集 的结果值进行调用。广播将以与呼叫相同的方式进行序列化 sendOrderedBroadcast(Intent, String)

喜欢sendBroadcast(Intent),这种方法是异步的; 它将在resultReceiver.onReceive()被调用之前返回。请注意,存储的粘性数据只是您最初提供给广播的数据,而不是由接收者进行的任何更改的结果。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void sendStickyOrderedBroadcastAsUser Intent intent,UserHandle user,BroadcastReceiver resultReceiver,Handlerscheduler,int initialCode,String initialData,Bundle initialExtras)
API级别17中添加

版本 sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) 允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
用户 UserHandle发送的意图。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void setTheme (int resid)
API级别1中添加

设置这个上下文的基础主题。请注意,在上下文中实例化任何视图之前(例如在调用setContentView(View)或 调用之前)应该调用此参数inflate(int, ViewGroup)

参数
渣滓 描述主题的风格资源。
public void setWallpaper Bitmap bitmap)
API级别1中添加

此方法已弃用。
WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

投掷
IOException  
public void setWallpaper InputStream data)
API级别1中添加

此方法已弃用。
WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

投掷
IOException  
public void startActivities Intent [] intents 
已在 API级别11中添加

同样startActivities(Intent[], Bundle),没有指定的选项。

参数
意图 一系列意向启动。
public void startActivities Intent [] intents Bundle options)
添加在 API级别16

启动多项新活动。这通常与调用 startActivity(Intent)数组中的第一个Intent一样,在创建时调用startActivity(Intent) 第二个条目的活动等。请注意,与该方法不同,通常不会在此创建除数组中最后一个以外的任何活动点,而是当用户首次访问它们时(由于从顶部的活动返回)创建。

ActivityNotFoundException 如果没有为任何给定的Intent 找到活动,此方法将抛出。在这种情况下,活动堆栈的状态是未定义的(列表中的某些意图可能在其中,有些不在),因此您可能希望避免这种情况。

参数
意图 一系列意向启动。
选项 关于如何启动活动的其他选项。查看Context.startActivity(Intent, Bundle)更多详情。
public void startActivity Intent intent)
API级别1中添加

同样startActivity(Intent, Bundle),没有指定的选项。

参数
意图 描述要开始的活动。
public void startActivity Intent intent,Bundle options)
添加在 API级别16

启动新的活动。您将不会收到有关活动何时退出的任何信息。

请注意,如果从外部调用此方法 Activity,则Intent必须包含FLAG_ACTIVITY_NEW_TASK启动标志。这是因为,没有从现有的活动开始,没有任何现有的任务来放置新的活动,因此它需要放在自己的单独任务中。

ActivityNotFoundException 如果没有找到运行给定Intent的Activity,该方法将抛出。

参数
意图 描述要开始的活动。
选项 关于如何启动活动的其他选项。如果没有选项,可能为null。看看ActivityOptions 如何构建这里提供的捆绑包; 没有支持手动构建它们的定义。
public boolean startInstrumentation ComponentName className,String profileFile,Bundle arguments)
API级别1中添加

开始执行一个Instrumentation类。给定的Instrumentation组件将通过杀死其目标应用程序(如果当前运行),启动目标进程,实例化仪器组件,然后让其驱动应用程序来运行。

此功能不是同步的 - 一旦仪器启动并运行,它将返回。

仪器通常只允许与未签名或签名的软件包一起运行,该软件包也带有签名的签名(确保目标信任工具)。

参数
班级名称 要运行的Instrumentation组件的名称。
profileFile 仪表运行时写入分析数据的可选路径,否则不进行分析。
参数 附加的可选参数传递给仪器,或为空。
返回
  • true如果仪器成功启动,否则false无法找到。
public void startIntentSender IntentSender intent,Intent fillInIntent,int flagsMask,int flagsValues,int extraFlags,Bundleoptions)
添加在 API级别16

喜欢startActivity(Intent, Bundle),但采取IntentSender启动。如果IntentSender是一个活动,那么这个活动就像你在startActivity(Intent) 这里打电话给你一样;否则,它的相关联的动作将被执行(例如发送广播),就像你已经调用 IntentSender.sendIntent一样。

参数
意图 IntentSender启动。
fillInIntent 如果非空,则将作为intent参数提供sendIntent(Context, int, Intent, IntentSender.OnFinished, Handler)
flagsMask 您想要更改的原始IntentSender中的Intent标志。
flagsValuesflagsMask中设置的任何位的所需值 
extraFlags 始终设置为0。
选项 关于如何启动活动的其他选项。查看Context.startActivity(Intent, Bundle)更多详情。如果IntentSender还提供了选项,这里给出的选项将覆盖与IntentSender给出的任何冲突。
public void startIntentSender IntentSender intent,Intent fillInIntent,int flagsMask,int flagsValues,int extraFlags)
API级别5中添加
参数
意图 IntentSender启动。
fillInIntent 如果非空,则将作为intent参数提供sendIntent(Context, int, Intent, IntentSender.OnFinished, Handler)
flagsMask 您想要更改的原始IntentSender中的Intent标志。
flagsValuesflagsMask中设置的任何位的所需值 
extraFlags 始终设置为0。
public ComponentName startService 意图服务)
API级别1中添加

请求启动给定的应用程序服务。意图应包含要启动的特定服务实现的完整类名称或要定位的特定包名称。如果Intent指定较少,则会记录有关此警告的信息,并且查找和使用的多个匹配服务中的哪一个将不被定义。如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程); 如果它正在运行,那么它仍然运行。

对此方法的每次调用将导致对目标服务onStartCommand(Intent, int, int)方法的相应调用,具有此处给出的意图。这提供了一种方便的方式将作业提交到服务,而无需绑定和调用其接口。

使用startService()将覆盖由bindService(Intent, ServiceConnection, int)以下管理的默认服务生命周期:它要求服务保持运行直到stopService(Intent)被调用,而不管任何客户端是否连接到它。请注意,对startService()的调用不是嵌套的:无论你调用startService()多少次,一次调用stopService(Intent)将会停止它。

系统尝试尽可能多地运行服务。他们应该停止的唯一时间是,如果当前的前台应用程序正在使用这么多资源,服务需要被杀死。如果在服务过程中发生任何错误,它将自动重新启动。

SecurityException如果您没有启动给定服务的权限,则此函数将抛出。

参数
服务 标识要开始的服务。意图必须是完全显式的(提供组件名称)或指定其定向的特定包名称。附加值可能包含在意向附加中,以提供参数以及此特定的开始调用。
返回
  • 如果服务正在启动或已经运行, ComponentName则返回已启动的实际服务; 否则如果服务不存在则返回null。
public boolean stopService Intent name)
API级别1中添加

请求停止给定的应用程序服务。如果服务没有运行,没有任何反应。否则停止。请注意,对startService()的调用不计算在内,无论启动多少次,都会停止该服务。

请注意,如果停止的服务仍然具有与ServiceConnection 集合绑定的对象BIND_AUTO_CREATE,则在所有这些绑定都被删除之前,它将不会被销毁。有关Service服务生命周期的更多详细信息,请参阅文档。

SecurityException如果您没有停止给定服务的权限,则此函数将抛出。

参数
名称 要停止的服务说明 意图必须是完全显式的(提供组件名称)或指定其定向的特定包名称。
返回
  • 如果存在与已经运行的给定Intent匹配的服务,则它被停止并被true返回; 否则false返回。
public void unbindService ServiceConnection conn)
API级别1中添加

断开应用程序服务。随着服务重新启动,您将不再接听电话,现在该服务可以随时停止。

参数
之前提供给bindService()的连接接口。此参数不能为空。
public void unregisterReceiver BroadcastReceiver receiver)
API级别1中添加

取消注册之前注册的BroadcastReceiver。 已经为此BroadcastReceiver注册的所有过滤器将被删除。

参数
接收器 BroadcastReceiver取消注册。

保护方法


protected void attachBaseContext Context base)
API级别1中添加

设置此ContextWrapper的基本上下文。然后将所有呼叫委派给基本上下文。如果已经设置了基本上下文,则抛出IllegalStateException。

参数
基础 这个包装器的新的基础上下文。

API级别1中添加
公共课

ContextWrapper

扩展 上下文
java.lang.Object
   ↳ android.content.Context
     ↳ android.content.ContextWrapper
已知的直接子类
已知的间接子类

班级概况


代理实现Context,将其所有调用简单地委派给另一个Context。可以被子类化以修改行为而不改变原始上下文。

概要


[扩大]
继承常量
从类 android.content.Context
公共建设者
ContextWrapper  Context  base)
公共方法
布尔值 bindService  Intent  service,  ServiceConnection  conn,int flags)
连接到应用程序服务,如果需要创建它。
int checkCallingOrSelfPermission  String  permission)
确定是否一个IPC的调用过程 ,或者您 已被授予特定权限。
int checkCallingOrSelfUriPermission  Uri  uri,int modeFlags)
确定是否一个IPC的调用过程 ,或者你 已经获准访问特定URI。
int checkCallingPermission  String  permission)
确定您正在处理的IPC的调用进程是否已获得特定权限。
int checkCallingUriPermission  Uri  uri,int modeFlags)
确定呼叫进程和用户ID是否被授予访问特定URI的权限。
int checkPermission  String 权限,int pid,int uid)
确定在系统中运行的特定进程和用户ID是否允许给定的权限。
int checkUriPermission  Uri  uri,int pid,int uid,int modeFlags)
确定特定进程和用户标识是否已被授予访问特定URI的权限。
int checkUriPermission  Uri  uri,  String  readPermission,  String  writePermission,int pid,int uid,int modeFlags)
检查Uri和正常许可。
void clearWallpaper ()
此方法已弃用。WallpaperManager.clear()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

背景 createConfigurationContext 配置  overrideConfiguration)
为当前上下文返回一个新的Context对象,但其资源被调整以匹配给定的配置。
背景 createDisplayContext 显示 显示)
为当前上下文返回一个新的Context对象,并调整其资源以匹配给定Display的指标。
背景 createPackageContext  String  packageName,int flags)
为给定的应用程序名称返回一个新的Context对象。
串[] databaseList ()
返回与该Context的应用程序包相关联的私有数据库的字符串数组。
布尔值 deleteDatabase  String  name)
删除与此Context的应用程序包关联的现有私有SQLiteDatabase。
布尔值 deleteFile  String  name)
删除与该Context的应用程序包相关联的给定私有文件。
void enforceCallingOrSelfPermission 字符串 权限, 字符串 消息)
如果您和您正在处理的IPC的调用进程都不被授予特定权限,则抛出一个  SecurityException
void enforceCallingOrSelfUriPermission  Uri  uri,int modeFlags,  String  message)
如果IPC的调用过程 或者您 没有被授予访问特定URI的权限,则抛出 SecurityException
void enforceCallingPermission  String 权限,  String 消息)
如果您正在处理的IPC的调用进程尚未被授予特定权限,则抛出一个 SecurityException
void enforceCallingUriPermission  Uri  uri,int modeFlags,  String  message)
如果调用进程和用户标识未被授予访问特定URI的权限,则抛出 SecurityException
void enforcePermission  String 权限,int pid,int uid,  String 消息)
如果在系统中运行的特定进程和用户ID不允许给定的权限,则抛出一个 SecurityException
void enforceUriPermission  Uri  uri,int pid,int uid,int modeFlags,  String  message)
如果特定进程和用户ID未被授予访问特定URI的权限,则抛出 SecurityException
void enforceUriPermission  Uri  uri,  String  readPermission,  String  writePermission,int pid,int uid,int modeFlags,  String  message)
执行Uri和正常许可。
串[] fileList ()
返回一个字符串数组,命名与该Context的应用程序包关联的私有文件。
背景 getApplicationContext ()
返回当前进程的单个全局Application对象的上下文。
ApplicationInfo getApplicationInfo ()
返回此上下文的包的完整应用程序信息。
AssetManager getAssets ()
返回应用程序包的AssetManager实例。
背景 getBaseContext ()
文件 getCacheDir ()
返回文件系统上应用程序特定缓存目录的绝对路径。
ClassLoader getClassLoader ()
返回一个可以用来检索此包中的类的类加载器。
ContentResolver getContentResolver ()
返回应用程序包的ContentResolver实例。
文件 getDatabasePath  String  name)
返回 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory) 存储创建数据库的文件系统上的绝对路径 
文件 getDir  String  name,int mode)
检索,创建如果需要,一个新的目录,应用程序可以在其中放置自己的自定义数据文件。
文件 getExternalCacheDir ()
返回主外部文件系统(即 Environment.getExternalStorageDirectory() 应用程序可以放置其所拥有的缓存文件的位置)的目录的绝对路径
文件[] GetExternalCacheDirs ()
在应用程序可以放置其所拥有的高速缓存文件的所有外部存储设备上返回到特定于应用程序的目录的绝对路径。
文件 getExternalFilesDir  String  type)
返回主外部文件系统(即某处 Environment.getExternalStorageDirectory() )的目录的绝对路径,其中应用程序可以放置其拥有的持久性文件。
文件[] getExternalFilesDirs  String  type)
返回所有外部存储设备上应用程序特定目录的绝对路径,应用程序可以放置其拥有的持久性文件。
文件 getFileStreamPath  String  name)
返回 openFileOutput(String, int) 存储创建文件的文件系统的绝对路径 
文件 getFilesDir ()
返回文件系统 openFileOutput(String, int) 中存储创建文件的目录的绝对路径
Looper getMainLooper ()
为当前进程的主线程返回Looper。
文件 getObbDir ()
返回可以找到此应用程序的OBB文件(如果有的话)的主外部存储目录。
文件[] getObbDirs ()
返回所有外部存储设备上应用程序特定目录的绝对路径,其中可以找到应用程序的OBB文件(如果有的话)。
getPackageCodePath ()
返回此上下文的主要Android软件包的完整路径。
PackageManager getPackageManager ()
返回PackageManager实例以查找全局包信息。
getPackageName ()
返回此应用程序的包的名称。
getPackageResourcePath ()
返回此上下文的主要Android软件包的完整路径。
资源 getResources ()
为应用程序的包返回一个Resources实例。
SharedPreferences getSharedPreferences  String  name,int mode)
检索并保留首选项文件'name'的内容,返回一个SharedPreferences,通过它可以检索和修改其值。
目的 getSystemService  String  name)
通过名称将句柄返回到系统级服务。
资源 getTheme ()
返回与此上下文关联的Theme对象。
可抽出 getWallpaper ()
此方法已弃用。WallpaperManager.get()改用。
int getWallpaperDesiredMinimumHeight ()
此方法已弃用。WallpaperManager.getDesiredMinimumHeight()改用。
int getWallpaperDesiredMinimumWidth ()
此方法已弃用。WallpaperManager.getDesiredMinimumWidth()改用。
void grantUriPermission  String  toPackage,  Uri  uri,int modeFlags)
授予访问特定Uri到另一个包的权限,无论该包是否具有访问Uri内容提供商的一般权限。
布尔值 isRestricted ()
指示此上下文是否受限。
FileInputStream openFileInput  String  name)
打开与该Context的应用程序包相关联的私有文件进行阅读。
FileOutputStream openFileOutput  String  name,int mode)
打开与此Context的应用程序包相关联的私有文件进行写入。
SQLiteDatabase openOrCreateDatabase  String  name,int mode,  SQLiteDatabase.CursorFactory  factory)
打开与此Context的应用程序包关联的新的私有SQLiteDatabase。
SQLiteDatabase openOrCreateDatabase  String  name,int mode,  SQLiteDatabase.CursorFactory  factory,  DatabaseErrorHandler  errorHandler)
打开与此Context的应用程序包关联的新的私有SQLiteDatabase。
可抽出 peekWallpaper ()
此方法已弃用。WallpaperManager.peek()改用。
意图 registerReceiver  BroadcastReceiver  receiver,  IntentFilter 过滤器)
注册要在主活动线程中运行的BroadcastReceiver。
意图 registerReceiver  BroadcastReceiver  receiver,  IntentFilter  filter,  String  broadcastPermission,  Handler  scheduler)
注册接收意向广播,在调度程序的上下文中  运行
void removeStickyBroadcast 意图 意图)
删除以前发送的数据 sendStickyBroadcast(Intent) ,这样就好像粘性广播从未发生过。
void removeStickyBroadcastAsUser  Intent  intent,  UserHandle 用户)
版本 removeStickyBroadcast(Intent) 允许您指定要发送广播的用户。
void revokeUriPermission  Uri  uri,int modeFlags)
删除所有访问以前添加的特定内容提供商Uri的权限 grantUriPermission(String, Uri, int)
void sendBroadcast 意图 意图)
将所有意向广播给所有感兴趣的BroadcastReceivers。
void sendBroadcast  Intent  intent,  String  receiverPermission)
将所有意向广播给所有感兴趣的BroadcastReceivers,允许执行可选的所需权限。
void sendBroadcastAsUser  Intent  intent,  UserHandle 用户)
版本 sendBroadcast(Intent) 允许您指定要发送广播的用户。
void sendBroadcastAsUser  Intent  intent,  UserHandle  user,  String  receiverPermission)
版本 sendBroadcast(Intent, String) 允许您指定要发送广播的用户。
void sendOrderedBroadcast  Intent  intent,  String  receiverPermission,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
版本 sendBroadcast(Intent) 允许您从广播中接收数据。
void sendOrderedBroadcast  Intent  intent,  String  receiverPermission)
将给定意图广播给所有感兴趣的BroadcastReceivers,一次提供一个,以允许更多的接收者在将其传送到较不优选的接收器之前消费广播。
void sendOrderedBroadcastAsUser  Intent  intent,  UserHandle  user,  String  receiverPermission,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
void sendStickyBroadcast 意图 意图)
执行一个 sendBroadcast(Intent) “粘性”,意思是在广播完成后,您发送的意图将保持不变,以便其他人可以通过返回值快速检索该数据 registerReceiver(BroadcastReceiver, IntentFilter)
void sendStickyBroadcastAsUser 意图 意图,  UserHandle 用户)
版本 sendStickyBroadcast(Intent) 允许您指定要发送广播的用户。
void sendStickyOrderedBroadcast  Intent  intent,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
版本 sendStickyBroadcast(Intent) 允许您从广播中接收数据。
void sendStickyOrderedBroadcastAsUser  Intent  intent,  UserHandle  user,  BroadcastReceiver  resultReceiver,  Handler  scheduler,int initialCode,  String  initialData,  Bundle  initialExtras)
版本  sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)  允许您指定要发送广播的用户。
void setTheme (int)
设置这个上下文的基础主题。
void setWallpaper 图位图)
此方法已弃用。WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

void setWallpaper  InputStream  data)
此方法已弃用。WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

void startActivities  Intent []  intents
同样 startActivities(Intent[], Bundle) ,没有指定的选项。
void startActivities  Intent []  intents  Bundle 选项)
启动多项新活动。
void startActivity 意图 意图)
同样 startActivity(Intent, Bundle) ,没有指定的选项。
void startActivity 意图 意图, 捆绑 选项)
启动新的活动。
布尔值 startInstrumentation  ComponentName  className,  String  profileFile,  Bundle 参数)
开始执行一个 Instrumentation 类。
void startIntentSender  IntentSender  intent,  Intent  fillInIntent,int flagsMask,int flagsValues,int extraFlags,  Bundle  options)
喜欢 startActivity(Intent, Bundle) ,但采取IntentSender启动。
void startIntentSender  IntentSender  intent,  Intent  fillInIntent,int flagsMask,int flagsValues,int extraFlags)
ComponentName startService 意图 服务)
请求启动给定的应用程序服务。
布尔值 stopService 意图 名称)
请求停止给定的应用程序服务。
void unbindService  ServiceConnection  conn)
断开应用程序服务。
void unregisterReceiver  BroadcastReceiver  receiver)
取消注册之前注册的BroadcastReceiver。
保护方法
void attachBaseContext  Context  base)
设置此ContextWrapper的基本上下文。
[扩大]
继承方法
 从类 android.content.Context
 从类 java.lang.Object

公共建设者


public ContextWrapper Context base)
API级别1中添加

公共方法


public boolean bindService Intent service,ServiceConnection conn,int flags)
API级别1中添加

连接到应用程序服务,如果需要创建它。这定义了应用程序和服务之间的依赖关系。给定的 连接将在创建时接收服务对象,并被告知它是否死亡并重新启动。只要呼叫上下文存在,该服务将被认为是系统所需要的。例如,如果此上下文是停止的活动,则在恢复活动之前,该服务将不再需要继续运行。

SecurityException如果您没有绑定到给定服务的权限,则此函数将抛出。

注意:不能从BroadcastReceiver组件调用 此方法。您可以使用从BroadcastReceiver到Service的通信的模式是调用 startService(Intent)包含要发送的命令的参数,服务stopSelf(int)在执行该命令时调用其 方法。请参阅API演示应用程序/服务/服务启动参数控制器。然而,使用已经注册的BroadcastReceiver的此方法是可以的 registerReceiver(BroadcastReceiver, IntentFilter),因为该BroadcastReceiver的生命周期与另一个对象(注册它的对象)绑定在一起。

参数
服务 标识要连接的服务。Intent可以指定显式组件名称或逻辑描述(操作,类别等)以匹配 IntentFilter服务发布的内容。
当服务启动和停止时接收信息。这必须是一个有效的ServiceConnection对象; 它不能为null。
标志 绑定的操作选项。可能是0, , BIND_AUTO_CREATEBIND_DEBUG_UNBIND, BIND_NOT_FOREGROUNDBIND_ABOVE_CLIENT, BIND_ALLOW_OOM_MANAGEMENTBIND_WAIVE_PRIORITY
返回
  • 如果您已成功绑定到该服务,true则返回; false如果没有连接,则返回,因此您将不会收到服务对象。
public int checkCallingOrSelfPermission String permission)
API级别1中添加

确定是否一个IPC的调用过程,或者您已被授予特定权限。这是一样的 checkCallingPermission(String),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
允许 正在检查的权限的名称。
返回
public int checkCallingOrSelfUriPermission Uri uri,int modeFlags)
API级别1中添加

确定是否一个IPC的调用过程,或者你已经获准访问特定URI。这是一样的 checkCallingUriPermission(Uri, int),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public int checkCallingPermission String permission)
API级别1中添加

确定您正在处理的IPC的调用进程是否已获得特定权限。这基本上是与调用 checkPermission(String, int, int)与PID和返回UID getCallingPid()getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此功能将始终失败。这样做是为了防止意外泄漏的权限; 你可以checkCallingOrSelfPermission(String) 用来避免这种保护。

参数
允许 正在检查的权限的名称。
返回
public int checkCallingUriPermission Uri uri,int modeFlags)
API级别1中添加

确定调用进程和用户标识是否已被授予访问特定URI的权限。这基本上是与调用checkUriPermission(Uri, int, int, int)与PID和返回UID getCallingPid()getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此功能将始终失败。

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public int checkPermission String permission,int pid,int uid)
API级别1中添加

确定在系统中运行的特定进程和用户ID是否允许给定的权限。

参数
允许 正在检查的权限的名称。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
返回
public int checkUriPermission Uri uri,int pid,int uid,int modeFlags)
API级别1中添加

确定特定进程和用户标识是否已被授予访问特定URI的权限。这只会检查明确授予的权限 - 如果给定的进程/ uid具有对URI内容提供商的更一般访问权限,则此检查将始终失败。

参数
uri 正在检查的uri。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public int checkUriPermission Uri uri,String readPermission,String writePermission,int pid,int uid,int modeFlags)
API级别1中添加

检查Uri和正常许可。这使您可以同时执行checkPermission(String, int, int),并checkUriPermission(Uri, int, int, int)在一次调用。

参数
uri Uri的权限要检查,否则不执行此检查。
readPermission 提供整体读取权限的权限,否则不执行此检查。
writePermission 提供整体写入权限的权限,否则不执行此检查。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
返回
public void clearWallpaper ()
API级别1中添加

此方法已弃用。
WallpaperManager.clear()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

投掷
IOException  
public Context createConfigurationContext 配置 overrideConfiguration)
API级别17中添加

为当前上下文返回一个新的Context对象,但其资源被调整以匹配给定的配置。每次调用此方法返回一个Context对象的新实例; 上下文对象不是共享的,但是通常的状态(ClassLoader,同一配置的其他资源)可能是这样,Context本身可以是相当轻量级的。

参数
overrideConfiguration 一个Configuration指定什么值在原来的语境资源的基础配置进行修改。如果基本配置发生更改(例如由于方向更改),则此上下文的资源也将更改,除了那些已使用值显式覆盖的内容。
返回
public Context createDisplayContext 显示显示)
API级别17中添加

为当前上下文返回一个新的Context对象,并调整其资源以匹配给定Display的指标。每次调用此方法返回一个Context对象的新实例; 上下文对象不是共享的,但是通常的状态(ClassLoader,同一配置的其他资源)可能是这样,Context本身可以是相当轻量级的。返回的显示上下文提供了一个配置为在给定显示上显示窗口的WindowManager (见getSystemService(String))。WindowManager的getDefaultDisplay() 方法可以用于从返回的上下文中检索显示。

参数
显示 一个Display对象,指定要衡量Context资源的度量标准的显示,以及应显示哪些新窗口。
返回
public Context createPackageContext String packageName,int flags)
API级别1中添加

为给定的应用程序名称返回一个新的Context对象。该上下文与命名应用程序启动时获取的内容相同,包含相同的资源和类加载器。每次调用此方法返回一个Context对象的新实例; 上下文对象不共享,但它们共享公共状态(Resources,ClassLoader等),因此Context实例本身是相当轻量级的。

PackageManager.NameNotFoundException如果没有给定的包名称的应用程序,则抛出。

抛出SecurityException如果请求上下文不能加载到调用者的出于安全原因的过程(参见 CONTEXT_INCLUDE_CODE更多信息}。

参数
packageName 应用程序包的名称
标志 选项标志,其中之一CONTEXT_INCLUDE_CODE 或CONTEXT_IGNORE_SECURITY
返回
public String [] databaseList ()
API级别1中添加

返回与该Context的应用程序包相关联的私有数据库的字符串数组。

返回
  • 数组命名私有数据库的字符串。
public boolean deleteDatabase String name)
API级别1中添加

删除与此Context的应用程序包关联的现有私有SQLiteDatabase。

参数
名称 数据库的名称(在应用程序包中唯一)。
返回
  • true如果数据库被成功删除; 否则false
public boolean deleteFile String name)
API级别1中添加

删除与该Context的应用程序包相关联的给定私有文件。

参数
名称 要删除的文件的名称; 不能包含路径分隔符。
返回
  • true如果文件已成功删除; 否则 false
public void enforceCallingOrSelfPermission String permission,String message)
API级别1中添加

如果您和您正在处理的IPC的调用进程都不被授予特定权限,则抛出一个 SecurityException。这是一样的enforceCallingPermission(String, String),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
允许 正在检查的权限的名称。
信息 如果抛出异常,则包含该消息。
public void enforceCallingOrSelfUriPermission Uri uri,int modeFlags,String message)
API级别1中添加

如果IPC的调用过程或者您没有被授予访问特定URI的权限,则抛出SecurityException。这是一样的enforceCallingUriPermission(Uri, int, String),除非它授予您自己的权限,如果您当前没有处理IPC。小心使用!

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public void enforceCallingPermission String permission,String message)
API级别1中添加

如果您正在处理的IPC的调用进程尚未被授予特定权限,则抛出一个SecurityException。这基本上是与调用 enforcePermission(String, int, int, String)与PID和返回UID getCallingPid() 和getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此函数将始终抛出SecurityException异常。这样做是为了防止意外泄漏的权限; 你可以enforceCallingOrSelfPermission(String, String)用来避免这种保护。

参数
允许 正在检查的权限的名称。
信息 如果抛出异常,则包含该消息。
public void enforceCallingUriPermission Uri uri,int modeFlags,String message)
API级别1中添加

如果调用进程和用户标识未被授予访问特定URI的权限,则抛出SecurityException。这基本上是与调用 enforceUriPermission(Uri, int, int, int, String)与PID和返回UID getCallingPid()getCallingUid()。一个重要的区别是,如果您当前没有处理IPC,则此函数将始终抛出SecurityException异常。

参数
uri 正在检查的uri。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public void enforcePermission String permission,int pid,int uid,String message)
API级别1中添加

如果在系统中运行的特定进程和用户ID不允许给定的权限,则抛出一个SecurityException

参数
允许 正在检查的权限的名称。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
信息 如果抛出异常,则包含该消息。
public void enforceUriPermission Uri uri,int pid,int uid,int modeFlags,String message)
API级别1中添加

如果特定进程和用户ID未被授予访问特定URI的权限,则抛出SecurityException。这只会检查明确授予的权限 - 如果给定的进程/ uid具有对URI内容提供商的更一般访问权限,则此检查将始终失败。

参数
uri 正在检查的uri。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public void enforceUriPermission Uri uri,String readPermission,String writePermission,int pid,int uid,int modeFlags,String message)
API级别1中添加

执行Uri和正常许可。这使您可以同时执行enforcePermission(String, int, int, String),并enforceUriPermission(Uri, int, int, int, String)在一次调用。

参数
uri Uri的权限要检查,否则不执行此检查。
readPermission 提供整体读取权限的权限,否则不执行此检查。
writePermission 提供整体写入权限的权限,否则不执行此检查。
pid 要检查的进程ID。必须> 0。
uid 要检查的用户ID。0的用户是root用户,它将通过每个权限检查。
modeFlags 获得授权的类型。可能是一个或两个 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
信息 如果抛出异常,则包含该消息。
public String [] fileList ()
API级别1中添加

返回一个字符串数组,命名与该Context的应用程序包关联的私有文件。

返回
  • 一组命名私有文件的字符串。
public Context getApplicationContext ()
API级别1中添加

返回当前进程的单个全局Application对象的上下文。这通常只能在需要一个生命周期与当前上下文分开的Context的情况下使用,该过程与进程的生命周期而不是当前组件相关联。

考虑一下如何与之互动 registerReceiver(BroadcastReceiver, IntentFilter)

  • 如果从活动上下文中使用,接收方正在该活动中注册。这意味着在活动完成销毁之前,您应该注销; 事实上,如果你不这样做,框架将清理您的泄漏注册,因为它删除活动并记录错误。因此,如果您使用活动上下文来注册一个静态的接收者(对进程的全局性,与活动实例无关),那么该注册将被删除,无论您使用的活动被销毁。

  • 如果从这里返回的上下文使用,接收方正在注册与您的应用程序相关联的全局状态。因此,永远不会被你注册。如果接收器与静态数据相关联,而不是特定的组件,则这是必要的。但是如果您忘记取消注册,取消绑定等等,那么在其他地方使用ApplicationContext可能会导致严重的泄漏。

public ApplicationInfo getApplicationInfo ()
API级别4中添加

返回此上下文的包的完整应用程序信息。

public AssetManager getAssets ()
API级别1中添加

返回应用程序包的AssetManager实例。

public Context getBaseContext ()
API级别1中添加

返回
  • 由构造函数或setBaseContext设置的基础上下文
public File getCacheDir ()
API级别1中添加

返回文件系统上应用程序特定缓存目录的绝对路径。这些文件将是设备在存储空间不足时首先被删除的文件。这些文件将被删除不能保证。 注意:您不应该依靠系统为您删除这些文件; 您应该总是有一个合理的最大值,例如1 MB,用于使用缓存文件的空间量,并在超出该空间时修剪这些文件。

返回
  • 目录保存应用程序缓存文件的路径。
public ClassLoader getClassLoader ()
API级别1中添加

返回一个可以用来检索此包中的类的类加载器。

public ContentResolver getContentResolver ()
API级别1中添加

返回应用程序包的ContentResolver实例。

public File getDatabasePath String name)
API级别1中添加

返回openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)存储创建数据库的文件系统上的绝对路径 。

参数
名称 要获取路径的数据库的名称。
返回
  • 给定数据库的绝对路径。
public File getDir String name,int mode)
API级别1中添加

检索,创建如果需要,一个新的目录,应用程序可以在其中放置自己的自定义数据文件。您可以使用返回的File对象来创建和访问此目录中的文件。请注意,通过File对象创建的文件只能由您自己的应用程序访问; 您只能设置整个目录的模式,而不是单个文件。

参数
名称 要检索的目录的名称。这是作为应用程序数据一部分创建的目录。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE并 MODE_WORLD_WRITEABLE控制权限。
返回
  • 一个File请求的目录对象。该目录将被创建,如果它不存在。
public File getExternalCacheDir ()
API级别8中添加

返回主外部文件系统(即Environment.getExternalStorageDirectory()应用程序可以放置其所拥有的缓存文件的位置)的绝对路径,这些文件在应用程序的内部,用户通常不作为媒体可见。

这就像getCacheDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 该平台并不总是监视外部存储器中可用的空间,因此可能不会自动删除这些文件。目前,这里的唯一时间文件将被平台删除,当运行JELLY_BEAN_MR1或更新时 Environment.isExternalStorageEmulated()返回true。请注意,您应该管理您将使用的最大空间,就像这样getCacheDir()
  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。有关Environment存储状态的信息,请参阅API 。
  • 这些文件没有执行安全性。例如,任何持有的应用程序WRITE_EXTERNAL_STORAGE都可以写入这些文件。

从开始KITKAT,无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它。这仅适用于为调用应用程序的程序包名生成的路径。访问属于其他包的路径WRITE_EXTERNAL_STORAGE 和/或是READ_EXTERNAL_STORAGE必需的。

在具有多个用户(如描述UserManager)的设备上,每个用户都有自己的隔离外部存储。应用程序只能为运行的用户访问外部存储。

返回
  • 在外部存储器上保存应用程序缓存文件的目录的路径。如果外部存储器当前未安装,则返回null,因此无法确保路径存在; 当可用时,您将需要再次调用此方法。
public File [] getExternalCacheDirs ()
API级别19中添加

在应用程序可以放置其所拥有的高速缓存文件的所有外部存储设备上返回到特定于应用程序的目录的绝对路径。这些文件是应用程序内部的,通常用户作为媒体通常不可见。

这就像getCacheDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。

这里返回的外部存储设备被认为是设备的永久部分,包括模拟的外部存储和物理介质插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,如USB闪存驱动器。

应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可能选择将大型文件存储在具有最多可用空间的设备上,如通过测量StatFs

无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它们。在二级外部存储设备上写入这些路径之外的访问不可用。

返回的第一个路径与getExternalCacheDir()。返回的路径可能是null存储设备不可用。

public File getExternalFilesDir String type)
API级别8中添加

返回主外部文件系统(即某处Environment.getExternalStorageDirectory())的目录的绝对路径,其中应用程序可以放置其拥有的持久性文件。这些文件是应用程序的内部,用户作为媒体通常不可见。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。有关Environment存储状态的信息,请参阅API 。
  • 这些文件没有执行安全性。例如,任何持有的应用程序WRITE_EXTERNAL_STORAGE都可以写入这些文件。

从开始KITKAT,无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它。这仅适用于为调用应用程序的程序包名生成的路径。访问属于其他包的路径WRITE_EXTERNAL_STORAGE 和/或是READ_EXTERNAL_STORAGE必需的。

在具有多个用户(如描述UserManager)的设备上,每个用户都有自己的隔离外部存储。应用程序只能为运行的用户访问外部存储。

以下是在应用程序的私有存储中操作文件的典型代码示例:

void createExternalStoragePrivateFile (){ //创建一个我们将私有文件放在外部//存储上的路径File file = new File getExternalFilesDir null ),“DemoFile.jpg” ); 尝试{ //非常简单的代码将图片从应用程序的//资源复制到外部文件中。请注意,此代码不会检查错误,并假定图片很小(不要尝试以块形式复制)。请注意,如果外部存储器//当前未安装,则会静默失败。InputStream is = getResources ()。openRawResource ř 绘制气球); OutputStream os = new FileOutputStream file ); byte [] data = new byte [ is available ()]; 数据);         os 数据); 关闭();         os 关闭(); } catch IOException e { //无法创建文件,可能是因为外部存储尚未安装。登录w “ExternalStorage” “写入错误” + 文件e ); } } void deleteExternalStoragePrivateFile (){ //获取外部存储上的文件路径。如果外部//存储器当前没有挂载,这将失败。File file = new File getExternalFilesDir null ),“DemoFile.jpg” ); if file != null {         file delete (); } } boolean hasExternalStoragePrivateFile (){ //获取外部存储上的文件路径。如果外部//存储器当前没有挂载,这将失败。File file = new File getExternalFilesDir null ),“DemoFile.jpg” ); 如果文件= null { return file exists (); } return false ; } 
    
    
       

     
        
        
        
        
        
          
          
          
        

        

       
        
        
          
    


 
    
    
       
       

    


 
    
    
       
       
        
    
     

如果向此函数提供非空类型,则返回的文件将是指定给定类型的子目录的路径。虽然介质扫描程序不会自动扫描这些文件,但您可以使用这些文件将其显式添加到介质数据库 MediaScannerConnection.scanFile。请注意,这不同于 Environment.getExternalStoragePublicDirectory(),它提供了所有应用程序共享的媒体目录。这里返回的目录由应用程序拥有,并且在卸载应用程序时将删除其内容。与此不同 Environment.getExternalStoragePublicDirectory(),此处返回的目录将自动为您创建。

以下是在应用程序的私有存储中处理图片并将其添加到媒体数据库的典型代码示例:

void createExternalStoragePrivatePicture (){ //创建一个路径,我们将把我们的图片放在我们自己的私人//图片目录中。请注意,我们不需要在DIRECTORY_PICTURES中放置//图片,因为媒体扫描器将会看到//这些目录中的所有媒体; 这可能与其他//媒体类型(例如DIRECTORY_MUSIC)有用,可帮助您将媒体分类到用户显示。文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); File file = new File path “DemoPicture.jpg” ); 尝试{ //非常简单的代码将图片从应用程序的//资源复制到外部文件中。请注意,此代码不会检查错误,并假定图片很小(不要尝试以块形式复制)。请注意,如果外部存储器//当前未安装,则会静默失败。InputStream is = getResources ()。openRawResource ř 绘制气球); OutputStream os = new FileOutputStream file ); byte [] data = new byte [ is available ()]; 数据);         os 数据); 关闭();         os 关闭(); //告诉媒体扫描器有关新文件,以便它立即可供用户使用。MediaScannerConnection SCANFILE 的String [] { 文件的toString ()},null 新的MediaScannerConnection OnScanCompletedListener (){ public void onScanCompleted String path Uri uri { Log i “ExternalStorage” “Scanned” + path + “:” ); 登录“ExternalStorage” “ - > uri =” + uri ); } }); } catch IOException e { //无法创建文件,可能是因为外部存储尚未安装。登录w “ExternalStorage” “写入错误” + 文件e ); } } void deleteExternalStoragePrivatePicture (){ //创建一个路径,我们将把我们的图片放在用户的公共图片目录中,并删除该文件。如果外部//存储器当前没有挂载,这将失败。文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” );         文件delete (); } } boolean hasExternalStoragePrivatePicture (){ //创建一个路径,我们将把我们的图片放在用户的公共图片目录中,并检查文件是否存在。如果//当前未安装外部存储器,则会认为//图片不存在。文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } 文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } 文件路径= getExternalFilesDir 环境DIRECTORY_PICTURES ); if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } if path != null { File file = new File path “DemoPicture.jpg” ); 返回文件exists (); } return false ; } 
    
    
    
    
    
    
    
       

     
        
        
        
        
        
          
          
          
        

        


        
        
        
                    
                  
               
                   
                  
            
        
       
        
        
          
    


 
    
    
    
    
       
           

    


 
    
    
    
    
    
       
           
        
    
     

参数
类型 要返回的文件目录的类型。可能是空的文件,目录或子目录下面的环境常量之一根: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONESDIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES,或 DIRECTORY_MOVIES
返回
  • 在外部存储器上保存应用程序文件的目录的路径。如果外部存储器当前未安装,则返回null,因此无法确保路径存在; 当可用时,您将需要再次调用此方法。
public File [] getExternalFilesDirs String type)
API级别19中添加

返回所有外部存储设备上应用程序特定目录的绝对路径,应用程序可以放置其拥有的持久性文件。这些文件是应用程序内部的,通常用户作为媒体通常不可见。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。

这里返回的外部存储设备被认为是设备的永久部分,包括模拟的外部存储和物理介质插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,如USB闪存驱动器。

应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可能选择将大型文件存储在具有最多可用空间的设备上,如通过测量StatFs

无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它们。在二级外部存储设备上写入这些路径之外的访问不可用。

返回的第一个路径与getExternalFilesDir(String)。返回的路径可能是null存储设备不可用。

public File getFileStreamPath String name)
API级别1中添加

返回openFileOutput(String, int)存储创建文件的文件系统的绝对路径 。

参数
名称 要获取路径的文件的名称。
返回
  • 给定文件的绝对路径。
public File getFilesDir ()
API级别1中添加

返回文件系统openFileOutput(String, int)中存储创建文件的目录的绝对路径。

返回
  • 目录保存应用程序文件的路径。
public Looper getMainLooper ()
API级别1中添加

为当前进程的主线程返回Looper。这是用于调度应用程序组件(活动,服务等)的线程。

根据定义,该方法返回与通过调用获得的结果相同的结果Looper.getMainLooper()

返回
  • 主要活套。
public File getObbDir ()
已在 API级别11中添加

返回可以找到此应用程序的OBB文件(如果有的话)的主外部存储目录。请注意,如果应用程序没有任何OBB文件,则该目录可能不存在。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。例如,任何持有的应用程序WRITE_EXTERNAL_STORAGE都可以写入这些文件。

从开始KITKAT,无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它。这仅适用于为调用应用程序的程序包名生成的路径。访问属于其他包的路径WRITE_EXTERNAL_STORAGE 和/或是READ_EXTERNAL_STORAGE必需的。

在具有多个用户(如所述UserManager)的设备上,多个用户可以共享相同的OBB存储位置。应用程序应确保在不同用户下运行的多个实例不会互相干扰。

public File [] getObbDirs ()
API级别19中添加

返回所有外部存储设备上应用程序特定目录的绝对路径,其中可以找到应用程序的OBB文件(如果有的话)。注意,如果应用程序没有任何OBB文件,这些目录可能不存在。

这就像getFilesDir()在卸载应用程序时这些文件将被删除,但是有一些重要的区别:

  • 外部文件不总是可用的:如果用户将外部存储器安装在计算机上或将其删除,则它们将消失。
  • 这些文件没有执行安全性。

这里返回的外部存储设备被认为是设备的永久部分,包括模拟的外部存储和物理介质插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,如USB闪存驱动器。

应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可能选择将大型文件存储在具有最多可用空间的设备上,如通过测量StatFs

无需读取或写入返回路径的权限; 呼叫应用程序始终可以访问它们。在二级外部存储设备上写入这些路径之外的访问不可用。

返回的第一个路径与getObbDir()。返回的路径可能是null存储设备不可用。

public String getPackageCodePath ()
API级别1中添加

返回此上下文的主要Android软件包的完整路径。Android包是一个包含应用程序的主要代码和资产的ZIP文件。

注意:这对于应用程序通常不是有用的,因为它们不应该直接访问文件系统。

返回
  • 字符串代码和资产的路径。
public PackageManager getPackageManager ()
API级别1中添加

返回PackageManager实例以查找全局包信息。

public String getPackageName ()
API级别1中添加

返回此应用程序的包的名称。

public String getPackageResourcePath ()
API级别1中添加

返回此上下文的主要Android软件包的完整路径。Android包是一个包含应用程序主要资源的ZIP文件。

注意:这对于应用程序通常不是有用的,因为它们不应该直接访问文件系统。

返回
  • 字符串资源的路径。
public Resources getResources ()
API级别1中添加

为应用程序的包返回一个Resources实例。

public SharedPreferences getSharedPreferences String name,int mode)
API级别1中添加

检索并保留首选项文件'name'的内容,返回一个SharedPreferences,通过它可以检索和修改其值。只有一个SharedPreferences对象的实例返回给任何一个同名的调用者,这意味着它们会在制作完成后立即看到对方的编辑。

参数
名称 所需的首选项文件。如果此名称的首选项文件不存在,则在您检索编辑器(SharedPreferences.edit())然后提交更改(Editor.commit())时将创建它。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE 并MODE_WORLD_WRITEABLE控制权限。MODE_MULTI_PROCESS如果多个进程突破相同的SharedPreferences文件,也可以使用该位 。 MODE_MULTI_PROCESS 始终在应用程序中定位Gingerbread(Android 2.3)及以下版本,默认情况下在以后版本中关闭。
返回
public Object getSystemService String name)
API级别1中添加

通过名称将句柄返回到系统级服务。返回对象的类根据请求的名称而异。目前可用的名称有:

WINDOW_SERVICE (“窗口”)
您可以在其中放置自定义窗口的顶级窗口管理器。返回的对象是a  WindowManager
LAYOUT_INFLATER_SERVICE (“layout_inflater”)
LayoutInflater在这种情况下膨胀布局资源。
ACTIVITY_SERVICE (“活动”)
ActivityManager用于与系统的全局活动状态进行交互。
POWER_SERVICE (“功率”)
PowerManager用于控制电源管理。
ALARM_SERVICE (“报警”)
AlarmManager用于在您选择时收到意向。
NOTIFICATION_SERVICE (“通知”)
NotificationManager用于通知用户背景事件。
KEYGUARD_SERVICE (“keyguard”)
KeyguardManager用于控制键盘保护
LOCATION_SERVICE (“位置”)
LocationManager用于控制位置(例如,GPS)更新。
SEARCH_SERVICE (“搜索”)
SearchManager用于处理搜索。
VIBRATOR_SERVICE (“振动器”)
Vibrator用于与振动器硬件相互作用。
CONNECTIVITY_SERVICE (“连接”)
ConnectivityManager用于处理网络连接的管理。
WIFI_SERVICE (“无线上网”)
WifiManager用于管理Wi-Fi连接。
INPUT_METHOD_SERVICE (“输入法”)
一个 InputMethodManager 用于输入法管理。
UI_MODE_SERVICE (“uimode”)
一种 UiModeManager用于控制用户界面模式。
DOWNLOAD_SERVICE (“下载”)
DownloadManager用于请求HTTP下载

注意:通过此API获取的系统服务可能与从其获取的上下文密切相关。一般来说,不要在各种不同的上下文(活动,应用程序,服务,提供商等)之间共享服务对象

参数
名称 所需服务的名称。
返回
  • 该服务,如果名称不存在,则为null。
public Resources.Theme getTheme ()
API级别1中添加

返回与此上下文关联的Theme对象。

public Drawable getWallpaper ()
API级别1中添加

此方法已弃用。
WallpaperManager.get()改用。

public int getWallpaperDesiredMinimumHeight ()
API级别1中添加

此方法已弃用。
WallpaperManager.getDesiredMinimumHeight()改用。

public int getWallpaperDesiredMinimumWidth ()
API级别1中添加

此方法已弃用。
WallpaperManager.getDesiredMinimumWidth()改用。

public void grantUriPermission String toPackage,Uri uri,int modeFlags)
API级别1中添加

授予访问特定Uri到另一个包的权限,无论该包是否具有访问Uri内容提供商的一般权限。这可以用于授予特定的临时权限,通常是响应于用户交互(例如用户打开您希望其他人显示的附件)。

通常,您应该使用Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION使用Intent直接启动活动而不是此功能。如果您直接使用此功能,那么revokeUriPermission(Uri, int)当目标不再允许访问它时,您应该确保调用 。

要成功,拥有Uri的内容提供商必须 grantUriPermissions在其清单中设置<grant-uri-permissions>属性或包含 标签。

参数
包装 您希望允许访问Uri的软件包。
uri 您想要授予访问权限的Uri。
modeFlags 所需的访问模式。任何组合 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
public boolean isRestricted ()
API级别4中添加

指示此上下文是否受限。

返回
  • true如果此上下文受限制,false否则。
public FileInputStream openFileInput String name)
API级别1中添加

打开与该Context的应用程序包相关联的私有文件进行阅读。

参数
名称 要打开的文件的名称; 不能包含路径分隔符。
返回
public FileOutputStream openFileOutput String name,int mode)
API级别1中添加

打开与此Context的应用程序包相关联的私有文件进行写入。创建文件(如果不存在)。

参数
名称 要打开的文件的名称; 不能包含路径分隔符。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_APPEND附加到现有文件, MODE_WORLD_READABLEMODE_WORLD_WRITEABLE控制权限。
返回
public SQLiteDatabase openOrCreateDatabase String name,int mode,SQLiteDatabase.CursorFactory factory)
API级别1中添加

打开与此Context的应用程序包关联的新的私有SQLiteDatabase。创建数据库文件(如果不存在)。

参数
名称 数据库的名称(在应用程序包中唯一)。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE 并MODE_WORLD_WRITEABLE控制权限。用于MODE_ENABLE_WRITE_AHEAD_LOGGING默认启用预写记录。
调用查询时调用实例化一个游标的可选工厂类。
返回
  • 具有给定名称的新创建的数据库的内容。
public SQLiteDatabase openOrCreateDatabase String name,int mode,SQLiteDatabase.CursorFactoryfactory,DatabaseErrorHandler errorHandler)
已在 API级别11中添加

打开与此Context的应用程序包关联的新的私有SQLiteDatabase。创建数据库文件(如果不存在)。

接受输入参数:DatabaseErrorHandler当sqlite报告数据库损坏时,用于处理损坏的具体实例。

参数
名称 数据库的名称(在应用程序包中唯一)。
模式 操作模式。使用0或MODE_PRIVATE默认操作,MODE_WORLD_READABLE 并MODE_WORLD_WRITEABLE控制权限。用于MODE_ENABLE_WRITE_AHEAD_LOGGING默认启用预写记录。
调用查询时调用实例化一个游标的可选工厂类。
errorHandler DatabaseErrorHandler当sqlite的报告数据库损坏时使用。如果为空,DefaultDatabaseErrorHandler则为假。
返回
  • 具有给定名称的新创建的数据库的内容。
公众 可绘制 peekWallpaper ()
API级别1中添加

此方法已弃用。
WallpaperManager.peek()改用。

public Intent registerReceiver BroadcastReceiver receiver,IntentFilter filter)
API级别1中添加

注册要在主活动线程中运行的BroadcastReceiver。该 接收器将匹配任何广播意图被称为过滤器,在主应用程序线程。

该系统可以播放“粘性”的意图 - 这些在广播完成后留下来,发送到任何后续的注册。如果您的IntentFilter匹配这些粘意图之一,是意图将这个函数返回 ,并发送至接收器,就好像它刚刚被播出。

可能有多个粘性意图匹配过滤器,在这种情况下,这些将被发送到接收器。在这种情况下,这些函数只能直接返回其中的一个; 返回的哪一个由系统任意决定。

如果你知道你注册的意图是粘性的,你可以为你的接收者提供null 。在这种情况下,没有注册接收者 - 该函数只返回匹配过滤器的粘性意图。在多次匹配的情况下,适用与上述相同的规则。

查看BroadcastReceiver有关Intent广播的更多信息。

由于ICE_CREAM_SANDWICH,用这种方法注册的接收器将正确尊重 setPackage(String)指定的意图正在播出。在此之前,它将被忽略并传递给所有匹配的注册接收器。如果使用这个安全,请小心。

注意:该方法不能从 BroadcastReceiver组件调用; 也就是说,来自在应用程序的清单中声明的​​BroadcastReceiver。然而,可以从另一个已经在运行时注册的BroadcastReceiver来调用此方法registerReceiver(BroadcastReceiver, IntentFilter),因为这样注册的BroadcastReceiver的生命周期与注册的对象相关联。

参数
接收器 BroadcastReceiver处理广播。
过滤 选择要接收的意向广播。
返回
  • 第一个粘性意图发现匹配过滤器,如果没有匹配过滤器,则为null。
public Intent registerReceiver BroadcastReceiver receiver,IntentFilter filter,String broadcastPermission,Handlerscheduler)
API级别1中添加

注册接收意向广播,在调度程序的上下文中 运行。查看 registerReceiver(BroadcastReceiver, IntentFilter)更多信息。这允许您强制执行谁可以向接收方广播意图的权限,或者让接收者在与主应用程序线程不同的线程中运行。

查看BroadcastReceiver有关Intent广播的更多信息。

由于ICE_CREAM_SANDWICH,用这种方法注册的接收器将正确尊重 setPackage(String)指定的意图正在播出。在此之前,它将被忽略并传递给所有匹配的注册接收器。如果使用这个安全,请小心。

参数
接收器 BroadcastReceiver处理广播。
过滤 选择要接收的意向广播。
broadcastPermission 字符串命名广播者必须持有的权限才能向您发送Intent。如果为空,则不需要权限。
调度器 处理程序识别将接收到意图的线程。如果为null,将使用进程的主线程。
返回
  • 第一个粘性意图发现匹配过滤器,如果没有匹配过滤器,则为null。
public void removeStickyBroadcast Intent intent)
API级别1中添加

删除以前发送的数据sendStickyBroadcast(Intent),这样就好像粘性广播从未发生过。

您必须持有该BROADCAST_STICKY 权限才能使用此API。如果您不持有该权限,SecurityException将被抛出。

参数
意图 以前广播的意图。
public void removeStickyBroadcastAsUser Intent intent,UserHandle user)
API级别17中添加

版本removeStickyBroadcast(Intent)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

您必须持有该BROADCAST_STICKY 权限才能使用此API。如果您不持有该权限,SecurityException将被抛出。

参数
意图 以前广播的意图。
用户 UserHandle从中删除粘性广播。
public void revokeUriPermission Uri uri,int modeFlags)
API级别1中添加

删除所有访问以前添加的特定内容提供商Uri的权限grantUriPermission(String, Uri, int)。给定的Uri将匹配与给定Uri相同或子路径的所有以前授予的Uris。也就是说,撤销“content:// foo / target”将撤销“content:// foo / target”和“content:// foo / target / sub”,而不是“content:// foo”。

参数
uri 你想撤销Uri的访问权限。
modeFlags 所需的访问模式。任何组合 Intent.FLAG_GRANT_READ_URI_PERMISSION或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION
public void sendBroadcast Intent intent)
API级别1中添加

将所有意向广播给所有感兴趣的BroadcastReceivers。这个调用是异步的 它立即返回,并且您将在运行接收器时继续执行。接收机不传播结果,接收机不能中止广播。如果要允许接收者传播结果或中止广播,则必须使用有序广播发送 sendOrderedBroadcast(Intent, String)

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
public void sendBroadcast Intent intent,String receiverPermission)
API级别1中添加

将所有意向广播给所有感兴趣的BroadcastReceivers,允许执行可选的所需权限。这个调用是异步的 它立即返回,并且您将在运行接收器时继续执行。接收机不传播结果,接收机不能中止广播。如果要允许接收者传播结果或中止广播,则必须使用有序广播发送 sendOrderedBroadcast(Intent, String)

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
receiverPermission (可选)字符串命名接收方必须拥有的权限才能接收广播。如果为空,则不需要权限。
public void sendBroadcastAsUser Intent intent,UserHandle user)
API级别17中添加

版本sendBroadcast(Intent)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

参数
意图 意图广播
用户 UserHandle发送的意图。
public void sendBroadcastAsUser Intent intent,UserHandle user,String receiverPermission)
API级别17中添加

版本sendBroadcast(Intent, String)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
用户 UserHandle发送的意图。
receiverPermission (可选)字符串命名接收方必须拥有的权限才能接收广播。如果为空,则不需要权限。
public void sendOrderedBroadcast Intent intent,String receiverPermission,BroadcastReceiver resultReceiver,Handlerscheduler,int initialCode,String initialData,Bundle initialExtras)
API级别1中添加

版本sendBroadcast(Intent)允许您从广播中接收数据。这是通过在调用时提供您自己的BroadcastReceiver来完成的,这将在广播结束时被视为最终的接收者 - 其onReceive(Context, Intent)方法将使用从其他接收器收集 的结果值进行调用。广播将以与呼叫相同的方式进行序列化 sendOrderedBroadcast(Intent, String)

喜欢sendBroadcast(Intent),这种方法是异步的; 它将在resultReceiver.onReceive()被调用之前返回。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
receiverPermission 字符串命名接收者必须拥有的权限才能接收广播。如果为空,则不需要权限。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void sendOrderedBroadcast Intent intent,String receiverPermission)
API级别1中添加

将给定意图广播给所有感兴趣的BroadcastReceivers,一次提供一个,以允许更多的接收者在将其传送到较不优选的接收器之前消费广播。这个调用是异步的 它立即返回,并且您将在运行接收器时继续执行。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
receiverPermission (可选)字符串命名接收方必须拥有的权限才能接收广播。如果为空,则不需要权限。
public void sendOrderedBroadcastAsUser Intent intent,UserHandle user,String receiverPermission,BroadcastReceiverresultReceiver,Handler scheduler,int initialCode,String initialData,Bundle initialExtras)
API级别17中添加

版本 sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
用户 UserHandle发送的意图。
receiverPermission 字符串命名接收者必须拥有的权限才能接收广播。如果为空,则不需要权限。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void sendStickyBroadcast Intent intent)
API级别1中添加

执行一个sendBroadcast(Intent)“粘性”,意味着广播完成后,您发送的意图将保持不变,以便其他人可以通过返回值快速检索该数据registerReceiver(BroadcastReceiver, IntentFilter)。在所有其他方面,这样做都是一样的 sendBroadcast(Intent)

您必须持有该BROADCAST_STICKY 权限才能使用此API。如果您不持有该权限,SecurityException将被抛出。

参数
意图 意图广播; 所有符合此意图的接收器都将接收广播,而意向将被重新广播到未来的接收者。
public void sendStickyBroadcastAsUser Intent intent,UserHandle user)
API级别17中添加

版本sendStickyBroadcast(Intent)允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

参数
意图 意图广播; 所有符合此意图的接收器都将接收广播,而意向将被重新广播到未来的接收者。
用户 UserHandle发送的意图。
public void sendStickyOrderedBroadcast Intent intent,BroadcastReceiver resultReceiver,Handler scheduler,int initialCode,String initialData,Bundle initialExtras)
API级别5中添加

版本sendStickyBroadcast(Intent)允许您从广播中接收数据。这是通过在调用时提供您自己的BroadcastReceiver来完成的,这将在广播结束时被视为最终的接收者 - 其onReceive(Context, Intent)方法将使用从其他接收器收集 的结果值进行调用。广播将以与呼叫相同的方式进行序列化 sendOrderedBroadcast(Intent, String)

喜欢sendBroadcast(Intent),这种方法是异步的; 它将在resultReceiver.onReceive()被调用之前返回。请注意,存储的粘性数据只是您最初提供给广播的数据,而不是由接收者进行的任何更改的结果。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void sendStickyOrderedBroadcastAsUser Intent intent,UserHandle user,BroadcastReceiver resultReceiver,Handlerscheduler,int initialCode,String initialData,Bundle initialExtras)
API级别17中添加

版本 sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) 允许您指定要发送广播的用户。这不适用于系统映像上未预先安装的应用程序。使用它需要持有INTERACT_ACROSS_USERS权限。

查看BroadcastReceiver有关Intent广播的更多信息。

参数
意图 意图广播; 所有符合此意图的接收者都将收到广播。
用户 UserHandle发送的意图。
resultReceiver 您自己的BroadcastReceiver将其视为广播的最终接收者。
调度器 用于调度resultReceiver回调的自定义处理程序; 如果为null,它将被安排在Context的主线程中。
initialCode 结果代码的初始值。经常活动.RESULT_OK。
initialData 结果数据的初始值。通常为零。
initialExtras 结果额外的初始值。通常为零。
public void setTheme (int resid)
API级别1中添加

设置这个上下文的基础主题。请注意,在上下文中实例化任何视图之前(例如在调用setContentView(View)或 调用之前)应该调用此参数inflate(int, ViewGroup)

参数
渣滓 描述主题的风格资源。
public void setWallpaper Bitmap bitmap)
API级别1中添加

此方法已弃用。
WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

投掷
IOException  
public void setWallpaper InputStream data)
API级别1中添加

此方法已弃用。
WallpaperManager.set()改用。

该方法要求呼叫者持有该权限 SET_WALLPAPER

投掷
IOException  
public void startActivities Intent [] intents 
已在 API级别11中添加

同样startActivities(Intent[], Bundle),没有指定的选项。

参数
意图 一系列意向启动。
public void startActivities Intent [] intents Bundle options)
添加在 API级别16

启动多项新活动。这通常与调用 startActivity(Intent)数组中的第一个Intent一样,在创建时调用startActivity(Intent) 第二个条目的活动等。请注意,与该方法不同,通常不会在此创建除数组中最后一个以外的任何活动点,而是当用户首次访问它们时(由于从顶部的活动返回)创建。

ActivityNotFoundException 如果没有为任何给定的Intent 找到活动,此方法将抛出。在这种情况下,活动堆栈的状态是未定义的(列表中的某些意图可能在其中,有些不在),因此您可能希望避免这种情况。

参数
意图 一系列意向启动。
选项 关于如何启动活动的其他选项。查看Context.startActivity(Intent, Bundle)更多详情。
public void startActivity Intent intent)
API级别1中添加

同样startActivity(Intent, Bundle),没有指定的选项。

参数
意图 描述要开始的活动。
public void startActivity Intent intent,Bundle options)
添加在 API级别16

启动新的活动。您将不会收到有关活动何时退出的任何信息。

请注意,如果从外部调用此方法 Activity,则Intent必须包含FLAG_ACTIVITY_NEW_TASK启动标志。这是因为,没有从现有的活动开始,没有任何现有的任务来放置新的活动,因此它需要放在自己的单独任务中。

ActivityNotFoundException 如果没有找到运行给定Intent的Activity,该方法将抛出。

参数
意图 描述要开始的活动。
选项 关于如何启动活动的其他选项。如果没有选项,可能为null。看看ActivityOptions 如何构建这里提供的捆绑包; 没有支持手动构建它们的定义。
public boolean startInstrumentation ComponentName className,String profileFile,Bundle arguments)
API级别1中添加

开始执行一个Instrumentation类。给定的Instrumentation组件将通过杀死其目标应用程序(如果当前运行),启动目标进程,实例化仪器组件,然后让其驱动应用程序来运行。

此功能不是同步的 - 一旦仪器启动并运行,它将返回。

仪器通常只允许与未签名或签名的软件包一起运行,该软件包也带有签名的签名(确保目标信任工具)。

参数
班级名称 要运行的Instrumentation组件的名称。
profileFile 仪表运行时写入分析数据的可选路径,否则不进行分析。
参数 附加的可选参数传递给仪器,或为空。
返回
  • true如果仪器成功启动,否则false无法找到。
public void startIntentSender IntentSender intent,Intent fillInIntent,int flagsMask,int flagsValues,int extraFlags,Bundleoptions)
添加在 API级别16

喜欢startActivity(Intent, Bundle),但采取IntentSender启动。如果IntentSender是一个活动,那么这个活动就像你在startActivity(Intent) 这里打电话给你一样;否则,它的相关联的动作将被执行(例如发送广播),就像你已经调用 IntentSender.sendIntent一样。

参数
意图 IntentSender启动。
fillInIntent 如果非空,则将作为intent参数提供sendIntent(Context, int, Intent, IntentSender.OnFinished, Handler)
flagsMask 您想要更改的原始IntentSender中的Intent标志。
flagsValuesflagsMask中设置的任何位的所需值 
extraFlags 始终设置为0。
选项 关于如何启动活动的其他选项。查看Context.startActivity(Intent, Bundle)更多详情。如果IntentSender还提供了选项,这里给出的选项将覆盖与IntentSender给出的任何冲突。
public void startIntentSender IntentSender intent,Intent fillInIntent,int flagsMask,int flagsValues,int extraFlags)
API级别5中添加
参数
意图 IntentSender启动。
fillInIntent 如果非空,则将作为intent参数提供sendIntent(Context, int, Intent, IntentSender.OnFinished, Handler)
flagsMask 您想要更改的原始IntentSender中的Intent标志。
flagsValuesflagsMask中设置的任何位的所需值 
extraFlags 始终设置为0。
public ComponentName startService 意图服务)
API级别1中添加

请求启动给定的应用程序服务。意图应包含要启动的特定服务实现的完整类名称或要定位的特定包名称。如果Intent指定较少,则会记录有关此警告的信息,并且查找和使用的多个匹配服务中的哪一个将不被定义。如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程); 如果它正在运行,那么它仍然运行。

对此方法的每次调用将导致对目标服务onStartCommand(Intent, int, int)方法的相应调用,具有此处给出的意图。这提供了一种方便的方式将作业提交到服务,而无需绑定和调用其接口。

使用startService()将覆盖由bindService(Intent, ServiceConnection, int)以下管理的默认服务生命周期:它要求服务保持运行直到stopService(Intent)被调用,而不管任何客户端是否连接到它。请注意,对startService()的调用不是嵌套的:无论你调用startService()多少次,一次调用stopService(Intent)将会停止它。

系统尝试尽可能多地运行服务。他们应该停止的唯一时间是,如果当前的前台应用程序正在使用这么多资源,服务需要被杀死。如果在服务过程中发生任何错误,它将自动重新启动。

SecurityException如果您没有启动给定服务的权限,则此函数将抛出。

参数
服务 标识要开始的服务。意图必须是完全显式的(提供组件名称)或指定其定向的特定包名称。附加值可能包含在意向附加中,以提供参数以及此特定的开始调用。
返回
  • 如果服务正在启动或已经运行, ComponentName则返回已启动的实际服务; 否则如果服务不存在则返回null。
public boolean stopService Intent name)
API级别1中添加

请求停止给定的应用程序服务。如果服务没有运行,没有任何反应。否则停止。请注意,对startService()的调用不计算在内,无论启动多少次,都会停止该服务。

请注意,如果停止的服务仍然具有与ServiceConnection 集合绑定的对象BIND_AUTO_CREATE,则在所有这些绑定都被删除之前,它将不会被销毁。有关Service服务生命周期的更多详细信息,请参阅文档。

SecurityException如果您没有停止给定服务的权限,则此函数将抛出。

参数
名称 要停止的服务说明 意图必须是完全显式的(提供组件名称)或指定其定向的特定包名称。
返回
  • 如果存在与已经运行的给定Intent匹配的服务,则它被停止并被true返回; 否则false返回。
public void unbindService ServiceConnection conn)
API级别1中添加

断开应用程序服务。随着服务重新启动,您将不再接听电话,现在该服务可以随时停止。

参数
之前提供给bindService()的连接接口。此参数不能为空。
public void unregisterReceiver BroadcastReceiver receiver)
API级别1中添加

取消注册之前注册的BroadcastReceiver。 已经为此BroadcastReceiver注册的所有过滤器将被删除。

参数
接收器 BroadcastReceiver取消注册。

保护方法


protected void attachBaseContext Context base)
API级别1中添加

设置此ContextWrapper的基本上下文。然后将所有呼叫委派给基本上下文。如果已经设置了基本上下文,则抛出IllegalStateException。

参数
基础 这个包装器的新的基础上下文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值