• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.content;
18 
19 import android.content.pm.ApplicationInfo;
20 import android.content.pm.PackageManager;
21 import android.content.res.AssetManager;
22 import android.content.res.Resources;
23 import android.content.res.TypedArray;
24 import android.database.DatabaseErrorHandler;
25 import android.database.sqlite.SQLiteDatabase;
26 import android.database.sqlite.SQLiteDatabase.CursorFactory;
27 import android.graphics.Bitmap;
28 import android.graphics.drawable.Drawable;
29 import android.media.MediaScannerConnection.OnScanCompletedListener;
30 import android.net.Uri;
31 import android.os.Bundle;
32 import android.os.Handler;
33 import android.os.Looper;
34 import android.util.AttributeSet;
35 
36 import java.io.File;
37 import java.io.FileInputStream;
38 import java.io.FileNotFoundException;
39 import java.io.FileOutputStream;
40 import java.io.IOException;
41 import java.io.InputStream;
42 
43 /**
44  * Interface to global information about an application environment.  This is
45  * an abstract class whose implementation is provided by
46  * the Android system.  It
47  * allows access to application-specific resources and classes, as well as
48  * up-calls for application-level operations such as launching activities,
49  * broadcasting and receiving intents, etc.
50  */
51 public abstract class Context {
52     /**
53      * File creation mode: the default mode, where the created file can only
54      * be accessed by the calling application (or all applications sharing the
55      * same user ID).
56      * @see #MODE_WORLD_READABLE
57      * @see #MODE_WORLD_WRITEABLE
58      */
59     public static final int MODE_PRIVATE = 0x0000;
60     /**
61      * File creation mode: allow all other applications to have read access
62      * to the created file.
63      * @see #MODE_PRIVATE
64      * @see #MODE_WORLD_WRITEABLE
65      */
66     public static final int MODE_WORLD_READABLE = 0x0001;
67     /**
68      * File creation mode: allow all other applications to have write access
69      * to the created file.
70      * @see #MODE_PRIVATE
71      * @see #MODE_WORLD_READABLE
72      */
73     public static final int MODE_WORLD_WRITEABLE = 0x0002;
74     /**
75      * File creation mode: for use with {@link #openFileOutput}, if the file
76      * already exists then write data to the end of the existing file
77      * instead of erasing it.
78      * @see #openFileOutput
79      */
80     public static final int MODE_APPEND = 0x8000;
81 
82     /**
83      * SharedPreference loading flag: when set, the file on disk will
84      * be checked for modification even if the shared preferences
85      * instance is already loaded in this process.  This behavior is
86      * sometimes desired in cases where the application has multiple
87      * processes, all writing to the same SharedPreferences file.
88      * Generally there are better forms of communication between
89      * processes, though.
90      *
91      * <p>This was the legacy (but undocumented) behavior in and
92      * before Gingerbread (Android 2.3) and this flag is implied when
93      * targetting such releases.  For applications targetting SDK
94      * versions <em>greater than</em> Android 2.3, this flag must be
95      * explicitly set if desired.
96      *
97      * @see #getSharedPreferences
98      */
99     public static final int MODE_MULTI_PROCESS = 0x0004;
100 
101     /**
102      * Flag for {@link #bindService}: automatically create the service as long
103      * as the binding exists.  Note that while this will create the service,
104      * its {@link android.app.Service#onStartCommand}
105      * method will still only be called due to an
106      * explicit call to {@link #startService}.  Even without that, though,
107      * this still provides you with access to the service object while the
108      * service is created.
109      *
110      * <p>Note that prior to {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH},
111      * not supplying this flag would also impact how important the system
112      * consider's the target service's process to be.  When set, the only way
113      * for it to be raised was by binding from a service in which case it will
114      * only be important when that activity is in the foreground.  Now to
115      * achieve this behavior you must explicitly supply the new flag
116      * {@link #BIND_ADJUST_WITH_ACTIVITY}.  For compatibility, old applications
117      * that don't specify {@link #BIND_AUTO_CREATE} will automatically have
118      * the flags {@link #BIND_WAIVE_PRIORITY} and
119      * {@link #BIND_ADJUST_WITH_ACTIVITY} set for them in order to achieve
120      * the same result.
121      */
122     public static final int BIND_AUTO_CREATE = 0x0001;
123 
124     /**
125      * Flag for {@link #bindService}: include debugging help for mismatched
126      * calls to unbind.  When this flag is set, the callstack of the following
127      * {@link #unbindService} call is retained, to be printed if a later
128      * incorrect unbind call is made.  Note that doing this requires retaining
129      * information about the binding that was made for the lifetime of the app,
130      * resulting in a leak -- this should only be used for debugging.
131      */
132     public static final int BIND_DEBUG_UNBIND = 0x0002;
133 
134     /**
135      * Flag for {@link #bindService}: don't allow this binding to raise
136      * the target service's process to the foreground scheduling priority.
137      * It will still be raised to at least the same memory priority
138      * as the client (so that its process will not be killable in any
139      * situation where the client is not killable), but for CPU scheduling
140      * purposes it may be left in the background.  This only has an impact
141      * in the situation where the binding client is a foreground process
142      * and the target service is in a background process.
143      */
144     public static final int BIND_NOT_FOREGROUND = 0x0004;
145 
146     /**
147      * Flag for {@link #bindService}: indicates that the client application
148      * binding to this service considers the service to be more important than
149      * the app itself.  When set, the platform will try to have the out of
150      * memory kill the app before it kills the service it is bound to, though
151      * this is not guaranteed to be the case.
152      */
153     public static final int BIND_ABOVE_CLIENT = 0x0008;
154 
155     /**
156      * Flag for {@link #bindService}: allow the process hosting the bound
157      * service to go through its normal memory management.  It will be
158      * treated more like a running service, allowing the system to
159      * (temporarily) expunge the process if low on memory or for some other
160      * whim it may have, and being more aggressive about making it a candidate
161      * to be killed (and restarted) if running for a long time.
162      */
163     public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010;
164 
165     /**
166      * Flag for {@link #bindService}: don't impact the scheduling or
167      * memory management priority of the target service's hosting process.
168      * Allows the service's process to be managed on the background LRU list
169      * just like a regular application process in the background.
170      */
171     public static final int BIND_WAIVE_PRIORITY = 0x0020;
172 
173     /**
174      * Flag for {@link #bindService}: this service is very important to
175      * the client, so should be brought to the foreground process level
176      * when the client is.  Normally a process can only be raised to the
177      * visibility level by a client, even if that client is in the foreground.
178      */
179     public static final int BIND_IMPORTANT = 0x0040;
180 
181     /**
182      * Flag for {@link #bindService}: If binding from an activity, allow the
183      * target service's process importance to be raised based on whether the
184      * activity is visible to the user, regardless whether another flag is
185      * used to reduce the amount that the client process's overall importance
186      * is used to impact it.
187      */
188     public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0040;
189 
190     /** Return an AssetManager instance for your application's package. */
getAssets()191     public abstract AssetManager getAssets();
192 
193     /** Return a Resources instance for your application's package. */
getResources()194     public abstract Resources getResources();
195 
196     /** Return PackageManager instance to find global package information. */
getPackageManager()197     public abstract PackageManager getPackageManager();
198 
199     /** Return a ContentResolver instance for your application's package. */
getContentResolver()200     public abstract ContentResolver getContentResolver();
201 
202     /**
203      * Return the Looper for the main thread of the current process.  This is
204      * the thread used to dispatch calls to application components (activities,
205      * services, etc).
206      */
getMainLooper()207     public abstract Looper getMainLooper();
208 
209     /**
210      * Return the context of the single, global Application object of the
211      * current process.  This generally should only be used if you need a
212      * Context whose lifecycle is separate from the current context, that is
213      * tied to the lifetime of the process rather than the current component.
214      *
215      * <p>Consider for example how this interacts with
216      * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}:
217      * <ul>
218      * <li> <p>If used from an Activity context, the receiver is being registered
219      * within that activity.  This means that you are expected to unregister
220      * before the activity is done being destroyed; in fact if you do not do
221      * so, the framework will clean up your leaked registration as it removes
222      * the activity and log an error.  Thus, if you use the Activity context
223      * to register a receiver that is static (global to the process, not
224      * associated with an Activity instance) then that registration will be
225      * removed on you at whatever point the activity you used is destroyed.
226      * <li> <p>If used from the Context returned here, the receiver is being
227      * registered with the global state associated with your application.  Thus
228      * it will never be unregistered for you.  This is necessary if the receiver
229      * is associated with static data, not a particular component.  However
230      * using the ApplicationContext elsewhere can easily lead to serious leaks
231      * if you forget to unregister, unbind, etc.
232      * </ul>
233      */
getApplicationContext()234     public abstract Context getApplicationContext();
235 
236     /**
237      * Add a new {@link ComponentCallbacks} to the base application of the
238      * Context, which will be called at the same times as the ComponentCallbacks
239      * methods of activities and other components are called.  Note that you
240      * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when
241      * appropriate in the future; this will not be removed for you.
242      *
243      * @param callback The interface to call.  This can be either a
244      * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
245      */
registerComponentCallbacks(ComponentCallbacks callback)246     public void registerComponentCallbacks(ComponentCallbacks callback) {
247         getApplicationContext().registerComponentCallbacks(callback);
248     }
249 
250     /**
251      * Remove a {@link ComponentCallbacks} objec that was previously registered
252      * with {@link #registerComponentCallbacks(ComponentCallbacks)}.
253      */
unregisterComponentCallbacks(ComponentCallbacks callback)254     public void unregisterComponentCallbacks(ComponentCallbacks callback) {
255         getApplicationContext().unregisterComponentCallbacks(callback);
256     }
257 
258     /**
259      * Return a localized, styled CharSequence from the application's package's
260      * default string table.
261      *
262      * @param resId Resource id for the CharSequence text
263      */
getText(int resId)264     public final CharSequence getText(int resId) {
265         return getResources().getText(resId);
266     }
267 
268     /**
269      * Return a localized string from the application's package's
270      * default string table.
271      *
272      * @param resId Resource id for the string
273      */
getString(int resId)274     public final String getString(int resId) {
275         return getResources().getString(resId);
276     }
277 
278     /**
279      * Return a localized formatted string from the application's package's
280      * default string table, substituting the format arguments as defined in
281      * {@link java.util.Formatter} and {@link java.lang.String#format}.
282      *
283      * @param resId Resource id for the format string
284      * @param formatArgs The format arguments that will be used for substitution.
285      */
286 
getString(int resId, Object... formatArgs)287     public final String getString(int resId, Object... formatArgs) {
288         return getResources().getString(resId, formatArgs);
289     }
290 
291      /**
292      * Set the base theme for this context.  Note that this should be called
293      * before any views are instantiated in the Context (for example before
294      * calling {@link android.app.Activity#setContentView} or
295      * {@link android.view.LayoutInflater#inflate}).
296      *
297      * @param resid The style resource describing the theme.
298      */
setTheme(int resid)299     public abstract void setTheme(int resid);
300 
301     /** @hide Needed for some internal implementation...  not public because
302      * you can't assume this actually means anything. */
getThemeResId()303     public int getThemeResId() {
304         return 0;
305     }
306 
307     /**
308      * Return the Theme object associated with this Context.
309      */
getTheme()310     public abstract Resources.Theme getTheme();
311 
312     /**
313      * Retrieve styled attribute information in this Context's theme.  See
314      * {@link Resources.Theme#obtainStyledAttributes(int[])}
315      * for more information.
316      *
317      * @see Resources.Theme#obtainStyledAttributes(int[])
318      */
obtainStyledAttributes( int[] attrs)319     public final TypedArray obtainStyledAttributes(
320             int[] attrs) {
321         return getTheme().obtainStyledAttributes(attrs);
322     }
323 
324     /**
325      * Retrieve styled attribute information in this Context's theme.  See
326      * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
327      * for more information.
328      *
329      * @see Resources.Theme#obtainStyledAttributes(int, int[])
330      */
obtainStyledAttributes( int resid, int[] attrs)331     public final TypedArray obtainStyledAttributes(
332             int resid, int[] attrs) throws Resources.NotFoundException {
333         return getTheme().obtainStyledAttributes(resid, attrs);
334     }
335 
336     /**
337      * Retrieve styled attribute information in this Context's theme.  See
338      * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
339      * for more information.
340      *
341      * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
342      */
obtainStyledAttributes( AttributeSet set, int[] attrs)343     public final TypedArray obtainStyledAttributes(
344             AttributeSet set, int[] attrs) {
345         return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
346     }
347 
348     /**
349      * Retrieve styled attribute information in this Context's theme.  See
350      * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
351      * for more information.
352      *
353      * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
354      */
obtainStyledAttributes( AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)355     public final TypedArray obtainStyledAttributes(
356             AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
357         return getTheme().obtainStyledAttributes(
358             set, attrs, defStyleAttr, defStyleRes);
359     }
360 
361     /**
362      * Return a class loader you can use to retrieve classes in this package.
363      */
getClassLoader()364     public abstract ClassLoader getClassLoader();
365 
366     /** Return the name of this application's package. */
getPackageName()367     public abstract String getPackageName();
368 
369     /** Return the full application info for this context's package. */
getApplicationInfo()370     public abstract ApplicationInfo getApplicationInfo();
371 
372     /**
373      * Return the full path to this context's primary Android package.
374      * The Android package is a ZIP file which contains the application's
375      * primary resources.
376      *
377      * <p>Note: this is not generally useful for applications, since they should
378      * not be directly accessing the file system.
379      *
380      * @return String Path to the resources.
381      */
getPackageResourcePath()382     public abstract String getPackageResourcePath();
383 
384     /**
385      * Return the full path to this context's primary Android package.
386      * The Android package is a ZIP file which contains application's
387      * primary code and assets.
388      *
389      * <p>Note: this is not generally useful for applications, since they should
390      * not be directly accessing the file system.
391      *
392      * @return String Path to the code and assets.
393      */
getPackageCodePath()394     public abstract String getPackageCodePath();
395 
396     /**
397      * {@hide}
398      * Return the full path to the shared prefs file for the given prefs group name.
399      *
400      * <p>Note: this is not generally useful for applications, since they should
401      * not be directly accessing the file system.
402      */
getSharedPrefsFile(String name)403     public abstract File getSharedPrefsFile(String name);
404 
405     /**
406      * Retrieve and hold the contents of the preferences file 'name', returning
407      * a SharedPreferences through which you can retrieve and modify its
408      * values.  Only one instance of the SharedPreferences object is returned
409      * to any callers for the same name, meaning they will see each other's
410      * edits as soon as they are made.
411      *
412      * @param name Desired preferences file. If a preferences file by this name
413      * does not exist, it will be created when you retrieve an
414      * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
415      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
416      * default operation, {@link #MODE_WORLD_READABLE}
417      * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
418      * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
419      * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
420      * is always on in apps targetting Gingerbread (Android 2.3) and below, and
421      * off by default in later versions.
422      *
423      * @return Returns the single SharedPreferences instance that can be used
424      *         to retrieve and modify the preference values.
425      *
426      * @see #MODE_PRIVATE
427      * @see #MODE_WORLD_READABLE
428      * @see #MODE_WORLD_WRITEABLE
429      * @see #MODE_MULTI_PROCESS
430      */
getSharedPreferences(String name, int mode)431     public abstract SharedPreferences getSharedPreferences(String name,
432             int mode);
433 
434     /**
435      * Open a private file associated with this Context's application package
436      * for reading.
437      *
438      * @param name The name of the file to open; can not contain path
439      *             separators.
440      *
441      * @return FileInputStream Resulting input stream.
442      *
443      * @see #openFileOutput
444      * @see #fileList
445      * @see #deleteFile
446      * @see java.io.FileInputStream#FileInputStream(String)
447      */
openFileInput(String name)448     public abstract FileInputStream openFileInput(String name)
449         throws FileNotFoundException;
450 
451     /**
452      * Open a private file associated with this Context's application package
453      * for writing.  Creates the file if it doesn't already exist.
454      *
455      * @param name The name of the file to open; can not contain path
456      *             separators.
457      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
458      * default operation, {@link #MODE_APPEND} to append to an existing file,
459      * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
460      * permissions.
461      *
462      * @return FileOutputStream Resulting output stream.
463      *
464      * @see #MODE_APPEND
465      * @see #MODE_PRIVATE
466      * @see #MODE_WORLD_READABLE
467      * @see #MODE_WORLD_WRITEABLE
468      * @see #openFileInput
469      * @see #fileList
470      * @see #deleteFile
471      * @see java.io.FileOutputStream#FileOutputStream(String)
472      */
openFileOutput(String name, int mode)473     public abstract FileOutputStream openFileOutput(String name, int mode)
474         throws FileNotFoundException;
475 
476     /**
477      * Delete the given private file associated with this Context's
478      * application package.
479      *
480      * @param name The name of the file to delete; can not contain path
481      *             separators.
482      *
483      * @return True if the file was successfully deleted; else
484      *         false.
485      *
486      * @see #openFileInput
487      * @see #openFileOutput
488      * @see #fileList
489      * @see java.io.File#delete()
490      */
deleteFile(String name)491     public abstract boolean deleteFile(String name);
492 
493     /**
494      * Returns the absolute path on the filesystem where a file created with
495      * {@link #openFileOutput} is stored.
496      *
497      * @param name The name of the file for which you would like to get
498      *          its path.
499      *
500      * @return Returns an absolute path to the given file.
501      *
502      * @see #openFileOutput
503      * @see #getFilesDir
504      * @see #getDir
505      */
getFileStreamPath(String name)506     public abstract File getFileStreamPath(String name);
507 
508     /**
509      * Returns the absolute path to the directory on the filesystem where
510      * files created with {@link #openFileOutput} are stored.
511      *
512      * @return Returns the path of the directory holding application files.
513      *
514      * @see #openFileOutput
515      * @see #getFileStreamPath
516      * @see #getDir
517      */
getFilesDir()518     public abstract File getFilesDir();
519 
520     /**
521      * Returns the absolute path to the directory on the external filesystem
522      * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
523      * Environment.getExternalStorageDirectory()}) where the application can
524      * place persistent files it owns.  These files are private to the
525      * applications, and not typically visible to the user as media.
526      *
527      * <p>This is like {@link #getFilesDir()} in that these
528      * files will be deleted when the application is uninstalled, however there
529      * are some important differences:
530      *
531      * <ul>
532      * <li>External files are not always available: they will disappear if the
533      * user mounts the external storage on a computer or removes it.  See the
534      * APIs on {@link android.os.Environment} for information in the storage state.
535      * <li>There is no security enforced with these files.  All applications
536      * can read and write files placed here.
537      * </ul>
538      *
539      * <p>Here is an example of typical code to manipulate a file in
540      * an application's private storage:</p>
541      *
542      * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
543      * private_file}
544      *
545      * <p>If you supply a non-null <var>type</var> to this function, the returned
546      * file will be a path to a sub-directory of the given type.  Though these files
547      * are not automatically scanned by the media scanner, you can explicitly
548      * add them to the media database with
549      * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[],
550      *      OnScanCompletedListener) MediaScannerConnection.scanFile}.
551      * Note that this is not the same as
552      * {@link android.os.Environment#getExternalStoragePublicDirectory
553      * Environment.getExternalStoragePublicDirectory()}, which provides
554      * directories of media shared by all applications.  The
555      * directories returned here are
556      * owned by the application, and their contents will be removed when the
557      * application is uninstalled.  Unlike
558      * {@link android.os.Environment#getExternalStoragePublicDirectory
559      * Environment.getExternalStoragePublicDirectory()}, the directory
560      * returned here will be automatically created for you.
561      *
562      * <p>Here is an example of typical code to manipulate a picture in
563      * an application's private storage and add it to the media database:</p>
564      *
565      * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
566      * private_picture}
567      *
568      * @param type The type of files directory to return.  May be null for
569      * the root of the files directory or one of
570      * the following Environment constants for a subdirectory:
571      * {@link android.os.Environment#DIRECTORY_MUSIC},
572      * {@link android.os.Environment#DIRECTORY_PODCASTS},
573      * {@link android.os.Environment#DIRECTORY_RINGTONES},
574      * {@link android.os.Environment#DIRECTORY_ALARMS},
575      * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
576      * {@link android.os.Environment#DIRECTORY_PICTURES}, or
577      * {@link android.os.Environment#DIRECTORY_MOVIES}.
578      *
579      * @return Returns the path of the directory holding application files
580      * on external storage.  Returns null if external storage is not currently
581      * mounted so it could not ensure the path exists; you will need to call
582      * this method again when it is available.
583      *
584      * @see #getFilesDir
585      * @see android.os.Environment#getExternalStoragePublicDirectory
586      */
getExternalFilesDir(String type)587     public abstract File getExternalFilesDir(String type);
588 
589     /**
590      * Return the directory where this application's OBB files (if there
591      * are any) can be found.  Note if the application does not have any OBB
592      * files, this directory may not exist.
593      */
getObbDir()594     public abstract File getObbDir();
595 
596     /**
597      * Returns the absolute path to the application specific cache directory
598      * on the filesystem. These files will be ones that get deleted first when the
599      * device runs low on storage.
600      * There is no guarantee when these files will be deleted.
601      *
602      * <strong>Note: you should not <em>rely</em> on the system deleting these
603      * files for you; you should always have a reasonable maximum, such as 1 MB,
604      * for the amount of space you consume with cache files, and prune those
605      * files when exceeding that space.</strong>
606      *
607      * @return Returns the path of the directory holding application cache files.
608      *
609      * @see #openFileOutput
610      * @see #getFileStreamPath
611      * @see #getDir
612      */
getCacheDir()613     public abstract File getCacheDir();
614 
615     /**
616      * Returns the absolute path to the directory on the external filesystem
617      * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
618      * Environment.getExternalStorageDirectory()} where the application can
619      * place cache files it owns.
620      *
621      * <p>This is like {@link #getCacheDir()} in that these
622      * files will be deleted when the application is uninstalled, however there
623      * are some important differences:
624      *
625      * <ul>
626      * <li>The platform does not monitor the space available in external storage,
627      * and thus will not automatically delete these files.  Note that you should
628      * be managing the maximum space you will use for these anyway, just like
629      * with {@link #getCacheDir()}.
630      * <li>External files are not always available: they will disappear if the
631      * user mounts the external storage on a computer or removes it.  See the
632      * APIs on {@link android.os.Environment} for information in the storage state.
633      * <li>There is no security enforced with these files.  All applications
634      * can read and write files placed here.
635      * </ul>
636      *
637      * @return Returns the path of the directory holding application cache files
638      * on external storage.  Returns null if external storage is not currently
639      * mounted so it could not ensure the path exists; you will need to call
640      * this method again when it is available.
641      *
642      * @see #getCacheDir
643      */
getExternalCacheDir()644     public abstract File getExternalCacheDir();
645 
646     /**
647      * Returns an array of strings naming the private files associated with
648      * this Context's application package.
649      *
650      * @return Array of strings naming the private files.
651      *
652      * @see #openFileInput
653      * @see #openFileOutput
654      * @see #deleteFile
655      */
fileList()656     public abstract String[] fileList();
657 
658     /**
659      * Retrieve, creating if needed, a new directory in which the application
660      * can place its own custom data files.  You can use the returned File
661      * object to create and access files in this directory.  Note that files
662      * created through a File object will only be accessible by your own
663      * application; you can only set the mode of the entire directory, not
664      * of individual files.
665      *
666      * @param name Name of the directory to retrieve.  This is a directory
667      * that is created as part of your application data.
668      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
669      * default operation, {@link #MODE_WORLD_READABLE} and
670      * {@link #MODE_WORLD_WRITEABLE} to control permissions.
671      *
672      * @return Returns a File object for the requested directory.  The directory
673      * will have been created if it does not already exist.
674      *
675      * @see #openFileOutput(String, int)
676      */
getDir(String name, int mode)677     public abstract File getDir(String name, int mode);
678 
679     /**
680      * Open a new private SQLiteDatabase associated with this Context's
681      * application package.  Create the database file if it doesn't exist.
682      *
683      * @param name The name (unique in the application package) of the database.
684      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
685      *     default operation, {@link #MODE_WORLD_READABLE}
686      *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
687      * @param factory An optional factory class that is called to instantiate a
688      *     cursor when query is called.
689      *
690      * @return The contents of a newly created database with the given name.
691      * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
692      *
693      * @see #MODE_PRIVATE
694      * @see #MODE_WORLD_READABLE
695      * @see #MODE_WORLD_WRITEABLE
696      * @see #deleteDatabase
697      */
openOrCreateDatabase(String name, int mode, CursorFactory factory)698     public abstract SQLiteDatabase openOrCreateDatabase(String name,
699             int mode, CursorFactory factory);
700 
701     /**
702      * Open a new private SQLiteDatabase associated with this Context's
703      * application package.  Creates the database file if it doesn't exist.
704      *
705      * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
706      * used to handle corruption when sqlite reports database corruption.</p>
707      *
708      * @param name The name (unique in the application package) of the database.
709      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
710      *     default operation, {@link #MODE_WORLD_READABLE}
711      *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
712      * @param factory An optional factory class that is called to instantiate a
713      *     cursor when query is called.
714      * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
715      * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
716      * @return The contents of a newly created database with the given name.
717      * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
718      *
719      * @see #MODE_PRIVATE
720      * @see #MODE_WORLD_READABLE
721      * @see #MODE_WORLD_WRITEABLE
722      * @see #deleteDatabase
723      */
openOrCreateDatabase(String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler)724     public abstract SQLiteDatabase openOrCreateDatabase(String name,
725             int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
726 
727     /**
728      * Delete an existing private SQLiteDatabase associated with this Context's
729      * application package.
730      *
731      * @param name The name (unique in the application package) of the
732      *             database.
733      *
734      * @return True if the database was successfully deleted; else false.
735      *
736      * @see #openOrCreateDatabase
737      */
deleteDatabase(String name)738     public abstract boolean deleteDatabase(String name);
739 
740     /**
741      * Returns the absolute path on the filesystem where a database created with
742      * {@link #openOrCreateDatabase} is stored.
743      *
744      * @param name The name of the database for which you would like to get
745      *          its path.
746      *
747      * @return Returns an absolute path to the given database.
748      *
749      * @see #openOrCreateDatabase
750      */
getDatabasePath(String name)751     public abstract File getDatabasePath(String name);
752 
753     /**
754      * Returns an array of strings naming the private databases associated with
755      * this Context's application package.
756      *
757      * @return Array of strings naming the private databases.
758      *
759      * @see #openOrCreateDatabase
760      * @see #deleteDatabase
761      */
databaseList()762     public abstract String[] databaseList();
763 
764     /**
765      * @deprecated Use {@link android.app.WallpaperManager#getDrawable
766      * WallpaperManager.get()} instead.
767      */
768     @Deprecated
getWallpaper()769     public abstract Drawable getWallpaper();
770 
771     /**
772      * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
773      * WallpaperManager.peek()} instead.
774      */
775     @Deprecated
peekWallpaper()776     public abstract Drawable peekWallpaper();
777 
778     /**
779      * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
780      * WallpaperManager.getDesiredMinimumWidth()} instead.
781      */
782     @Deprecated
getWallpaperDesiredMinimumWidth()783     public abstract int getWallpaperDesiredMinimumWidth();
784 
785     /**
786      * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
787      * WallpaperManager.getDesiredMinimumHeight()} instead.
788      */
789     @Deprecated
getWallpaperDesiredMinimumHeight()790     public abstract int getWallpaperDesiredMinimumHeight();
791 
792     /**
793      * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
794      * WallpaperManager.set()} instead.
795      */
796     @Deprecated
setWallpaper(Bitmap bitmap)797     public abstract void setWallpaper(Bitmap bitmap) throws IOException;
798 
799     /**
800      * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
801      * WallpaperManager.set()} instead.
802      */
803     @Deprecated
setWallpaper(InputStream data)804     public abstract void setWallpaper(InputStream data) throws IOException;
805 
806     /**
807      * @deprecated Use {@link android.app.WallpaperManager#clear
808      * WallpaperManager.clear()} instead.
809      */
810     @Deprecated
clearWallpaper()811     public abstract void clearWallpaper() throws IOException;
812 
813     /**
814      * Launch a new activity.  You will not receive any information about when
815      * the activity exits.
816      *
817      * <p>Note that if this method is being called from outside of an
818      * {@link android.app.Activity} Context, then the Intent must include
819      * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
820      * without being started from an existing Activity, there is no existing
821      * task in which to place the new activity and thus it needs to be placed
822      * in its own separate task.
823      *
824      * <p>This method throws {@link ActivityNotFoundException}
825      * if there was no Activity found to run the given Intent.
826      *
827      * @param intent The description of the activity to start.
828      *
829      * @throws ActivityNotFoundException
830      *
831      * @see PackageManager#resolveActivity
832      */
startActivity(Intent intent)833     public abstract void startActivity(Intent intent);
834 
835     /**
836      * Launch multiple new activities.  This is generally the same as calling
837      * {@link #startActivity(Intent)} for the first Intent in the array,
838      * that activity during its creation calling {@link #startActivity(Intent)}
839      * for the second entry, etc.  Note that unlike that approach, generally
840      * none of the activities except the last in the array will be created
841      * at this point, but rather will be created when the user first visits
842      * them (due to pressing back from the activity on top).
843      *
844      * <p>This method throws {@link ActivityNotFoundException}
845      * if there was no Activity found for <em>any</em> given Intent.  In this
846      * case the state of the activity stack is undefined (some Intents in the
847      * list may be on it, some not), so you probably want to avoid such situations.
848      *
849      * @param intents An array of Intents to be started.
850      *
851      * @throws ActivityNotFoundException
852      *
853      * @see PackageManager#resolveActivity
854      */
startActivities(Intent[] intents)855     public abstract void startActivities(Intent[] intents);
856 
857     /**
858      * Like {@link #startActivity(Intent)}, but taking a IntentSender
859      * to start.  If the IntentSender is for an activity, that activity will be started
860      * as if you had called the regular {@link #startActivity(Intent)}
861      * here; otherwise, its associated action will be executed (such as
862      * sending a broadcast) as if you had called
863      * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
864      *
865      * @param intent The IntentSender to launch.
866      * @param fillInIntent If non-null, this will be provided as the
867      * intent parameter to {@link IntentSender#sendIntent}.
868      * @param flagsMask Intent flags in the original IntentSender that you
869      * would like to change.
870      * @param flagsValues Desired values for any bits set in
871      * <var>flagsMask</var>
872      * @param extraFlags Always set to 0.
873      */
startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)874     public abstract void startIntentSender(IntentSender intent,
875             Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
876             throws IntentSender.SendIntentException;
877 
878     /**
879      * Broadcast the given intent to all interested BroadcastReceivers.  This
880      * call is asynchronous; it returns immediately, and you will continue
881      * executing while the receivers are run.  No results are propagated from
882      * receivers and receivers can not abort the broadcast. If you want
883      * to allow receivers to propagate results or abort the broadcast, you must
884      * send an ordered broadcast using
885      * {@link #sendOrderedBroadcast(Intent, String)}.
886      *
887      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
888      *
889      * @param intent The Intent to broadcast; all receivers matching this
890      *               Intent will receive the broadcast.
891      *
892      * @see android.content.BroadcastReceiver
893      * @see #registerReceiver
894      * @see #sendBroadcast(Intent, String)
895      * @see #sendOrderedBroadcast(Intent, String)
896      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
897      */
sendBroadcast(Intent intent)898     public abstract void sendBroadcast(Intent intent);
899 
900     /**
901      * Broadcast the given intent to all interested BroadcastReceivers, allowing
902      * an optional required permission to be enforced.  This
903      * call is asynchronous; it returns immediately, and you will continue
904      * executing while the receivers are run.  No results are propagated from
905      * receivers and receivers can not abort the broadcast. If you want
906      * to allow receivers to propagate results or abort the broadcast, you must
907      * send an ordered broadcast using
908      * {@link #sendOrderedBroadcast(Intent, String)}.
909      *
910      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
911      *
912      * @param intent The Intent to broadcast; all receivers matching this
913      *               Intent will receive the broadcast.
914      * @param receiverPermission (optional) String naming a permission that
915      *               a receiver must hold in order to receive your broadcast.
916      *               If null, no permission is required.
917      *
918      * @see android.content.BroadcastReceiver
919      * @see #registerReceiver
920      * @see #sendBroadcast(Intent)
921      * @see #sendOrderedBroadcast(Intent, String)
922      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
923      */
sendBroadcast(Intent intent, String receiverPermission)924     public abstract void sendBroadcast(Intent intent,
925             String receiverPermission);
926 
927     /**
928      * Broadcast the given intent to all interested BroadcastReceivers, delivering
929      * them one at a time to allow more preferred receivers to consume the
930      * broadcast before it is delivered to less preferred receivers.  This
931      * call is asynchronous; it returns immediately, and you will continue
932      * executing while the receivers are run.
933      *
934      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
935      *
936      * @param intent The Intent to broadcast; all receivers matching this
937      *               Intent will receive the broadcast.
938      * @param receiverPermission (optional) String naming a permissions that
939      *               a receiver must hold in order to receive your broadcast.
940      *               If null, no permission is required.
941      *
942      * @see android.content.BroadcastReceiver
943      * @see #registerReceiver
944      * @see #sendBroadcast(Intent)
945      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
946      */
sendOrderedBroadcast(Intent intent, String receiverPermission)947     public abstract void sendOrderedBroadcast(Intent intent,
948             String receiverPermission);
949 
950     /**
951      * Version of {@link #sendBroadcast(Intent)} that allows you to
952      * receive data back from the broadcast.  This is accomplished by
953      * supplying your own BroadcastReceiver when calling, which will be
954      * treated as a final receiver at the end of the broadcast -- its
955      * {@link BroadcastReceiver#onReceive} method will be called with
956      * the result values collected from the other receivers.  The broadcast will
957      * be serialized in the same way as calling
958      * {@link #sendOrderedBroadcast(Intent, String)}.
959      *
960      * <p>Like {@link #sendBroadcast(Intent)}, this method is
961      * asynchronous; it will return before
962      * resultReceiver.onReceive() is called.
963      *
964      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
965      *
966      * @param intent The Intent to broadcast; all receivers matching this
967      *               Intent will receive the broadcast.
968      * @param receiverPermission String naming a permissions that
969      *               a receiver must hold in order to receive your broadcast.
970      *               If null, no permission is required.
971      * @param resultReceiver Your own BroadcastReceiver to treat as the final
972      *                       receiver of the broadcast.
973      * @param scheduler A custom Handler with which to schedule the
974      *                  resultReceiver callback; if null it will be
975      *                  scheduled in the Context's main thread.
976      * @param initialCode An initial value for the result code.  Often
977      *                    Activity.RESULT_OK.
978      * @param initialData An initial value for the result data.  Often
979      *                    null.
980      * @param initialExtras An initial value for the result extras.  Often
981      *                      null.
982      *
983      * @see #sendBroadcast(Intent)
984      * @see #sendBroadcast(Intent, String)
985      * @see #sendOrderedBroadcast(Intent, String)
986      * @see #sendStickyBroadcast(Intent)
987      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
988      * @see android.content.BroadcastReceiver
989      * @see #registerReceiver
990      * @see android.app.Activity#RESULT_OK
991      */
sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)992     public abstract void sendOrderedBroadcast(Intent intent,
993             String receiverPermission, BroadcastReceiver resultReceiver,
994             Handler scheduler, int initialCode, String initialData,
995             Bundle initialExtras);
996 
997     /**
998      * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
999      * Intent you are sending stays around after the broadcast is complete,
1000      * so that others can quickly retrieve that data through the return
1001      * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
1002      * all other ways, this behaves the same as
1003      * {@link #sendBroadcast(Intent)}.
1004      *
1005      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
1006      * permission in order to use this API.  If you do not hold that
1007      * permission, {@link SecurityException} will be thrown.
1008      *
1009      * @param intent The Intent to broadcast; all receivers matching this
1010      * Intent will receive the broadcast, and the Intent will be held to
1011      * be re-broadcast to future receivers.
1012      *
1013      * @see #sendBroadcast(Intent)
1014      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
1015      */
sendStickyBroadcast(Intent intent)1016     public abstract void sendStickyBroadcast(Intent intent);
1017 
1018     /**
1019      * Version of {@link #sendStickyBroadcast} that allows you to
1020      * receive data back from the broadcast.  This is accomplished by
1021      * supplying your own BroadcastReceiver when calling, which will be
1022      * treated as a final receiver at the end of the broadcast -- its
1023      * {@link BroadcastReceiver#onReceive} method will be called with
1024      * the result values collected from the other receivers.  The broadcast will
1025      * be serialized in the same way as calling
1026      * {@link #sendOrderedBroadcast(Intent, String)}.
1027      *
1028      * <p>Like {@link #sendBroadcast(Intent)}, this method is
1029      * asynchronous; it will return before
1030      * resultReceiver.onReceive() is called.  Note that the sticky data
1031      * stored is only the data you initially supply to the broadcast, not
1032      * the result of any changes made by the receivers.
1033      *
1034      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1035      *
1036      * @param intent The Intent to broadcast; all receivers matching this
1037      *               Intent will receive the broadcast.
1038      * @param resultReceiver Your own BroadcastReceiver to treat as the final
1039      *                       receiver of the broadcast.
1040      * @param scheduler A custom Handler with which to schedule the
1041      *                  resultReceiver callback; if null it will be
1042      *                  scheduled in the Context's main thread.
1043      * @param initialCode An initial value for the result code.  Often
1044      *                    Activity.RESULT_OK.
1045      * @param initialData An initial value for the result data.  Often
1046      *                    null.
1047      * @param initialExtras An initial value for the result extras.  Often
1048      *                      null.
1049      *
1050      * @see #sendBroadcast(Intent)
1051      * @see #sendBroadcast(Intent, String)
1052      * @see #sendOrderedBroadcast(Intent, String)
1053      * @see #sendStickyBroadcast(Intent)
1054      * @see android.content.BroadcastReceiver
1055      * @see #registerReceiver
1056      * @see android.app.Activity#RESULT_OK
1057      */
sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)1058     public abstract void sendStickyOrderedBroadcast(Intent intent,
1059             BroadcastReceiver resultReceiver,
1060             Handler scheduler, int initialCode, String initialData,
1061             Bundle initialExtras);
1062 
1063 
1064     /**
1065      * Remove the data previously sent with {@link #sendStickyBroadcast},
1066      * so that it is as if the sticky broadcast had never happened.
1067      *
1068      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
1069      * permission in order to use this API.  If you do not hold that
1070      * permission, {@link SecurityException} will be thrown.
1071      *
1072      * @param intent The Intent that was previously broadcast.
1073      *
1074      * @see #sendStickyBroadcast
1075      */
removeStickyBroadcast(Intent intent)1076     public abstract void removeStickyBroadcast(Intent intent);
1077 
1078     /**
1079      * Register a BroadcastReceiver to be run in the main activity thread.  The
1080      * <var>receiver</var> will be called with any broadcast Intent that
1081      * matches <var>filter</var>, in the main application thread.
1082      *
1083      * <p>The system may broadcast Intents that are "sticky" -- these stay
1084      * around after the broadcast as finished, to be sent to any later
1085      * registrations. If your IntentFilter matches one of these sticky
1086      * Intents, that Intent will be returned by this function
1087      * <strong>and</strong> sent to your <var>receiver</var> as if it had just
1088      * been broadcast.
1089      *
1090      * <p>There may be multiple sticky Intents that match <var>filter</var>,
1091      * in which case each of these will be sent to <var>receiver</var>.  In
1092      * this case, only one of these can be returned directly by the function;
1093      * which of these that is returned is arbitrarily decided by the system.
1094      *
1095      * <p>If you know the Intent your are registering for is sticky, you can
1096      * supply null for your <var>receiver</var>.  In this case, no receiver is
1097      * registered -- the function simply returns the sticky Intent that
1098      * matches <var>filter</var>.  In the case of multiple matches, the same
1099      * rules as described above apply.
1100      *
1101      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1102      *
1103      * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
1104      * registered with this method will correctly respect the
1105      * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
1106      * Prior to that, it would be ignored and delivered to all matching registered
1107      * receivers.  Be careful if using this for security.</p>
1108      *
1109      * <p class="note">Note: this method <em>cannot be called from a
1110      * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
1111      * that is declared in an application's manifest.  It is okay, however, to call
1112      * this method from another BroadcastReceiver that has itself been registered
1113      * at run time with {@link #registerReceiver}, since the lifetime of such a
1114      * registered BroadcastReceiver is tied to the object that registered it.</p>
1115      *
1116      * @param receiver The BroadcastReceiver to handle the broadcast.
1117      * @param filter Selects the Intent broadcasts to be received.
1118      *
1119      * @return The first sticky intent found that matches <var>filter</var>,
1120      *         or null if there are none.
1121      *
1122      * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
1123      * @see #sendBroadcast
1124      * @see #unregisterReceiver
1125      */
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)1126     public abstract Intent registerReceiver(BroadcastReceiver receiver,
1127                                             IntentFilter filter);
1128 
1129     /**
1130      * Register to receive intent broadcasts, to run in the context of
1131      * <var>scheduler</var>.  See
1132      * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
1133      * information.  This allows you to enforce permissions on who can
1134      * broadcast intents to your receiver, or have the receiver run in
1135      * a different thread than the main application thread.
1136      *
1137      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1138      *
1139      * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
1140      * registered with this method will correctly respect the
1141      * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
1142      * Prior to that, it would be ignored and delivered to all matching registered
1143      * receivers.  Be careful if using this for security.</p>
1144      *
1145      * @param receiver The BroadcastReceiver to handle the broadcast.
1146      * @param filter Selects the Intent broadcasts to be received.
1147      * @param broadcastPermission String naming a permissions that a
1148      *      broadcaster must hold in order to send an Intent to you.  If null,
1149      *      no permission is required.
1150      * @param scheduler Handler identifying the thread that will receive
1151      *      the Intent.  If null, the main thread of the process will be used.
1152      *
1153      * @return The first sticky intent found that matches <var>filter</var>,
1154      *         or null if there are none.
1155      *
1156      * @see #registerReceiver(BroadcastReceiver, IntentFilter)
1157      * @see #sendBroadcast
1158      * @see #unregisterReceiver
1159      */
registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)1160     public abstract Intent registerReceiver(BroadcastReceiver receiver,
1161                                             IntentFilter filter,
1162                                             String broadcastPermission,
1163                                             Handler scheduler);
1164 
1165     /**
1166      * Unregister a previously registered BroadcastReceiver.  <em>All</em>
1167      * filters that have been registered for this BroadcastReceiver will be
1168      * removed.
1169      *
1170      * @param receiver The BroadcastReceiver to unregister.
1171      *
1172      * @see #registerReceiver
1173      */
unregisterReceiver(BroadcastReceiver receiver)1174     public abstract void unregisterReceiver(BroadcastReceiver receiver);
1175 
1176     /**
1177      * Request that a given application service be started.  The Intent
1178      * can either contain the complete class name of a specific service
1179      * implementation to start, or an abstract definition through the
1180      * action and other fields of the kind of service to start.  If this service
1181      * is not already running, it will be instantiated and started (creating a
1182      * process for it if needed); if it is running then it remains running.
1183      *
1184      * <p>Every call to this method will result in a corresponding call to
1185      * the target service's {@link android.app.Service#onStartCommand} method,
1186      * with the <var>intent</var> given here.  This provides a convenient way
1187      * to submit jobs to a service without having to bind and call on to its
1188      * interface.
1189      *
1190      * <p>Using startService() overrides the default service lifetime that is
1191      * managed by {@link #bindService}: it requires the service to remain
1192      * running until {@link #stopService} is called, regardless of whether
1193      * any clients are connected to it.  Note that calls to startService()
1194      * are not nesting: no matter how many times you call startService(),
1195      * a single call to {@link #stopService} will stop it.
1196      *
1197      * <p>The system attempts to keep running services around as much as
1198      * possible.  The only time they should be stopped is if the current
1199      * foreground application is using so many resources that the service needs
1200      * to be killed.  If any errors happen in the service's process, it will
1201      * automatically be restarted.
1202      *
1203      * <p>This function will throw {@link SecurityException} if you do not
1204      * have permission to start the given service.
1205      *
1206      * @param service Identifies the service to be started.  The Intent may
1207      *      specify either an explicit component name to start, or a logical
1208      *      description (action, category, etc) to match an
1209      *      {@link IntentFilter} published by a service.  Additional values
1210      *      may be included in the Intent extras to supply arguments along with
1211      *      this specific start call.
1212      *
1213      * @return If the service is being started or is already running, the
1214      * {@link ComponentName} of the actual service that was started is
1215      * returned; else if the service does not exist null is returned.
1216      *
1217      * @throws SecurityException
1218      *
1219      * @see #stopService
1220      * @see #bindService
1221      */
startService(Intent service)1222     public abstract ComponentName startService(Intent service);
1223 
1224     /**
1225      * Request that a given application service be stopped.  If the service is
1226      * not running, nothing happens.  Otherwise it is stopped.  Note that calls
1227      * to startService() are not counted -- this stops the service no matter
1228      * how many times it was started.
1229      *
1230      * <p>Note that if a stopped service still has {@link ServiceConnection}
1231      * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
1232      * not be destroyed until all of these bindings are removed.  See
1233      * the {@link android.app.Service} documentation for more details on a
1234      * service's lifecycle.
1235      *
1236      * <p>This function will throw {@link SecurityException} if you do not
1237      * have permission to stop the given service.
1238      *
1239      * @param service Description of the service to be stopped.  The Intent may
1240      *      specify either an explicit component name to start, or a logical
1241      *      description (action, category, etc) to match an
1242      *      {@link IntentFilter} published by a service.
1243      *
1244      * @return If there is a service matching the given Intent that is already
1245      * running, then it is stopped and true is returned; else false is returned.
1246      *
1247      * @throws SecurityException
1248      *
1249      * @see #startService
1250      */
stopService(Intent service)1251     public abstract boolean stopService(Intent service);
1252 
1253     /**
1254      * Connect to an application service, creating it if needed.  This defines
1255      * a dependency between your application and the service.  The given
1256      * <var>conn</var> will receive the service object when its created and be
1257      * told if it dies and restarts.  The service will be considered required
1258      * by the system only for as long as the calling context exists.  For
1259      * example, if this Context is an Activity that is stopped, the service will
1260      * not be required to continue running until the Activity is resumed.
1261      *
1262      * <p>This function will throw {@link SecurityException} if you do not
1263      * have permission to bind to the given service.
1264      *
1265      * <p class="note">Note: this method <em>can not be called from an
1266      * {@link BroadcastReceiver} component</em>.  A pattern you can use to
1267      * communicate from an BroadcastReceiver to a Service is to call
1268      * {@link #startService} with the arguments containing the command to be
1269      * sent, with the service calling its
1270      * {@link android.app.Service#stopSelf(int)} method when done executing
1271      * that command.  See the API demo App/Service/Service Start Arguments
1272      * Controller for an illustration of this.  It is okay, however, to use
1273      * this method from an BroadcastReceiver that has been registered with
1274      * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
1275      * is tied to another object (the one that registered it).</p>
1276      *
1277      * @param service Identifies the service to connect to.  The Intent may
1278      *      specify either an explicit component name, or a logical
1279      *      description (action, category, etc) to match an
1280      *      {@link IntentFilter} published by a service.
1281      * @param conn Receives information as the service is started and stopped.
1282      * @param flags Operation options for the binding.  May be 0,
1283      *          {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND},
1284      *          {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT},
1285      *          {@link #BIND_ALLOW_OOM_MANAGEMENT}, or
1286      *          {@link #BIND_WAIVE_PRIORITY}.
1287      * @return If you have successfully bound to the service, true is returned;
1288      *         false is returned if the connection is not made so you will not
1289      *         receive the service object.
1290      *
1291      * @throws SecurityException
1292      *
1293      * @see #unbindService
1294      * @see #startService
1295      * @see #BIND_AUTO_CREATE
1296      * @see #BIND_DEBUG_UNBIND
1297      * @see #BIND_NOT_FOREGROUND
1298      */
bindService(Intent service, ServiceConnection conn, int flags)1299     public abstract boolean bindService(Intent service, ServiceConnection conn,
1300             int flags);
1301 
1302     /**
1303      * Disconnect from an application service.  You will no longer receive
1304      * calls as the service is restarted, and the service is now allowed to
1305      * stop at any time.
1306      *
1307      * @param conn The connection interface previously supplied to
1308      *             bindService().
1309      *
1310      * @see #bindService
1311      */
unbindService(ServiceConnection conn)1312     public abstract void unbindService(ServiceConnection conn);
1313 
1314     /**
1315      * Start executing an {@link android.app.Instrumentation} class.  The given
1316      * Instrumentation component will be run by killing its target application
1317      * (if currently running), starting the target process, instantiating the
1318      * instrumentation component, and then letting it drive the application.
1319      *
1320      * <p>This function is not synchronous -- it returns as soon as the
1321      * instrumentation has started and while it is running.
1322      *
1323      * <p>Instrumentation is normally only allowed to run against a package
1324      * that is either unsigned or signed with a signature that the
1325      * the instrumentation package is also signed with (ensuring the target
1326      * trusts the instrumentation).
1327      *
1328      * @param className Name of the Instrumentation component to be run.
1329      * @param profileFile Optional path to write profiling data as the
1330      * instrumentation runs, or null for no profiling.
1331      * @param arguments Additional optional arguments to pass to the
1332      * instrumentation, or null.
1333      *
1334      * @return Returns true if the instrumentation was successfully started,
1335      * else false if it could not be found.
1336      */
startInstrumentation(ComponentName className, String profileFile, Bundle arguments)1337     public abstract boolean startInstrumentation(ComponentName className,
1338             String profileFile, Bundle arguments);
1339 
1340     /**
1341      * Return the handle to a system-level service by name. The class of the
1342      * returned object varies by the requested name. Currently available names
1343      * are:
1344      *
1345      * <dl>
1346      *  <dt> {@link #WINDOW_SERVICE} ("window")
1347      *  <dd> The top-level window manager in which you can place custom
1348      *  windows.  The returned object is a {@link android.view.WindowManager}.
1349      *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
1350      *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
1351      *  in this context.
1352      *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
1353      *  <dd> A {@link android.app.ActivityManager} for interacting with the
1354      *  global activity state of the system.
1355      *  <dt> {@link #POWER_SERVICE} ("power")
1356      *  <dd> A {@link android.os.PowerManager} for controlling power
1357      *  management.
1358      *  <dt> {@link #ALARM_SERVICE} ("alarm")
1359      *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
1360      *  time of your choosing.
1361      *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
1362      *  <dd> A {@link android.app.NotificationManager} for informing the user
1363      *   of background events.
1364      *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
1365      *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
1366      *  <dt> {@link #LOCATION_SERVICE} ("location")
1367      *  <dd> A {@link android.location.LocationManager} for controlling location
1368      *   (e.g., GPS) updates.
1369      *  <dt> {@link #SEARCH_SERVICE} ("search")
1370      *  <dd> A {@link android.app.SearchManager} for handling search.
1371      *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
1372      *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
1373      *  hardware.
1374      *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
1375      *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
1376      *  handling management of network connections.
1377      *  <dt> {@link #WIFI_SERVICE} ("wifi")
1378      *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
1379      * Wi-Fi connectivity.
1380      * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
1381      * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
1382      * for management of input methods.
1383      * <dt> {@link #UI_MODE_SERVICE} ("uimode")
1384      * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
1385      * <dt> {@link #DOWNLOAD_SERVICE} ("download")
1386      * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
1387      * </dl>
1388      *
1389      * <p>Note:  System services obtained via this API may be closely associated with
1390      * the Context in which they are obtained from.  In general, do not share the
1391      * service objects between various different contexts (Activities, Applications,
1392      * Services, Providers, etc.)
1393      *
1394      * @param name The name of the desired service.
1395      *
1396      * @return The service or null if the name does not exist.
1397      *
1398      * @see #WINDOW_SERVICE
1399      * @see android.view.WindowManager
1400      * @see #LAYOUT_INFLATER_SERVICE
1401      * @see android.view.LayoutInflater
1402      * @see #ACTIVITY_SERVICE
1403      * @see android.app.ActivityManager
1404      * @see #POWER_SERVICE
1405      * @see android.os.PowerManager
1406      * @see #ALARM_SERVICE
1407      * @see android.app.AlarmManager
1408      * @see #NOTIFICATION_SERVICE
1409      * @see android.app.NotificationManager
1410      * @see #KEYGUARD_SERVICE
1411      * @see android.app.KeyguardManager
1412      * @see #LOCATION_SERVICE
1413      * @see android.location.LocationManager
1414      * @see #SEARCH_SERVICE
1415      * @see android.app.SearchManager
1416      * @see #SENSOR_SERVICE
1417      * @see android.hardware.SensorManager
1418      * @see #STORAGE_SERVICE
1419      * @see android.os.storage.StorageManager
1420      * @see #VIBRATOR_SERVICE
1421      * @see android.os.Vibrator
1422      * @see #CONNECTIVITY_SERVICE
1423      * @see android.net.ConnectivityManager
1424      * @see #WIFI_SERVICE
1425      * @see android.net.wifi.WifiManager
1426      * @see #AUDIO_SERVICE
1427      * @see android.media.AudioManager
1428      * @see #TELEPHONY_SERVICE
1429      * @see android.telephony.TelephonyManager
1430      * @see #INPUT_METHOD_SERVICE
1431      * @see android.view.inputmethod.InputMethodManager
1432      * @see #UI_MODE_SERVICE
1433      * @see android.app.UiModeManager
1434      * @see #DOWNLOAD_SERVICE
1435      * @see android.app.DownloadManager
1436      */
getSystemService(String name)1437     public abstract Object getSystemService(String name);
1438 
1439     /**
1440      * Use with {@link #getSystemService} to retrieve a
1441      * {@link android.os.PowerManager} for controlling power management,
1442      * including "wake locks," which let you keep the device on while
1443      * you're running long tasks.
1444      */
1445     public static final String POWER_SERVICE = "power";
1446 
1447     /**
1448      * Use with {@link #getSystemService} to retrieve a
1449      * {@link android.view.WindowManager} for accessing the system's window
1450      * manager.
1451      *
1452      * @see #getSystemService
1453      * @see android.view.WindowManager
1454      */
1455     public static final String WINDOW_SERVICE = "window";
1456 
1457     /**
1458      * Use with {@link #getSystemService} to retrieve a
1459      * {@link android.view.LayoutInflater} for inflating layout resources in this
1460      * context.
1461      *
1462      * @see #getSystemService
1463      * @see android.view.LayoutInflater
1464      */
1465     public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
1466 
1467     /**
1468      * Use with {@link #getSystemService} to retrieve a
1469      * {@link android.accounts.AccountManager} for receiving intents at a
1470      * time of your choosing.
1471      *
1472      * @see #getSystemService
1473      * @see android.accounts.AccountManager
1474      */
1475     public static final String ACCOUNT_SERVICE = "account";
1476 
1477     /**
1478      * Use with {@link #getSystemService} to retrieve a
1479      * {@link android.app.ActivityManager} for interacting with the global
1480      * system state.
1481      *
1482      * @see #getSystemService
1483      * @see android.app.ActivityManager
1484      */
1485     public static final String ACTIVITY_SERVICE = "activity";
1486 
1487     /**
1488      * Use with {@link #getSystemService} to retrieve a
1489      * {@link android.app.AlarmManager} for receiving intents at a
1490      * time of your choosing.
1491      *
1492      * @see #getSystemService
1493      * @see android.app.AlarmManager
1494      */
1495     public static final String ALARM_SERVICE = "alarm";
1496 
1497     /**
1498      * Use with {@link #getSystemService} to retrieve a
1499      * {@link android.app.NotificationManager} for informing the user of
1500      * background events.
1501      *
1502      * @see #getSystemService
1503      * @see android.app.NotificationManager
1504      */
1505     public static final String NOTIFICATION_SERVICE = "notification";
1506 
1507     /**
1508      * Use with {@link #getSystemService} to retrieve a
1509      * {@link android.view.accessibility.AccessibilityManager} for giving the user
1510      * feedback for UI events through the registered event listeners.
1511      *
1512      * @see #getSystemService
1513      * @see android.view.accessibility.AccessibilityManager
1514      */
1515     public static final String ACCESSIBILITY_SERVICE = "accessibility";
1516 
1517     /**
1518      * Use with {@link #getSystemService} to retrieve a
1519      * {@link android.app.NotificationManager} for controlling keyguard.
1520      *
1521      * @see #getSystemService
1522      * @see android.app.KeyguardManager
1523      */
1524     public static final String KEYGUARD_SERVICE = "keyguard";
1525 
1526     /**
1527      * Use with {@link #getSystemService} to retrieve a {@link
1528      * android.location.LocationManager} for controlling location
1529      * updates.
1530      *
1531      * @see #getSystemService
1532      * @see android.location.LocationManager
1533      */
1534     public static final String LOCATION_SERVICE = "location";
1535 
1536     /**
1537      * Use with {@link #getSystemService} to retrieve a
1538      * {@link android.location.CountryDetector} for detecting the country that
1539      * the user is in.
1540      *
1541      * @hide
1542      */
1543     public static final String COUNTRY_DETECTOR = "country_detector";
1544 
1545     /**
1546      * Use with {@link #getSystemService} to retrieve a {@link
1547      * android.app.SearchManager} for handling searches.
1548      *
1549      * @see #getSystemService
1550      * @see android.app.SearchManager
1551      */
1552     public static final String SEARCH_SERVICE = "search";
1553 
1554     /**
1555      * Use with {@link #getSystemService} to retrieve a {@link
1556      * android.hardware.SensorManager} for accessing sensors.
1557      *
1558      * @see #getSystemService
1559      * @see android.hardware.SensorManager
1560      */
1561     public static final String SENSOR_SERVICE = "sensor";
1562 
1563     /**
1564      * Use with {@link #getSystemService} to retrieve a {@link
1565      * android.os.storage.StorageManager} for accessing system storage
1566      * functions.
1567      *
1568      * @see #getSystemService
1569      * @see android.os.storage.StorageManager
1570      */
1571     public static final String STORAGE_SERVICE = "storage";
1572 
1573     /**
1574      * Use with {@link #getSystemService} to retrieve a
1575      * com.android.server.WallpaperService for accessing wallpapers.
1576      *
1577      * @see #getSystemService
1578      */
1579     public static final String WALLPAPER_SERVICE = "wallpaper";
1580 
1581     /**
1582      * Use with {@link #getSystemService} to retrieve a {@link
1583      * android.os.Vibrator} for interacting with the vibration hardware.
1584      *
1585      * @see #getSystemService
1586      * @see android.os.Vibrator
1587      */
1588     public static final String VIBRATOR_SERVICE = "vibrator";
1589 
1590     /**
1591      * Use with {@link #getSystemService} to retrieve a {@link
1592      * android.app.StatusBarManager} for interacting with the status bar.
1593      *
1594      * @see #getSystemService
1595      * @see android.app.StatusBarManager
1596      * @hide
1597      */
1598     public static final String STATUS_BAR_SERVICE = "statusbar";
1599 
1600     /**
1601      * Use with {@link #getSystemService} to retrieve a {@link
1602      * android.net.ConnectivityManager} for handling management of
1603      * network connections.
1604      *
1605      * @see #getSystemService
1606      * @see android.net.ConnectivityManager
1607      */
1608     public static final String CONNECTIVITY_SERVICE = "connectivity";
1609 
1610     /**
1611      * Use with {@link #getSystemService} to retrieve a {@link
1612      * android.net.ThrottleManager} for handling management of
1613      * throttling.
1614      *
1615      * @hide
1616      * @see #getSystemService
1617      * @see android.net.ThrottleManager
1618      */
1619     public static final String THROTTLE_SERVICE = "throttle";
1620 
1621     /**
1622      * Use with {@link #getSystemService} to retrieve a {@link
1623      * android.net.NetworkManagementService} for handling management of
1624      * system network services
1625      *
1626      * @hide
1627      * @see #getSystemService
1628      * @see android.net.NetworkManagementService
1629      */
1630     public static final String NETWORKMANAGEMENT_SERVICE = "network_management";
1631 
1632     /** {@hide} */
1633     public static final String NETWORK_STATS_SERVICE = "netstats";
1634     /** {@hide} */
1635     public static final String NETWORK_POLICY_SERVICE = "netpolicy";
1636 
1637     /**
1638      * Use with {@link #getSystemService} to retrieve a {@link
1639      * android.net.wifi.WifiManager} for handling management of
1640      * Wi-Fi access.
1641      *
1642      * @see #getSystemService
1643      * @see android.net.wifi.WifiManager
1644      */
1645     public static final String WIFI_SERVICE = "wifi";
1646 
1647     /**
1648      * Use with {@link #getSystemService} to retrieve a {@link
1649      * android.net.wifi.p2p.WifiP2pManager} for handling management of
1650      * Wi-Fi peer-to-peer connections.
1651      *
1652      * @see #getSystemService
1653      * @see android.net.wifi.p2p.WifiP2pManager
1654      */
1655     public static final String WIFI_P2P_SERVICE = "wifip2p";
1656 
1657     /**
1658      * Use with {@link #getSystemService} to retrieve a
1659      * {@link android.media.AudioManager} for handling management of volume,
1660      * ringer modes and audio routing.
1661      *
1662      * @see #getSystemService
1663      * @see android.media.AudioManager
1664      */
1665     public static final String AUDIO_SERVICE = "audio";
1666 
1667     /**
1668      * Use with {@link #getSystemService} to retrieve a
1669      * {@link android.telephony.TelephonyManager} for handling management the
1670      * telephony features of the device.
1671      *
1672      * @see #getSystemService
1673      * @see android.telephony.TelephonyManager
1674      */
1675     public static final String TELEPHONY_SERVICE = "phone";
1676 
1677     /**
1678      * Use with {@link #getSystemService} to retrieve a
1679      * {@link android.text.ClipboardManager} for accessing and modifying
1680      * the contents of the global clipboard.
1681      *
1682      * @see #getSystemService
1683      * @see android.text.ClipboardManager
1684      */
1685     public static final String CLIPBOARD_SERVICE = "clipboard";
1686 
1687     /**
1688      * Use with {@link #getSystemService} to retrieve a
1689      * {@link android.view.inputmethod.InputMethodManager} for accessing input
1690      * methods.
1691      *
1692      * @see #getSystemService
1693      */
1694     public static final String INPUT_METHOD_SERVICE = "input_method";
1695 
1696     /**
1697      * Use with {@link #getSystemService} to retrieve a
1698      * {@link android.view.textservice.TextServicesManager} for accessing
1699      * text services.
1700      *
1701      * @see #getSystemService
1702      */
1703     public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
1704 
1705     /**
1706      * Use with {@link #getSystemService} to retrieve a
1707      * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
1708      *
1709      * @hide
1710      * @see #getSystemService
1711      */
1712     public static final String APPWIDGET_SERVICE = "appwidget";
1713 
1714     /**
1715      * Use with {@link #getSystemService} to retrieve an
1716      * {@link android.app.backup.IBackupManager IBackupManager} for communicating
1717      * with the backup mechanism.
1718      * @hide
1719      *
1720      * @see #getSystemService
1721      */
1722     public static final String BACKUP_SERVICE = "backup";
1723 
1724     /**
1725      * Use with {@link #getSystemService} to retrieve a
1726      * {@link android.os.DropBoxManager} instance for recording
1727      * diagnostic logs.
1728      * @see #getSystemService
1729      */
1730     public static final String DROPBOX_SERVICE = "dropbox";
1731 
1732     /**
1733      * Use with {@link #getSystemService} to retrieve a
1734      * {@link android.app.admin.DevicePolicyManager} for working with global
1735      * device policy management.
1736      *
1737      * @see #getSystemService
1738      */
1739     public static final String DEVICE_POLICY_SERVICE = "device_policy";
1740 
1741     /**
1742      * Use with {@link #getSystemService} to retrieve a
1743      * {@link android.app.UiModeManager} for controlling UI modes.
1744      *
1745      * @see #getSystemService
1746      */
1747     public static final String UI_MODE_SERVICE = "uimode";
1748 
1749     /**
1750      * Use with {@link #getSystemService} to retrieve a
1751      * {@link android.app.DownloadManager} for requesting HTTP downloads.
1752      *
1753      * @see #getSystemService
1754      */
1755     public static final String DOWNLOAD_SERVICE = "download";
1756 
1757     /**
1758      * Use with {@link #getSystemService} to retrieve a
1759      * {@link android.nfc.NfcManager} for using NFC.
1760      *
1761      * @see #getSystemService
1762      */
1763     public static final String NFC_SERVICE = "nfc";
1764 
1765     /**
1766      * Use with {@link #getSystemService} to retrieve a
1767      * {@link android.net.sip.SipManager} for accessing the SIP related service.
1768      *
1769      * @see #getSystemService
1770      */
1771     /** @hide */
1772     public static final String SIP_SERVICE = "sip";
1773 
1774     /**
1775      * Use with {@link #getSystemService} to retrieve a {@link
1776      * android.hardware.usb.UsbManager} for access to USB devices (as a USB host)
1777      * and for controlling this device's behavior as a USB device.
1778      *
1779      * @see #getSystemService
1780      * @see android.harware.usb.UsbManager
1781      */
1782     public static final String USB_SERVICE = "usb";
1783 
1784     /**
1785      * Determine whether the given permission is allowed for a particular
1786      * process and user ID running in the system.
1787      *
1788      * @param permission The name of the permission being checked.
1789      * @param pid The process ID being checked against.  Must be > 0.
1790      * @param uid The user ID being checked against.  A uid of 0 is the root
1791      * user, which will pass every permission check.
1792      *
1793      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
1794      * pid/uid is allowed that permission, or
1795      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1796      *
1797      * @see PackageManager#checkPermission(String, String)
1798      * @see #checkCallingPermission
1799      */
checkPermission(String permission, int pid, int uid)1800     public abstract int checkPermission(String permission, int pid, int uid);
1801 
1802     /**
1803      * Determine whether the calling process of an IPC you are handling has been
1804      * granted a particular permission.  This is basically the same as calling
1805      * {@link #checkPermission(String, int, int)} with the pid and uid returned
1806      * by {@link android.os.Binder#getCallingPid} and
1807      * {@link android.os.Binder#getCallingUid}.  One important difference
1808      * is that if you are not currently processing an IPC, this function
1809      * will always fail.  This is done to protect against accidentally
1810      * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
1811      * to avoid this protection.
1812      *
1813      * @param permission The name of the permission being checked.
1814      *
1815      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
1816      * pid/uid is allowed that permission, or
1817      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1818      *
1819      * @see PackageManager#checkPermission(String, String)
1820      * @see #checkPermission
1821      * @see #checkCallingOrSelfPermission
1822      */
checkCallingPermission(String permission)1823     public abstract int checkCallingPermission(String permission);
1824 
1825     /**
1826      * Determine whether the calling process of an IPC <em>or you</em> have been
1827      * granted a particular permission.  This is the same as
1828      * {@link #checkCallingPermission}, except it grants your own permissions
1829      * if you are not currently processing an IPC.  Use with care!
1830      *
1831      * @param permission The name of the permission being checked.
1832      *
1833      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
1834      * pid/uid is allowed that permission, or
1835      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1836      *
1837      * @see PackageManager#checkPermission(String, String)
1838      * @see #checkPermission
1839      * @see #checkCallingPermission
1840      */
checkCallingOrSelfPermission(String permission)1841     public abstract int checkCallingOrSelfPermission(String permission);
1842 
1843     /**
1844      * If the given permission is not allowed for a particular process
1845      * and user ID running in the system, throw a {@link SecurityException}.
1846      *
1847      * @param permission The name of the permission being checked.
1848      * @param pid The process ID being checked against.  Must be &gt; 0.
1849      * @param uid The user ID being checked against.  A uid of 0 is the root
1850      * user, which will pass every permission check.
1851      * @param message A message to include in the exception if it is thrown.
1852      *
1853      * @see #checkPermission(String, int, int)
1854      */
enforcePermission( String permission, int pid, int uid, String message)1855     public abstract void enforcePermission(
1856             String permission, int pid, int uid, String message);
1857 
1858     /**
1859      * If the calling process of an IPC you are handling has not been
1860      * granted a particular permission, throw a {@link
1861      * SecurityException}.  This is basically the same as calling
1862      * {@link #enforcePermission(String, int, int, String)} with the
1863      * pid and uid returned by {@link android.os.Binder#getCallingPid}
1864      * and {@link android.os.Binder#getCallingUid}.  One important
1865      * difference is that if you are not currently processing an IPC,
1866      * this function will always throw the SecurityException.  This is
1867      * done to protect against accidentally leaking permissions; you
1868      * can use {@link #enforceCallingOrSelfPermission} to avoid this
1869      * protection.
1870      *
1871      * @param permission The name of the permission being checked.
1872      * @param message A message to include in the exception if it is thrown.
1873      *
1874      * @see #checkCallingPermission(String)
1875      */
enforceCallingPermission( String permission, String message)1876     public abstract void enforceCallingPermission(
1877             String permission, String message);
1878 
1879     /**
1880      * If neither you nor the calling process of an IPC you are
1881      * handling has been granted a particular permission, throw a
1882      * {@link SecurityException}.  This is the same as {@link
1883      * #enforceCallingPermission}, except it grants your own
1884      * permissions if you are not currently processing an IPC.  Use
1885      * with care!
1886      *
1887      * @param permission The name of the permission being checked.
1888      * @param message A message to include in the exception if it is thrown.
1889      *
1890      * @see #checkCallingOrSelfPermission(String)
1891      */
enforceCallingOrSelfPermission( String permission, String message)1892     public abstract void enforceCallingOrSelfPermission(
1893             String permission, String message);
1894 
1895     /**
1896      * Grant permission to access a specific Uri to another package, regardless
1897      * of whether that package has general permission to access the Uri's
1898      * content provider.  This can be used to grant specific, temporary
1899      * permissions, typically in response to user interaction (such as the
1900      * user opening an attachment that you would like someone else to
1901      * display).
1902      *
1903      * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
1904      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1905      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
1906      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
1907      * start an activity instead of this function directly.  If you use this
1908      * function directly, you should be sure to call
1909      * {@link #revokeUriPermission} when the target should no longer be allowed
1910      * to access it.
1911      *
1912      * <p>To succeed, the content provider owning the Uri must have set the
1913      * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
1914      * grantUriPermissions} attribute in its manifest or included the
1915      * {@link android.R.styleable#AndroidManifestGrantUriPermission
1916      * &lt;grant-uri-permissions&gt;} tag.
1917      *
1918      * @param toPackage The package you would like to allow to access the Uri.
1919      * @param uri The Uri you would like to grant access to.
1920      * @param modeFlags The desired access modes.  Any combination of
1921      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
1922      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1923      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
1924      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1925      *
1926      * @see #revokeUriPermission
1927      */
grantUriPermission(String toPackage, Uri uri, int modeFlags)1928     public abstract void grantUriPermission(String toPackage, Uri uri,
1929             int modeFlags);
1930 
1931     /**
1932      * Remove all permissions to access a particular content provider Uri
1933      * that were previously added with {@link #grantUriPermission}.  The given
1934      * Uri will match all previously granted Uris that are the same or a
1935      * sub-path of the given Uri.  That is, revoking "content://foo/one" will
1936      * revoke both "content://foo/target" and "content://foo/target/sub", but not
1937      * "content://foo".
1938      *
1939      * @param uri The Uri you would like to revoke access to.
1940      * @param modeFlags The desired access modes.  Any combination of
1941      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
1942      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1943      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
1944      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1945      *
1946      * @see #grantUriPermission
1947      */
revokeUriPermission(Uri uri, int modeFlags)1948     public abstract void revokeUriPermission(Uri uri, int modeFlags);
1949 
1950     /**
1951      * Determine whether a particular process and user ID has been granted
1952      * permission to access a specific URI.  This only checks for permissions
1953      * that have been explicitly granted -- if the given process/uid has
1954      * more general access to the URI's content provider then this check will
1955      * always fail.
1956      *
1957      * @param uri The uri that is being checked.
1958      * @param pid The process ID being checked against.  Must be &gt; 0.
1959      * @param uid The user ID being checked against.  A uid of 0 is the root
1960      * user, which will pass every permission check.
1961      * @param modeFlags The type of access to grant.  May be one or both of
1962      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1963      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1964      *
1965      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
1966      * pid/uid is allowed to access that uri, or
1967      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1968      *
1969      * @see #checkCallingUriPermission
1970      */
checkUriPermission(Uri uri, int pid, int uid, int modeFlags)1971     public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
1972 
1973     /**
1974      * Determine whether the calling process and user ID has been
1975      * granted permission to access a specific URI.  This is basically
1976      * the same as calling {@link #checkUriPermission(Uri, int, int,
1977      * int)} with the pid and uid returned by {@link
1978      * android.os.Binder#getCallingPid} and {@link
1979      * android.os.Binder#getCallingUid}.  One important difference is
1980      * that if you are not currently processing an IPC, this function
1981      * will always fail.
1982      *
1983      * @param uri The uri that is being checked.
1984      * @param modeFlags The type of access to grant.  May be one or both of
1985      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1986      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1987      *
1988      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
1989      * is allowed to access that uri, or
1990      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1991      *
1992      * @see #checkUriPermission(Uri, int, int, int)
1993      */
checkCallingUriPermission(Uri uri, int modeFlags)1994     public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
1995 
1996     /**
1997      * Determine whether the calling process of an IPC <em>or you</em> has been granted
1998      * permission to access a specific URI.  This is the same as
1999      * {@link #checkCallingUriPermission}, except it grants your own permissions
2000      * if you are not currently processing an IPC.  Use with care!
2001      *
2002      * @param uri The uri that is being checked.
2003      * @param modeFlags The type of access to grant.  May be one or both of
2004      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
2005      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
2006      *
2007      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
2008      * is allowed to access that uri, or
2009      * {@link PackageManager#PERMISSION_DENIED} if it is not.
2010      *
2011      * @see #checkCallingUriPermission
2012      */
checkCallingOrSelfUriPermission(Uri uri, int modeFlags)2013     public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
2014 
2015     /**
2016      * Check both a Uri and normal permission.  This allows you to perform
2017      * both {@link #checkPermission} and {@link #checkUriPermission} in one
2018      * call.
2019      *
2020      * @param uri The Uri whose permission is to be checked, or null to not
2021      * do this check.
2022      * @param readPermission The permission that provides overall read access,
2023      * or null to not do this check.
2024      * @param writePermission The permission that provides overall write
2025      * acess, or null to not do this check.
2026      * @param pid The process ID being checked against.  Must be &gt; 0.
2027      * @param uid The user ID being checked against.  A uid of 0 is the root
2028      * user, which will pass every permission check.
2029      * @param modeFlags The type of access to grant.  May be one or both of
2030      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
2031      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
2032      *
2033      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
2034      * is allowed to access that uri or holds one of the given permissions, or
2035      * {@link PackageManager#PERMISSION_DENIED} if it is not.
2036      */
checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags)2037     public abstract int checkUriPermission(Uri uri, String readPermission,
2038             String writePermission, int pid, int uid, int modeFlags);
2039 
2040     /**
2041      * If a particular process and user ID has not been granted
2042      * permission to access a specific URI, throw {@link
2043      * SecurityException}.  This only checks for permissions that have
2044      * been explicitly granted -- if the given process/uid has more
2045      * general access to the URI's content provider then this check
2046      * will always fail.
2047      *
2048      * @param uri The uri that is being checked.
2049      * @param pid The process ID being checked against.  Must be &gt; 0.
2050      * @param uid The user ID being checked against.  A uid of 0 is the root
2051      * user, which will pass every permission check.
2052      * @param modeFlags The type of access to grant.  May be one or both of
2053      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
2054      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
2055      * @param message A message to include in the exception if it is thrown.
2056      *
2057      * @see #checkUriPermission(Uri, int, int, int)
2058      */
enforceUriPermission( Uri uri, int pid, int uid, int modeFlags, String message)2059     public abstract void enforceUriPermission(
2060             Uri uri, int pid, int uid, int modeFlags, String message);
2061 
2062     /**
2063      * If the calling process and user ID has not been granted
2064      * permission to access a specific URI, throw {@link
2065      * SecurityException}.  This is basically the same as calling
2066      * {@link #enforceUriPermission(Uri, int, int, int, String)} with
2067      * the pid and uid returned by {@link
2068      * android.os.Binder#getCallingPid} and {@link
2069      * android.os.Binder#getCallingUid}.  One important difference is
2070      * that if you are not currently processing an IPC, this function
2071      * will always throw a SecurityException.
2072      *
2073      * @param uri The uri that is being checked.
2074      * @param modeFlags The type of access to grant.  May be one or both of
2075      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
2076      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
2077      * @param message A message to include in the exception if it is thrown.
2078      *
2079      * @see #checkCallingUriPermission(Uri, int)
2080      */
enforceCallingUriPermission( Uri uri, int modeFlags, String message)2081     public abstract void enforceCallingUriPermission(
2082             Uri uri, int modeFlags, String message);
2083 
2084     /**
2085      * If the calling process of an IPC <em>or you</em> has not been
2086      * granted permission to access a specific URI, throw {@link
2087      * SecurityException}.  This is the same as {@link
2088      * #enforceCallingUriPermission}, except it grants your own
2089      * permissions if you are not currently processing an IPC.  Use
2090      * with care!
2091      *
2092      * @param uri The uri that is being checked.
2093      * @param modeFlags The type of access to grant.  May be one or both of
2094      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
2095      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
2096      * @param message A message to include in the exception if it is thrown.
2097      *
2098      * @see #checkCallingOrSelfUriPermission(Uri, int)
2099      */
enforceCallingOrSelfUriPermission( Uri uri, int modeFlags, String message)2100     public abstract void enforceCallingOrSelfUriPermission(
2101             Uri uri, int modeFlags, String message);
2102 
2103     /**
2104      * Enforce both a Uri and normal permission.  This allows you to perform
2105      * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
2106      * call.
2107      *
2108      * @param uri The Uri whose permission is to be checked, or null to not
2109      * do this check.
2110      * @param readPermission The permission that provides overall read access,
2111      * or null to not do this check.
2112      * @param writePermission The permission that provides overall write
2113      * acess, or null to not do this check.
2114      * @param pid The process ID being checked against.  Must be &gt; 0.
2115      * @param uid The user ID being checked against.  A uid of 0 is the root
2116      * user, which will pass every permission check.
2117      * @param modeFlags The type of access to grant.  May be one or both of
2118      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
2119      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
2120      * @param message A message to include in the exception if it is thrown.
2121      *
2122      * @see #checkUriPermission(Uri, String, String, int, int, int)
2123      */
enforceUriPermission( Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags, String message)2124     public abstract void enforceUriPermission(
2125             Uri uri, String readPermission, String writePermission,
2126             int pid, int uid, int modeFlags, String message);
2127 
2128     /**
2129      * Flag for use with {@link #createPackageContext}: include the application
2130      * code with the context.  This means loading code into the caller's
2131      * process, so that {@link #getClassLoader()} can be used to instantiate
2132      * the application's classes.  Setting this flags imposes security
2133      * restrictions on what application context you can access; if the
2134      * requested application can not be safely loaded into your process,
2135      * java.lang.SecurityException will be thrown.  If this flag is not set,
2136      * there will be no restrictions on the packages that can be loaded,
2137      * but {@link #getClassLoader} will always return the default system
2138      * class loader.
2139      */
2140     public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
2141 
2142     /**
2143      * Flag for use with {@link #createPackageContext}: ignore any security
2144      * restrictions on the Context being requested, allowing it to always
2145      * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
2146      * to be loaded into a process even when it isn't safe to do so.  Use
2147      * with extreme care!
2148      */
2149     public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
2150 
2151     /**
2152      * Flag for use with {@link #createPackageContext}: a restricted context may
2153      * disable specific features. For instance, a View associated with a restricted
2154      * context would ignore particular XML attributes.
2155      */
2156     public static final int CONTEXT_RESTRICTED = 0x00000004;
2157 
2158     /**
2159      * Return a new Context object for the given application name.  This
2160      * Context is the same as what the named application gets when it is
2161      * launched, containing the same resources and class loader.  Each call to
2162      * this method returns a new instance of a Context object; Context objects
2163      * are not shared, however they share common state (Resources, ClassLoader,
2164      * etc) so the Context instance itself is fairly lightweight.
2165      *
2166      * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
2167      * application with the given package name.
2168      *
2169      * <p>Throws {@link java.lang.SecurityException} if the Context requested
2170      * can not be loaded into the caller's process for security reasons (see
2171      * {@link #CONTEXT_INCLUDE_CODE} for more information}.
2172      *
2173      * @param packageName Name of the application's package.
2174      * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
2175      *              or {@link #CONTEXT_IGNORE_SECURITY}.
2176      *
2177      * @return A Context for the application.
2178      *
2179      * @throws java.lang.SecurityException
2180      * @throws PackageManager.NameNotFoundException if there is no application with
2181      * the given package name
2182      */
createPackageContext(String packageName, int flags)2183     public abstract Context createPackageContext(String packageName,
2184             int flags) throws PackageManager.NameNotFoundException;
2185 
2186     /**
2187      * Indicates whether this Context is restricted.
2188      *
2189      * @return True if this Context is restricted, false otherwise.
2190      *
2191      * @see #CONTEXT_RESTRICTED
2192      */
isRestricted()2193     public boolean isRestricted() {
2194         return false;
2195     }
2196 }
2197