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