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.annotation.IntDef;
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.annotation.StringDef;
23 import android.annotation.SystemApi;
24 import android.content.pm.ApplicationInfo;
25 import android.content.pm.PackageManager;
26 import android.content.res.AssetManager;
27 import android.content.res.Configuration;
28 import android.content.res.Resources;
29 import android.content.res.TypedArray;
30 import android.database.DatabaseErrorHandler;
31 import android.database.sqlite.SQLiteDatabase;
32 import android.database.sqlite.SQLiteDatabase.CursorFactory;
33 import android.graphics.Bitmap;
34 import android.graphics.drawable.Drawable;
35 import android.media.MediaScannerConnection.OnScanCompletedListener;
36 import android.net.Uri;
37 import android.os.Bundle;
38 import android.os.Environment;
39 import android.os.Handler;
40 import android.os.IBinder;
41 import android.os.Looper;
42 import android.os.StatFs;
43 import android.os.UserHandle;
44 import android.os.UserManager;
45 import android.provider.MediaStore;
46 import android.util.AttributeSet;
47 import android.view.DisplayAdjustments;
48 import android.view.Display;
49 import android.view.ViewDebug;
50 import android.view.WindowManager;
51 
52 import java.io.File;
53 import java.io.FileInputStream;
54 import java.io.FileNotFoundException;
55 import java.io.FileOutputStream;
56 import java.io.IOException;
57 import java.io.InputStream;
58 import java.lang.annotation.Retention;
59 import java.lang.annotation.RetentionPolicy;
60 
61 /**
62  * Interface to global information about an application environment.  This is
63  * an abstract class whose implementation is provided by
64  * the Android system.  It
65  * allows access to application-specific resources and classes, as well as
66  * up-calls for application-level operations such as launching activities,
67  * broadcasting and receiving intents, etc.
68  */
69 public abstract class Context {
70     /**
71      * File creation mode: the default mode, where the created file can only
72      * be accessed by the calling application (or all applications sharing the
73      * same user ID).
74      * @see #MODE_WORLD_READABLE
75      * @see #MODE_WORLD_WRITEABLE
76      */
77     public static final int MODE_PRIVATE = 0x0000;
78     /**
79      * @deprecated Creating world-readable files is very dangerous, and likely
80      * to cause security holes in applications.  It is strongly discouraged;
81      * instead, applications should use more formal mechanism for interactions
82      * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
83      * {@link android.app.Service}.  There are no guarantees that this
84      * access mode will remain on a file, such as when it goes through a
85      * backup and restore.
86      * File creation mode: allow all other applications to have read access
87      * to the created file.
88      * @see #MODE_PRIVATE
89      * @see #MODE_WORLD_WRITEABLE
90      */
91     @Deprecated
92     public static final int MODE_WORLD_READABLE = 0x0001;
93     /**
94      * @deprecated Creating world-writable files is very dangerous, and likely
95      * to cause security holes in applications.  It is strongly discouraged;
96      * instead, applications should use more formal mechanism for interactions
97      * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
98      * {@link android.app.Service}.  There are no guarantees that this
99      * access mode will remain on a file, such as when it goes through a
100      * backup and restore.
101      * File creation mode: allow all other applications to have write access
102      * to the created file.
103      * @see #MODE_PRIVATE
104      * @see #MODE_WORLD_READABLE
105      */
106     @Deprecated
107     public static final int MODE_WORLD_WRITEABLE = 0x0002;
108     /**
109      * File creation mode: for use with {@link #openFileOutput}, if the file
110      * already exists then write data to the end of the existing file
111      * instead of erasing it.
112      * @see #openFileOutput
113      */
114     public static final int MODE_APPEND = 0x8000;
115 
116     /**
117      * SharedPreference loading flag: when set, the file on disk will
118      * be checked for modification even if the shared preferences
119      * instance is already loaded in this process.  This behavior is
120      * sometimes desired in cases where the application has multiple
121      * processes, all writing to the same SharedPreferences file.
122      * Generally there are better forms of communication between
123      * processes, though.
124      *
125      * <p>This was the legacy (but undocumented) behavior in and
126      * before Gingerbread (Android 2.3) and this flag is implied when
127      * targetting such releases.  For applications targetting SDK
128      * versions <em>greater than</em> Android 2.3, this flag must be
129      * explicitly set if desired.
130      *
131      * @see #getSharedPreferences
132      */
133     public static final int MODE_MULTI_PROCESS = 0x0004;
134 
135     /**
136      * Database open flag: when set, the database is opened with write-ahead
137      * logging enabled by default.
138      *
139      * @see #openOrCreateDatabase(String, int, CursorFactory)
140      * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler)
141      * @see SQLiteDatabase#enableWriteAheadLogging
142      */
143     public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
144 
145     /** @hide */
146     @IntDef(flag = true,
147             value = {
148                 BIND_AUTO_CREATE,
149                 BIND_AUTO_CREATE,
150                 BIND_DEBUG_UNBIND,
151                 BIND_NOT_FOREGROUND,
152                 BIND_ABOVE_CLIENT,
153                 BIND_ALLOW_OOM_MANAGEMENT,
154                 BIND_WAIVE_PRIORITY
155             })
156     @Retention(RetentionPolicy.SOURCE)
157     public @interface BindServiceFlags {}
158 
159     /**
160      * Flag for {@link #bindService}: automatically create the service as long
161      * as the binding exists.  Note that while this will create the service,
162      * its {@link android.app.Service#onStartCommand}
163      * method will still only be called due to an
164      * explicit call to {@link #startService}.  Even without that, though,
165      * this still provides you with access to the service object while the
166      * service is created.
167      *
168      * <p>Note that prior to {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH},
169      * not supplying this flag would also impact how important the system
170      * consider's the target service's process to be.  When set, the only way
171      * for it to be raised was by binding from a service in which case it will
172      * only be important when that activity is in the foreground.  Now to
173      * achieve this behavior you must explicitly supply the new flag
174      * {@link #BIND_ADJUST_WITH_ACTIVITY}.  For compatibility, old applications
175      * that don't specify {@link #BIND_AUTO_CREATE} will automatically have
176      * the flags {@link #BIND_WAIVE_PRIORITY} and
177      * {@link #BIND_ADJUST_WITH_ACTIVITY} set for them in order to achieve
178      * the same result.
179      */
180     public static final int BIND_AUTO_CREATE = 0x0001;
181 
182     /**
183      * Flag for {@link #bindService}: include debugging help for mismatched
184      * calls to unbind.  When this flag is set, the callstack of the following
185      * {@link #unbindService} call is retained, to be printed if a later
186      * incorrect unbind call is made.  Note that doing this requires retaining
187      * information about the binding that was made for the lifetime of the app,
188      * resulting in a leak -- this should only be used for debugging.
189      */
190     public static final int BIND_DEBUG_UNBIND = 0x0002;
191 
192     /**
193      * Flag for {@link #bindService}: don't allow this binding to raise
194      * the target service's process to the foreground scheduling priority.
195      * It will still be raised to at least the same memory priority
196      * as the client (so that its process will not be killable in any
197      * situation where the client is not killable), but for CPU scheduling
198      * purposes it may be left in the background.  This only has an impact
199      * in the situation where the binding client is a foreground process
200      * and the target service is in a background process.
201      */
202     public static final int BIND_NOT_FOREGROUND = 0x0004;
203 
204     /**
205      * Flag for {@link #bindService}: indicates that the client application
206      * binding to this service considers the service to be more important than
207      * the app itself.  When set, the platform will try to have the out of
208      * memory killer kill the app before it kills the service it is bound to, though
209      * this is not guaranteed to be the case.
210      */
211     public static final int BIND_ABOVE_CLIENT = 0x0008;
212 
213     /**
214      * Flag for {@link #bindService}: allow the process hosting the bound
215      * service to go through its normal memory management.  It will be
216      * treated more like a running service, allowing the system to
217      * (temporarily) expunge the process if low on memory or for some other
218      * whim it may have, and being more aggressive about making it a candidate
219      * to be killed (and restarted) if running for a long time.
220      */
221     public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010;
222 
223     /**
224      * Flag for {@link #bindService}: don't impact the scheduling or
225      * memory management priority of the target service's hosting process.
226      * Allows the service's process to be managed on the background LRU list
227      * just like a regular application process in the background.
228      */
229     public static final int BIND_WAIVE_PRIORITY = 0x0020;
230 
231     /**
232      * Flag for {@link #bindService}: this service is very important to
233      * the client, so should be brought to the foreground process level
234      * when the client is.  Normally a process can only be raised to the
235      * visibility level by a client, even if that client is in the foreground.
236      */
237     public static final int BIND_IMPORTANT = 0x0040;
238 
239     /**
240      * Flag for {@link #bindService}: If binding from an activity, allow the
241      * target service's process importance to be raised based on whether the
242      * activity is visible to the user, regardless whether another flag is
243      * used to reduce the amount that the client process's overall importance
244      * is used to impact it.
245      */
246     public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
247 
248     /**
249      * @hide Flag for {@link #bindService}: Treat the binding as hosting
250      * an activity, an unbinding as the activity going in the background.
251      * That is, when unbinding, the process when empty will go on the activity
252      * LRU list instead of the regular one, keeping it around more aggressively
253      * than it otherwise would be.  This is intended for use with IMEs to try
254      * to keep IME processes around for faster keyboard switching.
255      */
256     public static final int BIND_TREAT_LIKE_ACTIVITY = 0x08000000;
257 
258     /**
259      * @hide An idea that is not yet implemented.
260      * Flag for {@link #bindService}: If binding from an activity, consider
261      * this service to be visible like the binding activity is.  That is,
262      * it will be treated as something more important to keep around than
263      * invisible background activities.  This will impact the number of
264      * recent activities the user can switch between without having them
265      * restart.  There is no guarantee this will be respected, as the system
266      * tries to balance such requests from one app vs. the importantance of
267      * keeping other apps around.
268      */
269     public static final int BIND_VISIBLE = 0x10000000;
270 
271     /**
272      * @hide
273      * Flag for {@link #bindService}: Consider this binding to be causing the target
274      * process to be showing UI, so it will be do a UI_HIDDEN memory trim when it goes
275      * away.
276      */
277     public static final int BIND_SHOWING_UI = 0x20000000;
278 
279     /**
280      * Flag for {@link #bindService}: Don't consider the bound service to be
281      * visible, even if the caller is visible.
282      * @hide
283      */
284     public static final int BIND_NOT_VISIBLE = 0x40000000;
285 
286     /** Return an AssetManager instance for your application's package. */
getAssets()287     public abstract AssetManager getAssets();
288 
289     /** Return a Resources instance for your application's package. */
getResources()290     public abstract Resources getResources();
291 
292     /** Return PackageManager instance to find global package information. */
getPackageManager()293     public abstract PackageManager getPackageManager();
294 
295     /** Return a ContentResolver instance for your application's package. */
getContentResolver()296     public abstract ContentResolver getContentResolver();
297 
298     /**
299      * Return the Looper for the main thread of the current process.  This is
300      * the thread used to dispatch calls to application components (activities,
301      * services, etc).
302      * <p>
303      * By definition, this method returns the same result as would be obtained
304      * by calling {@link Looper#getMainLooper() Looper.getMainLooper()}.
305      * </p>
306      *
307      * @return The main looper.
308      */
getMainLooper()309     public abstract Looper getMainLooper();
310 
311     /**
312      * Return the context of the single, global Application object of the
313      * current process.  This generally should only be used if you need a
314      * Context whose lifecycle is separate from the current context, that is
315      * tied to the lifetime of the process rather than the current component.
316      *
317      * <p>Consider for example how this interacts with
318      * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}:
319      * <ul>
320      * <li> <p>If used from an Activity context, the receiver is being registered
321      * within that activity.  This means that you are expected to unregister
322      * before the activity is done being destroyed; in fact if you do not do
323      * so, the framework will clean up your leaked registration as it removes
324      * the activity and log an error.  Thus, if you use the Activity context
325      * to register a receiver that is static (global to the process, not
326      * associated with an Activity instance) then that registration will be
327      * removed on you at whatever point the activity you used is destroyed.
328      * <li> <p>If used from the Context returned here, the receiver is being
329      * registered with the global state associated with your application.  Thus
330      * it will never be unregistered for you.  This is necessary if the receiver
331      * is associated with static data, not a particular component.  However
332      * using the ApplicationContext elsewhere can easily lead to serious leaks
333      * if you forget to unregister, unbind, etc.
334      * </ul>
335      */
getApplicationContext()336     public abstract Context getApplicationContext();
337 
338     /**
339      * Add a new {@link ComponentCallbacks} to the base application of the
340      * Context, which will be called at the same times as the ComponentCallbacks
341      * methods of activities and other components are called.  Note that you
342      * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when
343      * appropriate in the future; this will not be removed for you.
344      *
345      * @param callback The interface to call.  This can be either a
346      * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
347      */
registerComponentCallbacks(ComponentCallbacks callback)348     public void registerComponentCallbacks(ComponentCallbacks callback) {
349         getApplicationContext().registerComponentCallbacks(callback);
350     }
351 
352     /**
353      * Remove a {@link ComponentCallbacks} object that was previously registered
354      * with {@link #registerComponentCallbacks(ComponentCallbacks)}.
355      */
unregisterComponentCallbacks(ComponentCallbacks callback)356     public void unregisterComponentCallbacks(ComponentCallbacks callback) {
357         getApplicationContext().unregisterComponentCallbacks(callback);
358     }
359 
360     /**
361      * Return a localized, styled CharSequence from the application's package's
362      * default string table.
363      *
364      * @param resId Resource id for the CharSequence text
365      */
getText(int resId)366     public final CharSequence getText(int resId) {
367         return getResources().getText(resId);
368     }
369 
370     /**
371      * Return a localized string from the application's package's
372      * default string table.
373      *
374      * @param resId Resource id for the string
375      */
getString(int resId)376     public final String getString(int resId) {
377         return getResources().getString(resId);
378     }
379 
380     /**
381      * Return a localized formatted string from the application's package's
382      * default string table, substituting the format arguments as defined in
383      * {@link java.util.Formatter} and {@link java.lang.String#format}.
384      *
385      * @param resId Resource id for the format string
386      * @param formatArgs The format arguments that will be used for substitution.
387      */
388 
getString(int resId, Object... formatArgs)389     public final String getString(int resId, Object... formatArgs) {
390         return getResources().getString(resId, formatArgs);
391     }
392 
393     /**
394      * Return a drawable object associated with a particular resource ID and
395      * styled for the current theme.
396      *
397      * @param id The desired resource identifier, as generated by the aapt
398      *           tool. This integer encodes the package, type, and resource
399      *           entry. The value 0 is an invalid identifier.
400      * @return Drawable An object that can be used to draw this resource.
401      */
getDrawable(int id)402     public final Drawable getDrawable(int id) {
403         return getResources().getDrawable(id, getTheme());
404     }
405 
406      /**
407      * Set the base theme for this context.  Note that this should be called
408      * before any views are instantiated in the Context (for example before
409      * calling {@link android.app.Activity#setContentView} or
410      * {@link android.view.LayoutInflater#inflate}).
411      *
412      * @param resid The style resource describing the theme.
413      */
setTheme(int resid)414     public abstract void setTheme(int resid);
415 
416     /** @hide Needed for some internal implementation...  not public because
417      * you can't assume this actually means anything. */
getThemeResId()418     public int getThemeResId() {
419         return 0;
420     }
421 
422     /**
423      * Return the Theme object associated with this Context.
424      */
425     @ViewDebug.ExportedProperty(deepExport = true)
getTheme()426     public abstract Resources.Theme getTheme();
427 
428     /**
429      * Retrieve styled attribute information in this Context's theme.  See
430      * {@link Resources.Theme#obtainStyledAttributes(int[])}
431      * for more information.
432      *
433      * @see Resources.Theme#obtainStyledAttributes(int[])
434      */
obtainStyledAttributes( int[] attrs)435     public final TypedArray obtainStyledAttributes(
436             int[] attrs) {
437         return getTheme().obtainStyledAttributes(attrs);
438     }
439 
440     /**
441      * Retrieve styled attribute information in this Context's theme.  See
442      * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
443      * for more information.
444      *
445      * @see Resources.Theme#obtainStyledAttributes(int, int[])
446      */
obtainStyledAttributes( int resid, int[] attrs)447     public final TypedArray obtainStyledAttributes(
448             int resid, int[] attrs) throws Resources.NotFoundException {
449         return getTheme().obtainStyledAttributes(resid, attrs);
450     }
451 
452     /**
453      * Retrieve styled attribute information in this Context's theme.  See
454      * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
455      * for more information.
456      *
457      * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
458      */
obtainStyledAttributes( AttributeSet set, int[] attrs)459     public final TypedArray obtainStyledAttributes(
460             AttributeSet set, int[] attrs) {
461         return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
462     }
463 
464     /**
465      * Retrieve styled attribute information in this Context's theme.  See
466      * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
467      * for more information.
468      *
469      * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
470      */
obtainStyledAttributes( AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)471     public final TypedArray obtainStyledAttributes(
472             AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
473         return getTheme().obtainStyledAttributes(
474             set, attrs, defStyleAttr, defStyleRes);
475     }
476 
477     /**
478      * Return a class loader you can use to retrieve classes in this package.
479      */
getClassLoader()480     public abstract ClassLoader getClassLoader();
481 
482     /** Return the name of this application's package. */
getPackageName()483     public abstract String getPackageName();
484 
485     /** @hide Return the name of the base context this context is derived from. */
getBasePackageName()486     public abstract String getBasePackageName();
487 
488     /** @hide Return the package name that should be used for app ops calls from
489      * this context.  This is the same as {@link #getBasePackageName()} except in
490      * cases where system components are loaded into other app processes, in which
491      * case this will be the name of the primary package in that process (so that app
492      * ops uid verification will work with the name). */
getOpPackageName()493     public abstract String getOpPackageName();
494 
495     /** Return the full application info for this context's package. */
getApplicationInfo()496     public abstract ApplicationInfo getApplicationInfo();
497 
498     /**
499      * Return the full path to this context's primary Android package.
500      * The Android package is a ZIP file which contains the application's
501      * primary resources.
502      *
503      * <p>Note: this is not generally useful for applications, since they should
504      * not be directly accessing the file system.
505      *
506      * @return String Path to the resources.
507      */
getPackageResourcePath()508     public abstract String getPackageResourcePath();
509 
510     /**
511      * Return the full path to this context's primary Android package.
512      * The Android package is a ZIP file which contains application's
513      * primary code and assets.
514      *
515      * <p>Note: this is not generally useful for applications, since they should
516      * not be directly accessing the file system.
517      *
518      * @return String Path to the code and assets.
519      */
getPackageCodePath()520     public abstract String getPackageCodePath();
521 
522     /**
523      * {@hide}
524      * Return the full path to the shared prefs file for the given prefs group name.
525      *
526      * <p>Note: this is not generally useful for applications, since they should
527      * not be directly accessing the file system.
528      */
getSharedPrefsFile(String name)529     public abstract File getSharedPrefsFile(String name);
530 
531     /**
532      * Retrieve and hold the contents of the preferences file 'name', returning
533      * a SharedPreferences through which you can retrieve and modify its
534      * values.  Only one instance of the SharedPreferences object is returned
535      * to any callers for the same name, meaning they will see each other's
536      * edits as soon as they are made.
537      *
538      * @param name Desired preferences file. If a preferences file by this name
539      * does not exist, it will be created when you retrieve an
540      * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
541      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
542      * default operation, {@link #MODE_WORLD_READABLE}
543      * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
544      * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
545      * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
546      * is always on in apps targeting Gingerbread (Android 2.3) and below, and
547      * off by default in later versions.
548      *
549      * @return The single {@link SharedPreferences} instance that can be used
550      *         to retrieve and modify the preference values.
551      *
552      * @see #MODE_PRIVATE
553      * @see #MODE_WORLD_READABLE
554      * @see #MODE_WORLD_WRITEABLE
555      * @see #MODE_MULTI_PROCESS
556      */
getSharedPreferences(String name, int mode)557     public abstract SharedPreferences getSharedPreferences(String name,
558             int mode);
559 
560     /**
561      * Open a private file associated with this Context's application package
562      * for reading.
563      *
564      * @param name The name of the file to open; can not contain path
565      *             separators.
566      *
567      * @return The resulting {@link FileInputStream}.
568      *
569      * @see #openFileOutput
570      * @see #fileList
571      * @see #deleteFile
572      * @see java.io.FileInputStream#FileInputStream(String)
573      */
openFileInput(String name)574     public abstract FileInputStream openFileInput(String name)
575         throws FileNotFoundException;
576 
577     /**
578      * Open a private file associated with this Context's application package
579      * for writing.  Creates the file if it doesn't already exist.
580      *
581      * <p>No permissions are required to invoke this method, since it uses internal
582      * storage.
583      *
584      * @param name The name of the file to open; can not contain path
585      *             separators.
586      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
587      * default operation, {@link #MODE_APPEND} to append to an existing file,
588      * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
589      * permissions.
590      *
591      * @return The resulting {@link FileOutputStream}.
592      *
593      * @see #MODE_APPEND
594      * @see #MODE_PRIVATE
595      * @see #MODE_WORLD_READABLE
596      * @see #MODE_WORLD_WRITEABLE
597      * @see #openFileInput
598      * @see #fileList
599      * @see #deleteFile
600      * @see java.io.FileOutputStream#FileOutputStream(String)
601      */
openFileOutput(String name, int mode)602     public abstract FileOutputStream openFileOutput(String name, int mode)
603         throws FileNotFoundException;
604 
605     /**
606      * Delete the given private file associated with this Context's
607      * application package.
608      *
609      * @param name The name of the file to delete; can not contain path
610      *             separators.
611      *
612      * @return {@code true} if the file was successfully deleted; else
613      *         {@code false}.
614      *
615      * @see #openFileInput
616      * @see #openFileOutput
617      * @see #fileList
618      * @see java.io.File#delete()
619      */
deleteFile(String name)620     public abstract boolean deleteFile(String name);
621 
622     /**
623      * Returns the absolute path on the filesystem where a file created with
624      * {@link #openFileOutput} is stored.
625      *
626      * @param name The name of the file for which you would like to get
627      *          its path.
628      *
629      * @return An absolute path to the given file.
630      *
631      * @see #openFileOutput
632      * @see #getFilesDir
633      * @see #getDir
634      */
getFileStreamPath(String name)635     public abstract File getFileStreamPath(String name);
636 
637     /**
638      * Returns the absolute path to the directory on the filesystem where
639      * files created with {@link #openFileOutput} are stored.
640      *
641      * <p>No permissions are required to read or write to the returned path, since this
642      * path is internal storage.
643      *
644      * @return The path of the directory holding application files.
645      *
646      * @see #openFileOutput
647      * @see #getFileStreamPath
648      * @see #getDir
649      */
getFilesDir()650     public abstract File getFilesDir();
651 
652     /**
653      * Returns the absolute path to the directory on the filesystem similar to
654      * {@link #getFilesDir()}.  The difference is that files placed under this
655      * directory will be excluded from automatic backup to remote storage.  See
656      * {@link android.app.backup.BackupAgent BackupAgent} for a full discussion
657      * of the automatic backup mechanism in Android.
658      *
659      * <p>No permissions are required to read or write to the returned path, since this
660      * path is internal storage.
661      *
662      * @return The path of the directory holding application files that will not be
663      *         automatically backed up to remote storage.
664      *
665      * @see #openFileOutput
666      * @see #getFileStreamPath
667      * @see #getDir
668      * @see android.app.backup.BackupAgent
669      */
getNoBackupFilesDir()670     public abstract File getNoBackupFilesDir();
671 
672     /**
673      * Returns the absolute path to the directory on the primary external filesystem
674      * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
675      * Environment.getExternalStorageDirectory()}) where the application can
676      * place persistent files it owns.  These files are internal to the
677      * applications, and not typically visible to the user as media.
678      *
679      * <p>This is like {@link #getFilesDir()} in that these
680      * files will be deleted when the application is uninstalled, however there
681      * are some important differences:
682      *
683      * <ul>
684      * <li>External files are not always available: they will disappear if the
685      * user mounts the external storage on a computer or removes it.  See the
686      * APIs on {@link android.os.Environment} for information in the storage state.
687      * <li>There is no security enforced with these files.  For example, any application
688      * holding {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to
689      * these files.
690      * </ul>
691      *
692      * <p>Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions
693      * are required to read or write to the returned path; it's always
694      * accessible to the calling app.  This only applies to paths generated for
695      * package name of the calling application.  To access paths belonging
696      * to other packages, {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
697      * and/or {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required.
698      *
699      * <p>On devices with multiple users (as described by {@link UserManager}),
700      * each user has their own isolated external storage. Applications only
701      * have access to the external storage for the user they're running as.</p>
702      *
703      * <p>Here is an example of typical code to manipulate a file in
704      * an application's private storage:</p>
705      *
706      * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
707      * private_file}
708      *
709      * <p>If you supply a non-null <var>type</var> to this function, the returned
710      * file will be a path to a sub-directory of the given type.  Though these files
711      * are not automatically scanned by the media scanner, you can explicitly
712      * add them to the media database with
713      * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[],
714      *      OnScanCompletedListener) MediaScannerConnection.scanFile}.
715      * Note that this is not the same as
716      * {@link android.os.Environment#getExternalStoragePublicDirectory
717      * Environment.getExternalStoragePublicDirectory()}, which provides
718      * directories of media shared by all applications.  The
719      * directories returned here are
720      * owned by the application, and their contents will be removed when the
721      * application is uninstalled.  Unlike
722      * {@link android.os.Environment#getExternalStoragePublicDirectory
723      * Environment.getExternalStoragePublicDirectory()}, the directory
724      * returned here will be automatically created for you.
725      *
726      * <p>Here is an example of typical code to manipulate a picture in
727      * an application's private storage and add it to the media database:</p>
728      *
729      * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
730      * private_picture}
731      *
732      * @param type The type of files directory to return.  May be null for
733      * the root of the files directory or one of
734      * the following Environment constants for a subdirectory:
735      * {@link android.os.Environment#DIRECTORY_MUSIC},
736      * {@link android.os.Environment#DIRECTORY_PODCASTS},
737      * {@link android.os.Environment#DIRECTORY_RINGTONES},
738      * {@link android.os.Environment#DIRECTORY_ALARMS},
739      * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
740      * {@link android.os.Environment#DIRECTORY_PICTURES}, or
741      * {@link android.os.Environment#DIRECTORY_MOVIES}.
742      *
743      * @return The path of the directory holding application files
744      * on external storage.  Returns null if external storage is not currently
745      * mounted so it could not ensure the path exists; you will need to call
746      * this method again when it is available.
747      *
748      * @see #getFilesDir
749      * @see android.os.Environment#getExternalStoragePublicDirectory
750      */
751     @Nullable
getExternalFilesDir(@ullable String type)752     public abstract File getExternalFilesDir(@Nullable String type);
753 
754     /**
755      * Returns absolute paths to application-specific directories on all
756      * external storage devices where the application can place persistent files
757      * it owns. These files are internal to the application, and not typically
758      * visible to the user as media.
759      * <p>
760      * This is like {@link #getFilesDir()} in that these files will be deleted when
761      * the application is uninstalled, however there are some important differences:
762      * <ul>
763      * <li>External files are not always available: they will disappear if the
764      * user mounts the external storage on a computer or removes it.
765      * <li>There is no security enforced with these files.
766      * </ul>
767      * <p>
768      * External storage devices returned here are considered a permanent part of
769      * the device, including both emulated external storage and physical media
770      * slots, such as SD cards in a battery compartment. The returned paths do
771      * not include transient devices, such as USB flash drives.
772      * <p>
773      * An application may store data on any or all of the returned devices.  For
774      * example, an app may choose to store large files on the device with the
775      * most available space, as measured by {@link StatFs}.
776      * <p>
777      * No permissions are required to read or write to the returned paths; they
778      * are always accessible to the calling app.  Write access outside of these
779      * paths on secondary external storage devices is not available.
780      * <p>
781      * The first path returned is the same as {@link #getExternalFilesDir(String)}.
782      * Returned paths may be {@code null} if a storage device is unavailable.
783      *
784      * @see #getExternalFilesDir(String)
785      * @see Environment#getExternalStorageState(File)
786      */
getExternalFilesDirs(String type)787     public abstract File[] getExternalFilesDirs(String type);
788 
789     /**
790      * Return the primary external storage directory where this application's OBB
791      * files (if there are any) can be found. Note if the application does not have
792      * any OBB files, this directory may not exist.
793      * <p>
794      * This is like {@link #getFilesDir()} in that these files will be deleted when
795      * the application is uninstalled, however there are some important differences:
796      * <ul>
797      * <li>External files are not always available: they will disappear if the
798      * user mounts the external storage on a computer or removes it.
799      * <li>There is no security enforced with these files.  For example, any application
800      * holding {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to
801      * these files.
802      * </ul>
803      * <p>
804      * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions
805      * are required to read or write to the returned path; it's always
806      * accessible to the calling app.  This only applies to paths generated for
807      * package name of the calling application.  To access paths belonging
808      * to other packages, {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
809      * and/or {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required.
810      * <p>
811      * On devices with multiple users (as described by {@link UserManager}),
812      * multiple users may share the same OBB storage location. Applications
813      * should ensure that multiple instances running under different users don't
814      * interfere with each other.
815      */
getObbDir()816     public abstract File getObbDir();
817 
818     /**
819      * Returns absolute paths to application-specific directories on all
820      * external storage devices where the application's OBB files (if there are
821      * any) can be found. Note if the application does not have any OBB files,
822      * these directories may not exist.
823      * <p>
824      * This is like {@link #getFilesDir()} in that these files will be deleted when
825      * the application is uninstalled, however there are some important differences:
826      * <ul>
827      * <li>External files are not always available: they will disappear if the
828      * user mounts the external storage on a computer or removes it.
829      * <li>There is no security enforced with these files.
830      * </ul>
831      * <p>
832      * External storage devices returned here are considered a permanent part of
833      * the device, including both emulated external storage and physical media
834      * slots, such as SD cards in a battery compartment. The returned paths do
835      * not include transient devices, such as USB flash drives.
836      * <p>
837      * An application may store data on any or all of the returned devices.  For
838      * example, an app may choose to store large files on the device with the
839      * most available space, as measured by {@link StatFs}.
840      * <p>
841      * No permissions are required to read or write to the returned paths; they
842      * are always accessible to the calling app.  Write access outside of these
843      * paths on secondary external storage devices is not available.
844      * <p>
845      * The first path returned is the same as {@link #getObbDir()}.
846      * Returned paths may be {@code null} if a storage device is unavailable.
847      *
848      * @see #getObbDir()
849      * @see Environment#getExternalStorageState(File)
850      */
getObbDirs()851     public abstract File[] getObbDirs();
852 
853     /**
854      * Returns the absolute path to the application specific cache directory
855      * on the filesystem. These files will be ones that get deleted first when the
856      * device runs low on storage.
857      * There is no guarantee when these files will be deleted.
858      *
859      * <strong>Note: you should not <em>rely</em> on the system deleting these
860      * files for you; you should always have a reasonable maximum, such as 1 MB,
861      * for the amount of space you consume with cache files, and prune those
862      * files when exceeding that space.</strong>
863      *
864      * @return The path of the directory holding application cache files.
865      *
866      * @see #openFileOutput
867      * @see #getFileStreamPath
868      * @see #getDir
869      */
getCacheDir()870     public abstract File getCacheDir();
871 
872     /**
873      * Returns the absolute path to the application specific cache directory on
874      * the filesystem designed for storing cached code. The system will delete
875      * any files stored in this location both when your specific application is
876      * upgraded, and when the entire platform is upgraded.
877      * <p>
878      * This location is optimal for storing compiled or optimized code generated
879      * by your application at runtime.
880      * <p>
881      * Apps require no extra permissions to read or write to the returned path,
882      * since this path lives in their private storage.
883      *
884      * @return The path of the directory holding application code cache files.
885      */
getCodeCacheDir()886     public abstract File getCodeCacheDir();
887 
888     /**
889      * Returns the absolute path to the directory on the primary external filesystem
890      * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
891      * Environment.getExternalStorageDirectory()} where the application can
892      * place cache files it owns. These files are internal to the application, and
893      * not typically visible to the user as media.
894      *
895      * <p>This is like {@link #getCacheDir()} in that these
896      * files will be deleted when the application is uninstalled, however there
897      * are some important differences:
898      *
899      * <ul>
900      * <li>The platform does not always monitor the space available in external
901      * storage, and thus may not automatically delete these files.  Currently
902      * the only time files here will be deleted by the platform is when running
903      * on {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and
904      * {@link android.os.Environment#isExternalStorageEmulated()
905      * Environment.isExternalStorageEmulated()} returns true.  Note that you should
906      * be managing the maximum space you will use for these anyway, just like
907      * with {@link #getCacheDir()}.
908      * <li>External files are not always available: they will disappear if the
909      * user mounts the external storage on a computer or removes it.  See the
910      * APIs on {@link android.os.Environment} for information in the storage state.
911      * <li>There is no security enforced with these files.  For example, any application
912      * holding {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to
913      * these files.
914      * </ul>
915      *
916      * <p>Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions
917      * are required to read or write to the returned path; it's always
918      * accessible to the calling app.  This only applies to paths generated for
919      * package name of the calling application.  To access paths belonging
920      * to other packages, {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
921      * and/or {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required.
922      *
923      * <p>On devices with multiple users (as described by {@link UserManager}),
924      * each user has their own isolated external storage. Applications only
925      * have access to the external storage for the user they're running as.</p>
926      *
927      * @return The path of the directory holding application cache files
928      * on external storage.  Returns null if external storage is not currently
929      * mounted so it could not ensure the path exists; you will need to call
930      * this method again when it is available.
931      *
932      * @see #getCacheDir
933      */
934     @Nullable
getExternalCacheDir()935     public abstract File getExternalCacheDir();
936 
937     /**
938      * Returns absolute paths to application-specific directories on all
939      * external storage devices where the application can place cache files it
940      * owns. These files are internal to the application, and not typically
941      * visible to the user as media.
942      * <p>
943      * This is like {@link #getCacheDir()} in that these files will be deleted when
944      * the application is uninstalled, however there are some important differences:
945      * <ul>
946      * <li>External files are not always available: they will disappear if the
947      * user mounts the external storage on a computer or removes it.
948      * <li>There is no security enforced with these files.
949      * </ul>
950      * <p>
951      * External storage devices returned here are considered a permanent part of
952      * the device, including both emulated external storage and physical media
953      * slots, such as SD cards in a battery compartment. The returned paths do
954      * not include transient devices, such as USB flash drives.
955      * <p>
956      * An application may store data on any or all of the returned devices.  For
957      * example, an app may choose to store large files on the device with the
958      * most available space, as measured by {@link StatFs}.
959      * <p>
960      * No permissions are required to read or write to the returned paths; they
961      * are always accessible to the calling app.  Write access outside of these
962      * paths on secondary external storage devices is not available.
963      * <p>
964      * The first path returned is the same as {@link #getExternalCacheDir()}.
965      * Returned paths may be {@code null} if a storage device is unavailable.
966      *
967      * @see #getExternalCacheDir()
968      * @see Environment#getExternalStorageState(File)
969      */
getExternalCacheDirs()970     public abstract File[] getExternalCacheDirs();
971 
972     /**
973      * Returns absolute paths to application-specific directories on all
974      * external storage devices where the application can place media files.
975      * These files are scanned and made available to other apps through
976      * {@link MediaStore}.
977      * <p>
978      * This is like {@link #getExternalFilesDirs} in that these files will be
979      * deleted when the application is uninstalled, however there are some
980      * important differences:
981      * <ul>
982      * <li>External files are not always available: they will disappear if the
983      * user mounts the external storage on a computer or removes it.
984      * <li>There is no security enforced with these files.
985      * </ul>
986      * <p>
987      * External storage devices returned here are considered a permanent part of
988      * the device, including both emulated external storage and physical media
989      * slots, such as SD cards in a battery compartment. The returned paths do
990      * not include transient devices, such as USB flash drives.
991      * <p>
992      * An application may store data on any or all of the returned devices. For
993      * example, an app may choose to store large files on the device with the
994      * most available space, as measured by {@link StatFs}.
995      * <p>
996      * No permissions are required to read or write to the returned paths; they
997      * are always accessible to the calling app. Write access outside of these
998      * paths on secondary external storage devices is not available.
999      * <p>
1000      * Returned paths may be {@code null} if a storage device is unavailable.
1001      *
1002      * @see Environment#getExternalStorageState(File)
1003      */
getExternalMediaDirs()1004     public abstract File[] getExternalMediaDirs();
1005 
1006     /**
1007      * Returns an array of strings naming the private files associated with
1008      * this Context's application package.
1009      *
1010      * @return Array of strings naming the private files.
1011      *
1012      * @see #openFileInput
1013      * @see #openFileOutput
1014      * @see #deleteFile
1015      */
fileList()1016     public abstract String[] fileList();
1017 
1018     /**
1019      * Retrieve, creating if needed, a new directory in which the application
1020      * can place its own custom data files.  You can use the returned File
1021      * object to create and access files in this directory.  Note that files
1022      * created through a File object will only be accessible by your own
1023      * application; you can only set the mode of the entire directory, not
1024      * of individual files.
1025      *
1026      * @param name Name of the directory to retrieve.  This is a directory
1027      * that is created as part of your application data.
1028      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
1029      * default operation, {@link #MODE_WORLD_READABLE} and
1030      * {@link #MODE_WORLD_WRITEABLE} to control permissions.
1031      *
1032      * @return A {@link File} object for the requested directory.  The directory
1033      * will have been created if it does not already exist.
1034      *
1035      * @see #openFileOutput(String, int)
1036      */
getDir(String name, int mode)1037     public abstract File getDir(String name, int mode);
1038 
1039     /**
1040      * Open a new private SQLiteDatabase associated with this Context's
1041      * application package.  Create the database file if it doesn't exist.
1042      *
1043      * @param name The name (unique in the application package) of the database.
1044      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
1045      *     default operation, {@link #MODE_WORLD_READABLE}
1046      *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
1047      *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
1048      * @param factory An optional factory class that is called to instantiate a
1049      *     cursor when query is called.
1050      *
1051      * @return The contents of a newly created database with the given name.
1052      * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
1053      *
1054      * @see #MODE_PRIVATE
1055      * @see #MODE_WORLD_READABLE
1056      * @see #MODE_WORLD_WRITEABLE
1057      * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
1058      * @see #deleteDatabase
1059      */
openOrCreateDatabase(String name, int mode, CursorFactory factory)1060     public abstract SQLiteDatabase openOrCreateDatabase(String name,
1061             int mode, CursorFactory factory);
1062 
1063     /**
1064      * Open a new private SQLiteDatabase associated with this Context's
1065      * application package.  Creates the database file if it doesn't exist.
1066      *
1067      * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
1068      * used to handle corruption when sqlite reports database corruption.</p>
1069      *
1070      * @param name The name (unique in the application package) of the database.
1071      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
1072      *     default operation, {@link #MODE_WORLD_READABLE}
1073      *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
1074      *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
1075      * @param factory An optional factory class that is called to instantiate a
1076      *     cursor when query is called.
1077      * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
1078      * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
1079      * @return The contents of a newly created database with the given name.
1080      * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
1081      *
1082      * @see #MODE_PRIVATE
1083      * @see #MODE_WORLD_READABLE
1084      * @see #MODE_WORLD_WRITEABLE
1085      * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
1086      * @see #deleteDatabase
1087      */
openOrCreateDatabase(String name, int mode, CursorFactory factory, @Nullable DatabaseErrorHandler errorHandler)1088     public abstract SQLiteDatabase openOrCreateDatabase(String name,
1089             int mode, CursorFactory factory,
1090             @Nullable DatabaseErrorHandler errorHandler);
1091 
1092     /**
1093      * Delete an existing private SQLiteDatabase associated with this Context's
1094      * application package.
1095      *
1096      * @param name The name (unique in the application package) of the
1097      *             database.
1098      *
1099      * @return {@code true} if the database was successfully deleted; else {@code false}.
1100      *
1101      * @see #openOrCreateDatabase
1102      */
deleteDatabase(String name)1103     public abstract boolean deleteDatabase(String name);
1104 
1105     /**
1106      * Returns the absolute path on the filesystem where a database created with
1107      * {@link #openOrCreateDatabase} is stored.
1108      *
1109      * @param name The name of the database for which you would like to get
1110      *          its path.
1111      *
1112      * @return An absolute path to the given database.
1113      *
1114      * @see #openOrCreateDatabase
1115      */
getDatabasePath(String name)1116     public abstract File getDatabasePath(String name);
1117 
1118     /**
1119      * Returns an array of strings naming the private databases associated with
1120      * this Context's application package.
1121      *
1122      * @return Array of strings naming the private databases.
1123      *
1124      * @see #openOrCreateDatabase
1125      * @see #deleteDatabase
1126      */
databaseList()1127     public abstract String[] databaseList();
1128 
1129     /**
1130      * @deprecated Use {@link android.app.WallpaperManager#getDrawable
1131      * WallpaperManager.get()} instead.
1132      */
1133     @Deprecated
getWallpaper()1134     public abstract Drawable getWallpaper();
1135 
1136     /**
1137      * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
1138      * WallpaperManager.peek()} instead.
1139      */
1140     @Deprecated
peekWallpaper()1141     public abstract Drawable peekWallpaper();
1142 
1143     /**
1144      * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
1145      * WallpaperManager.getDesiredMinimumWidth()} instead.
1146      */
1147     @Deprecated
getWallpaperDesiredMinimumWidth()1148     public abstract int getWallpaperDesiredMinimumWidth();
1149 
1150     /**
1151      * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
1152      * WallpaperManager.getDesiredMinimumHeight()} instead.
1153      */
1154     @Deprecated
getWallpaperDesiredMinimumHeight()1155     public abstract int getWallpaperDesiredMinimumHeight();
1156 
1157     /**
1158      * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
1159      * WallpaperManager.set()} instead.
1160      * <p>This method requires the caller to hold the permission
1161      * {@link android.Manifest.permission#SET_WALLPAPER}.
1162      */
1163     @Deprecated
setWallpaper(Bitmap bitmap)1164     public abstract void setWallpaper(Bitmap bitmap) throws IOException;
1165 
1166     /**
1167      * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
1168      * WallpaperManager.set()} instead.
1169      * <p>This method requires the caller to hold the permission
1170      * {@link android.Manifest.permission#SET_WALLPAPER}.
1171      */
1172     @Deprecated
setWallpaper(InputStream data)1173     public abstract void setWallpaper(InputStream data) throws IOException;
1174 
1175     /**
1176      * @deprecated Use {@link android.app.WallpaperManager#clear
1177      * WallpaperManager.clear()} instead.
1178      * <p>This method requires the caller to hold the permission
1179      * {@link android.Manifest.permission#SET_WALLPAPER}.
1180      */
1181     @Deprecated
clearWallpaper()1182     public abstract void clearWallpaper() throws IOException;
1183 
1184     /**
1185      * Same as {@link #startActivity(Intent, Bundle)} with no options
1186      * specified.
1187      *
1188      * @param intent The description of the activity to start.
1189      *
1190      * @throws ActivityNotFoundException &nbsp;
1191      *
1192      * @see #startActivity(Intent, Bundle)
1193      * @see PackageManager#resolveActivity
1194      */
startActivity(Intent intent)1195     public abstract void startActivity(Intent intent);
1196 
1197     /**
1198      * Version of {@link #startActivity(Intent)} that allows you to specify the
1199      * user the activity will be started for.  This is not available to applications
1200      * that are not pre-installed on the system image.  Using it requires holding
1201      * the INTERACT_ACROSS_USERS_FULL permission.
1202      * @param intent The description of the activity to start.
1203      * @param user The UserHandle of the user to start this activity for.
1204      * @throws ActivityNotFoundException &nbsp;
1205      * @hide
1206      */
startActivityAsUser(Intent intent, UserHandle user)1207     public void startActivityAsUser(Intent intent, UserHandle user) {
1208         throw new RuntimeException("Not implemented. Must override in a subclass.");
1209     }
1210 
1211     /**
1212      * Launch a new activity.  You will not receive any information about when
1213      * the activity exits.
1214      *
1215      * <p>Note that if this method is being called from outside of an
1216      * {@link android.app.Activity} Context, then the Intent must include
1217      * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
1218      * without being started from an existing Activity, there is no existing
1219      * task in which to place the new activity and thus it needs to be placed
1220      * in its own separate task.
1221      *
1222      * <p>This method throws {@link ActivityNotFoundException}
1223      * if there was no Activity found to run the given Intent.
1224      *
1225      * @param intent The description of the activity to start.
1226      * @param options Additional options for how the Activity should be started.
1227      * May be null if there are no options.  See {@link android.app.ActivityOptions}
1228      * for how to build the Bundle supplied here; there are no supported definitions
1229      * for building it manually.
1230      *
1231      * @throws ActivityNotFoundException &nbsp;
1232      *
1233      * @see #startActivity(Intent)
1234      * @see PackageManager#resolveActivity
1235      */
startActivity(Intent intent, @Nullable Bundle options)1236     public abstract void startActivity(Intent intent, @Nullable Bundle options);
1237 
1238     /**
1239      * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the
1240      * user the activity will be started for.  This is not available to applications
1241      * that are not pre-installed on the system image.  Using it requires holding
1242      * the INTERACT_ACROSS_USERS_FULL permission.
1243      * @param intent The description of the activity to start.
1244      * @param options Additional options for how the Activity should be started.
1245      * May be null if there are no options.  See {@link android.app.ActivityOptions}
1246      * for how to build the Bundle supplied here; there are no supported definitions
1247      * for building it manually.
1248      * @param userId The UserHandle of the user to start this activity for.
1249      * @throws ActivityNotFoundException &nbsp;
1250      * @hide
1251      */
startActivityAsUser(Intent intent, @Nullable Bundle options, UserHandle userId)1252     public void startActivityAsUser(Intent intent, @Nullable Bundle options, UserHandle userId) {
1253         throw new RuntimeException("Not implemented. Must override in a subclass.");
1254     }
1255 
1256     /**
1257      * Same as {@link #startActivities(Intent[], Bundle)} with no options
1258      * specified.
1259      *
1260      * @param intents An array of Intents to be started.
1261      *
1262      * @throws ActivityNotFoundException &nbsp;
1263      *
1264      * @see #startActivities(Intent[], Bundle)
1265      * @see PackageManager#resolveActivity
1266      */
startActivities(Intent[] intents)1267     public abstract void startActivities(Intent[] intents);
1268 
1269     /**
1270      * Launch multiple new activities.  This is generally the same as calling
1271      * {@link #startActivity(Intent)} for the first Intent in the array,
1272      * that activity during its creation calling {@link #startActivity(Intent)}
1273      * for the second entry, etc.  Note that unlike that approach, generally
1274      * none of the activities except the last in the array will be created
1275      * at this point, but rather will be created when the user first visits
1276      * them (due to pressing back from the activity on top).
1277      *
1278      * <p>This method throws {@link ActivityNotFoundException}
1279      * if there was no Activity found for <em>any</em> given Intent.  In this
1280      * case the state of the activity stack is undefined (some Intents in the
1281      * list may be on it, some not), so you probably want to avoid such situations.
1282      *
1283      * @param intents An array of Intents to be started.
1284      * @param options Additional options for how the Activity should be started.
1285      * See {@link android.content.Context#startActivity(Intent, Bundle)
1286      * Context.startActivity(Intent, Bundle)} for more details.
1287      *
1288      * @throws ActivityNotFoundException &nbsp;
1289      *
1290      * @see #startActivities(Intent[])
1291      * @see PackageManager#resolveActivity
1292      */
startActivities(Intent[] intents, Bundle options)1293     public abstract void startActivities(Intent[] intents, Bundle options);
1294 
1295     /**
1296      * @hide
1297      * Launch multiple new activities.  This is generally the same as calling
1298      * {@link #startActivity(Intent)} for the first Intent in the array,
1299      * that activity during its creation calling {@link #startActivity(Intent)}
1300      * for the second entry, etc.  Note that unlike that approach, generally
1301      * none of the activities except the last in the array will be created
1302      * at this point, but rather will be created when the user first visits
1303      * them (due to pressing back from the activity on top).
1304      *
1305      * <p>This method throws {@link ActivityNotFoundException}
1306      * if there was no Activity found for <em>any</em> given Intent.  In this
1307      * case the state of the activity stack is undefined (some Intents in the
1308      * list may be on it, some not), so you probably want to avoid such situations.
1309      *
1310      * @param intents An array of Intents to be started.
1311      * @param options Additional options for how the Activity should be started.
1312      * @param userHandle The user for whom to launch the activities
1313      * See {@link android.content.Context#startActivity(Intent, Bundle)
1314      * Context.startActivity(Intent, Bundle)} for more details.
1315      *
1316      * @throws ActivityNotFoundException &nbsp;
1317      *
1318      * @see #startActivities(Intent[])
1319      * @see PackageManager#resolveActivity
1320      */
startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle)1321     public void startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) {
1322         throw new RuntimeException("Not implemented. Must override in a subclass.");
1323     }
1324 
1325     /**
1326      * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)}
1327      * with no options specified.
1328      *
1329      * @param intent The IntentSender to launch.
1330      * @param fillInIntent If non-null, this will be provided as the
1331      * intent parameter to {@link IntentSender#sendIntent}.
1332      * @param flagsMask Intent flags in the original IntentSender that you
1333      * would like to change.
1334      * @param flagsValues Desired values for any bits set in
1335      * <var>flagsMask</var>
1336      * @param extraFlags Always set to 0.
1337      *
1338      * @see #startActivity(Intent)
1339      * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle)
1340      */
startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)1341     public abstract void startIntentSender(IntentSender intent,
1342             Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
1343             throws IntentSender.SendIntentException;
1344 
1345     /**
1346      * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender
1347      * to start.  If the IntentSender is for an activity, that activity will be started
1348      * as if you had called the regular {@link #startActivity(Intent)}
1349      * here; otherwise, its associated action will be executed (such as
1350      * sending a broadcast) as if you had called
1351      * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
1352      *
1353      * @param intent The IntentSender to launch.
1354      * @param fillInIntent If non-null, this will be provided as the
1355      * intent parameter to {@link IntentSender#sendIntent}.
1356      * @param flagsMask Intent flags in the original IntentSender that you
1357      * would like to change.
1358      * @param flagsValues Desired values for any bits set in
1359      * <var>flagsMask</var>
1360      * @param extraFlags Always set to 0.
1361      * @param options Additional options for how the Activity should be started.
1362      * See {@link android.content.Context#startActivity(Intent, Bundle)
1363      * Context.startActivity(Intent, Bundle)} for more details.  If options
1364      * have also been supplied by the IntentSender, options given here will
1365      * override any that conflict with those given by the IntentSender.
1366      *
1367      * @see #startActivity(Intent, Bundle)
1368      * @see #startIntentSender(IntentSender, Intent, int, int, int)
1369      */
startIntentSender(IntentSender intent, @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)1370     public abstract void startIntentSender(IntentSender intent,
1371             @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
1372             Bundle options) throws IntentSender.SendIntentException;
1373 
1374     /**
1375      * Broadcast the given intent to all interested BroadcastReceivers.  This
1376      * call is asynchronous; it returns immediately, and you will continue
1377      * executing while the receivers are run.  No results are propagated from
1378      * receivers and receivers can not abort the broadcast. If you want
1379      * to allow receivers to propagate results or abort the broadcast, you must
1380      * send an ordered broadcast using
1381      * {@link #sendOrderedBroadcast(Intent, String)}.
1382      *
1383      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1384      *
1385      * @param intent The Intent to broadcast; all receivers matching this
1386      *               Intent will receive the broadcast.
1387      *
1388      * @see android.content.BroadcastReceiver
1389      * @see #registerReceiver
1390      * @see #sendBroadcast(Intent, String)
1391      * @see #sendOrderedBroadcast(Intent, String)
1392      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
1393      */
sendBroadcast(Intent intent)1394     public abstract void sendBroadcast(Intent intent);
1395 
1396     /**
1397      * Broadcast the given intent to all interested BroadcastReceivers, allowing
1398      * an optional required permission to be enforced.  This
1399      * call is asynchronous; it returns immediately, and you will continue
1400      * executing while the receivers are run.  No results are propagated from
1401      * receivers and receivers can not abort the broadcast. If you want
1402      * to allow receivers to propagate results or abort the broadcast, you must
1403      * send an ordered broadcast using
1404      * {@link #sendOrderedBroadcast(Intent, String)}.
1405      *
1406      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1407      *
1408      * @param intent The Intent to broadcast; all receivers matching this
1409      *               Intent will receive the broadcast.
1410      * @param receiverPermission (optional) String naming a permission that
1411      *               a receiver must hold in order to receive your broadcast.
1412      *               If null, no permission is required.
1413      *
1414      * @see android.content.BroadcastReceiver
1415      * @see #registerReceiver
1416      * @see #sendBroadcast(Intent)
1417      * @see #sendOrderedBroadcast(Intent, String)
1418      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
1419      */
sendBroadcast(Intent intent, @Nullable String receiverPermission)1420     public abstract void sendBroadcast(Intent intent,
1421             @Nullable String receiverPermission);
1422 
1423     /**
1424      * Like {@link #sendBroadcast(Intent, String)}, but also allows specification
1425      * of an associated app op as per {@link android.app.AppOpsManager}.
1426      * @hide
1427      */
sendBroadcast(Intent intent, String receiverPermission, int appOp)1428     public abstract void sendBroadcast(Intent intent,
1429             String receiverPermission, int appOp);
1430 
1431     /**
1432      * Broadcast the given intent to all interested BroadcastReceivers, delivering
1433      * them one at a time to allow more preferred receivers to consume the
1434      * broadcast before it is delivered to less preferred receivers.  This
1435      * call is asynchronous; it returns immediately, and you will continue
1436      * executing while the receivers are run.
1437      *
1438      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1439      *
1440      * @param intent The Intent to broadcast; all receivers matching this
1441      *               Intent will receive the broadcast.
1442      * @param receiverPermission (optional) String naming a permissions that
1443      *               a receiver must hold in order to receive your broadcast.
1444      *               If null, no permission is required.
1445      *
1446      * @see android.content.BroadcastReceiver
1447      * @see #registerReceiver
1448      * @see #sendBroadcast(Intent)
1449      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
1450      */
sendOrderedBroadcast(Intent intent, @Nullable String receiverPermission)1451     public abstract void sendOrderedBroadcast(Intent intent,
1452             @Nullable String receiverPermission);
1453 
1454     /**
1455      * Version of {@link #sendBroadcast(Intent)} that allows you to
1456      * receive data back from the broadcast.  This is accomplished by
1457      * supplying your own BroadcastReceiver when calling, which will be
1458      * treated as a final receiver at the end of the broadcast -- its
1459      * {@link BroadcastReceiver#onReceive} method will be called with
1460      * the result values collected from the other receivers.  The broadcast will
1461      * be serialized in the same way as calling
1462      * {@link #sendOrderedBroadcast(Intent, String)}.
1463      *
1464      * <p>Like {@link #sendBroadcast(Intent)}, this method is
1465      * asynchronous; it will return before
1466      * resultReceiver.onReceive() is called.
1467      *
1468      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1469      *
1470      * @param intent The Intent to broadcast; all receivers matching this
1471      *               Intent will receive the broadcast.
1472      * @param receiverPermission String naming a permissions that
1473      *               a receiver must hold in order to receive your broadcast.
1474      *               If null, no permission is required.
1475      * @param resultReceiver Your own BroadcastReceiver to treat as the final
1476      *                       receiver of the broadcast.
1477      * @param scheduler A custom Handler with which to schedule the
1478      *                  resultReceiver callback; if null it will be
1479      *                  scheduled in the Context's main thread.
1480      * @param initialCode An initial value for the result code.  Often
1481      *                    Activity.RESULT_OK.
1482      * @param initialData An initial value for the result data.  Often
1483      *                    null.
1484      * @param initialExtras An initial value for the result extras.  Often
1485      *                      null.
1486      *
1487      * @see #sendBroadcast(Intent)
1488      * @see #sendBroadcast(Intent, String)
1489      * @see #sendOrderedBroadcast(Intent, String)
1490      * @see android.content.BroadcastReceiver
1491      * @see #registerReceiver
1492      * @see android.app.Activity#RESULT_OK
1493      */
sendOrderedBroadcast(@onNull Intent intent, @Nullable String receiverPermission, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)1494     public abstract void sendOrderedBroadcast(@NonNull Intent intent,
1495             @Nullable String receiverPermission, BroadcastReceiver resultReceiver,
1496             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
1497             @Nullable Bundle initialExtras);
1498 
1499     /**
1500      * Like {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler,
1501      * int, String, android.os.Bundle)}, but also allows specification
1502      * of an associated app op as per {@link android.app.AppOpsManager}.
1503      * @hide
1504      */
sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)1505     public abstract void sendOrderedBroadcast(Intent intent,
1506             String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
1507             Handler scheduler, int initialCode, String initialData,
1508             Bundle initialExtras);
1509 
1510     /**
1511      * Version of {@link #sendBroadcast(Intent)} that allows you to specify the
1512      * user the broadcast will be sent to.  This is not available to applications
1513      * that are not pre-installed on the system image.  Using it requires holding
1514      * the INTERACT_ACROSS_USERS permission.
1515      * @param intent The intent to broadcast
1516      * @param user UserHandle to send the intent to.
1517      * @see #sendBroadcast(Intent)
1518      */
sendBroadcastAsUser(Intent intent, UserHandle user)1519     public abstract void sendBroadcastAsUser(Intent intent, UserHandle user);
1520 
1521     /**
1522      * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the
1523      * user the broadcast will be sent to.  This is not available to applications
1524      * that are not pre-installed on the system image.  Using it requires holding
1525      * the INTERACT_ACROSS_USERS permission.
1526      *
1527      * @param intent The Intent to broadcast; all receivers matching this
1528      *               Intent will receive the broadcast.
1529      * @param user UserHandle to send the intent to.
1530      * @param receiverPermission (optional) String naming a permission that
1531      *               a receiver must hold in order to receive your broadcast.
1532      *               If null, no permission is required.
1533      *
1534      * @see #sendBroadcast(Intent, String)
1535      */
sendBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission)1536     public abstract void sendBroadcastAsUser(Intent intent, UserHandle user,
1537             @Nullable String receiverPermission);
1538 
1539     /**
1540      * Version of
1541      * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)}
1542      * that allows you to specify the
1543      * user the broadcast will be sent to.  This is not available to applications
1544      * that are not pre-installed on the system image.  Using it requires holding
1545      * the INTERACT_ACROSS_USERS permission.
1546      *
1547      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1548      *
1549      * @param intent The Intent to broadcast; all receivers matching this
1550      *               Intent will receive the broadcast.
1551      * @param user UserHandle to send the intent to.
1552      * @param receiverPermission String naming a permissions that
1553      *               a receiver must hold in order to receive your broadcast.
1554      *               If null, no permission is required.
1555      * @param resultReceiver Your own BroadcastReceiver to treat as the final
1556      *                       receiver of the broadcast.
1557      * @param scheduler A custom Handler with which to schedule the
1558      *                  resultReceiver callback; if null it will be
1559      *                  scheduled in the Context's main thread.
1560      * @param initialCode An initial value for the result code.  Often
1561      *                    Activity.RESULT_OK.
1562      * @param initialData An initial value for the result data.  Often
1563      *                    null.
1564      * @param initialExtras An initial value for the result extras.  Often
1565      *                      null.
1566      *
1567      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
1568      */
sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)1569     public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
1570             @Nullable String receiverPermission, BroadcastReceiver resultReceiver,
1571             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
1572             @Nullable  Bundle initialExtras);
1573 
1574     /**
1575      * Similar to above but takes an appOp as well, to enforce restrictions.
1576      * @see #sendOrderedBroadcastAsUser(Intent, UserHandle, String,
1577      *       BroadcastReceiver, Handler, int, String, Bundle)
1578      * @hide
1579      */
sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)1580     public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
1581             @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
1582             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
1583             @Nullable  Bundle initialExtras);
1584 
1585     /**
1586      * <p>Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
1587      * Intent you are sending stays around after the broadcast is complete,
1588      * so that others can quickly retrieve that data through the return
1589      * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
1590      * all other ways, this behaves the same as
1591      * {@link #sendBroadcast(Intent)}.
1592      *
1593      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
1594      * permission in order to use this API.  If you do not hold that
1595      * permission, {@link SecurityException} will be thrown.
1596      *
1597      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
1598      * can access them), no protection (anyone can modify them), and many other problems.
1599      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
1600      * has changed, with another mechanism for apps to retrieve the current value whenever
1601      * desired.
1602      *
1603      * @param intent The Intent to broadcast; all receivers matching this
1604      * Intent will receive the broadcast, and the Intent will be held to
1605      * be re-broadcast to future receivers.
1606      *
1607      * @see #sendBroadcast(Intent)
1608      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
1609      */
1610     @Deprecated
sendStickyBroadcast(Intent intent)1611     public abstract void sendStickyBroadcast(Intent intent);
1612 
1613     /**
1614      * <p>Version of {@link #sendStickyBroadcast} that allows you to
1615      * receive data back from the broadcast.  This is accomplished by
1616      * supplying your own BroadcastReceiver when calling, which will be
1617      * treated as a final receiver at the end of the broadcast -- its
1618      * {@link BroadcastReceiver#onReceive} method will be called with
1619      * the result values collected from the other receivers.  The broadcast will
1620      * be serialized in the same way as calling
1621      * {@link #sendOrderedBroadcast(Intent, String)}.
1622      *
1623      * <p>Like {@link #sendBroadcast(Intent)}, this method is
1624      * asynchronous; it will return before
1625      * resultReceiver.onReceive() is called.  Note that the sticky data
1626      * stored is only the data you initially supply to the broadcast, not
1627      * the result of any changes made by the receivers.
1628      *
1629      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1630      *
1631      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
1632      * can access them), no protection (anyone can modify them), and many other problems.
1633      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
1634      * has changed, with another mechanism for apps to retrieve the current value whenever
1635      * desired.
1636      *
1637      * @param intent The Intent to broadcast; all receivers matching this
1638      *               Intent will receive the broadcast.
1639      * @param resultReceiver Your own BroadcastReceiver to treat as the final
1640      *                       receiver of the broadcast.
1641      * @param scheduler A custom Handler with which to schedule the
1642      *                  resultReceiver callback; if null it will be
1643      *                  scheduled in the Context's main thread.
1644      * @param initialCode An initial value for the result code.  Often
1645      *                    Activity.RESULT_OK.
1646      * @param initialData An initial value for the result data.  Often
1647      *                    null.
1648      * @param initialExtras An initial value for the result extras.  Often
1649      *                      null.
1650      *
1651      * @see #sendBroadcast(Intent)
1652      * @see #sendBroadcast(Intent, String)
1653      * @see #sendOrderedBroadcast(Intent, String)
1654      * @see #sendStickyBroadcast(Intent)
1655      * @see android.content.BroadcastReceiver
1656      * @see #registerReceiver
1657      * @see android.app.Activity#RESULT_OK
1658      */
1659     @Deprecated
sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)1660     public abstract void sendStickyOrderedBroadcast(Intent intent,
1661             BroadcastReceiver resultReceiver,
1662             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
1663             @Nullable Bundle initialExtras);
1664 
1665     /**
1666      * <p>Remove the data previously sent with {@link #sendStickyBroadcast},
1667      * so that it is as if the sticky broadcast had never happened.
1668      *
1669      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
1670      * permission in order to use this API.  If you do not hold that
1671      * permission, {@link SecurityException} will be thrown.
1672      *
1673      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
1674      * can access them), no protection (anyone can modify them), and many other problems.
1675      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
1676      * has changed, with another mechanism for apps to retrieve the current value whenever
1677      * desired.
1678      *
1679      * @param intent The Intent that was previously broadcast.
1680      *
1681      * @see #sendStickyBroadcast
1682      */
1683     @Deprecated
removeStickyBroadcast(Intent intent)1684     public abstract void removeStickyBroadcast(Intent intent);
1685 
1686     /**
1687      * <p>Version of {@link #sendStickyBroadcast(Intent)} that allows you to specify the
1688      * user the broadcast will be sent to.  This is not available to applications
1689      * that are not pre-installed on the system image.  Using it requires holding
1690      * the INTERACT_ACROSS_USERS permission.
1691      *
1692      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
1693      * can access them), no protection (anyone can modify them), and many other problems.
1694      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
1695      * has changed, with another mechanism for apps to retrieve the current value whenever
1696      * desired.
1697      *
1698      * @param intent The Intent to broadcast; all receivers matching this
1699      * Intent will receive the broadcast, and the Intent will be held to
1700      * be re-broadcast to future receivers.
1701      * @param user UserHandle to send the intent to.
1702      *
1703      * @see #sendBroadcast(Intent)
1704      */
1705     @Deprecated
sendStickyBroadcastAsUser(Intent intent, UserHandle user)1706     public abstract void sendStickyBroadcastAsUser(Intent intent, UserHandle user);
1707 
1708     /**
1709      * <p>Version of
1710      * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)}
1711      * that allows you to specify the
1712      * user the broadcast will be sent to.  This is not available to applications
1713      * that are not pre-installed on the system image.  Using it requires holding
1714      * the INTERACT_ACROSS_USERS permission.
1715      *
1716      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1717      *
1718      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
1719      * can access them), no protection (anyone can modify them), and many other problems.
1720      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
1721      * has changed, with another mechanism for apps to retrieve the current value whenever
1722      * desired.
1723      *
1724      * @param intent The Intent to broadcast; all receivers matching this
1725      *               Intent will receive the broadcast.
1726      * @param user UserHandle to send the intent to.
1727      * @param resultReceiver Your own BroadcastReceiver to treat as the final
1728      *                       receiver of the broadcast.
1729      * @param scheduler A custom Handler with which to schedule the
1730      *                  resultReceiver callback; if null it will be
1731      *                  scheduled in the Context's main thread.
1732      * @param initialCode An initial value for the result code.  Often
1733      *                    Activity.RESULT_OK.
1734      * @param initialData An initial value for the result data.  Often
1735      *                    null.
1736      * @param initialExtras An initial value for the result extras.  Often
1737      *                      null.
1738      *
1739      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
1740      */
1741     @Deprecated
sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)1742     public abstract void sendStickyOrderedBroadcastAsUser(Intent intent,
1743             UserHandle user, BroadcastReceiver resultReceiver,
1744             @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
1745             @Nullable Bundle initialExtras);
1746 
1747     /**
1748      * <p>Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the
1749      * user the broadcast will be sent to.  This is not available to applications
1750      * that are not pre-installed on the system image.  Using it requires holding
1751      * the INTERACT_ACROSS_USERS permission.
1752      *
1753      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
1754      * permission in order to use this API.  If you do not hold that
1755      * permission, {@link SecurityException} will be thrown.
1756      *
1757      * @deprecated Sticky broadcasts should not be used.  They provide no security (anyone
1758      * can access them), no protection (anyone can modify them), and many other problems.
1759      * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em>
1760      * has changed, with another mechanism for apps to retrieve the current value whenever
1761      * desired.
1762      *
1763      * @param intent The Intent that was previously broadcast.
1764      * @param user UserHandle to remove the sticky broadcast from.
1765      *
1766      * @see #sendStickyBroadcastAsUser
1767      */
1768     @Deprecated
removeStickyBroadcastAsUser(Intent intent, UserHandle user)1769     public abstract void removeStickyBroadcastAsUser(Intent intent, UserHandle user);
1770 
1771     /**
1772      * Register a BroadcastReceiver to be run in the main activity thread.  The
1773      * <var>receiver</var> will be called with any broadcast Intent that
1774      * matches <var>filter</var>, in the main application thread.
1775      *
1776      * <p>The system may broadcast Intents that are "sticky" -- these stay
1777      * around after the broadcast as finished, to be sent to any later
1778      * registrations. If your IntentFilter matches one of these sticky
1779      * Intents, that Intent will be returned by this function
1780      * <strong>and</strong> sent to your <var>receiver</var> as if it had just
1781      * been broadcast.
1782      *
1783      * <p>There may be multiple sticky Intents that match <var>filter</var>,
1784      * in which case each of these will be sent to <var>receiver</var>.  In
1785      * this case, only one of these can be returned directly by the function;
1786      * which of these that is returned is arbitrarily decided by the system.
1787      *
1788      * <p>If you know the Intent your are registering for is sticky, you can
1789      * supply null for your <var>receiver</var>.  In this case, no receiver is
1790      * registered -- the function simply returns the sticky Intent that
1791      * matches <var>filter</var>.  In the case of multiple matches, the same
1792      * rules as described above apply.
1793      *
1794      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1795      *
1796      * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
1797      * registered with this method will correctly respect the
1798      * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
1799      * Prior to that, it would be ignored and delivered to all matching registered
1800      * receivers.  Be careful if using this for security.</p>
1801      *
1802      * <p class="note">Note: this method <em>cannot be called from a
1803      * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
1804      * that is declared in an application's manifest.  It is okay, however, to call
1805      * this method from another BroadcastReceiver that has itself been registered
1806      * at run time with {@link #registerReceiver}, since the lifetime of such a
1807      * registered BroadcastReceiver is tied to the object that registered it.</p>
1808      *
1809      * @param receiver The BroadcastReceiver to handle the broadcast.
1810      * @param filter Selects the Intent broadcasts to be received.
1811      *
1812      * @return The first sticky intent found that matches <var>filter</var>,
1813      *         or null if there are none.
1814      *
1815      * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
1816      * @see #sendBroadcast
1817      * @see #unregisterReceiver
1818      */
1819     @Nullable
registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter)1820     public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver,
1821                                             IntentFilter filter);
1822 
1823     /**
1824      * Register to receive intent broadcasts, to run in the context of
1825      * <var>scheduler</var>.  See
1826      * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
1827      * information.  This allows you to enforce permissions on who can
1828      * broadcast intents to your receiver, or have the receiver run in
1829      * a different thread than the main application thread.
1830      *
1831      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1832      *
1833      * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
1834      * registered with this method will correctly respect the
1835      * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
1836      * Prior to that, it would be ignored and delivered to all matching registered
1837      * receivers.  Be careful if using this for security.</p>
1838      *
1839      * @param receiver The BroadcastReceiver to handle the broadcast.
1840      * @param filter Selects the Intent broadcasts to be received.
1841      * @param broadcastPermission String naming a permissions that a
1842      *      broadcaster must hold in order to send an Intent to you.  If null,
1843      *      no permission is required.
1844      * @param scheduler Handler identifying the thread that will receive
1845      *      the Intent.  If null, the main thread of the process will be used.
1846      *
1847      * @return The first sticky intent found that matches <var>filter</var>,
1848      *         or null if there are none.
1849      *
1850      * @see #registerReceiver(BroadcastReceiver, IntentFilter)
1851      * @see #sendBroadcast
1852      * @see #unregisterReceiver
1853      */
1854     @Nullable
registerReceiver(BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)1855     public abstract Intent registerReceiver(BroadcastReceiver receiver,
1856             IntentFilter filter, @Nullable String broadcastPermission,
1857             @Nullable Handler scheduler);
1858 
1859     /**
1860      * @hide
1861      * Same as {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
1862      * but for a specific user.  This receiver will receiver broadcasts that
1863      * are sent to the requested user.  It
1864      * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}
1865      * permission.
1866      *
1867      * @param receiver The BroadcastReceiver to handle the broadcast.
1868      * @param user UserHandle to send the intent to.
1869      * @param filter Selects the Intent broadcasts to be received.
1870      * @param broadcastPermission String naming a permissions that a
1871      *      broadcaster must hold in order to send an Intent to you.  If null,
1872      *      no permission is required.
1873      * @param scheduler Handler identifying the thread that will receive
1874      *      the Intent.  If null, the main thread of the process will be used.
1875      *
1876      * @return The first sticky intent found that matches <var>filter</var>,
1877      *         or null if there are none.
1878      *
1879      * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler
1880      * @see #sendBroadcast
1881      * @see #unregisterReceiver
1882      */
1883     @Nullable
registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)1884     public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
1885             UserHandle user, IntentFilter filter, @Nullable String broadcastPermission,
1886             @Nullable Handler scheduler);
1887 
1888     /**
1889      * Unregister a previously registered BroadcastReceiver.  <em>All</em>
1890      * filters that have been registered for this BroadcastReceiver will be
1891      * removed.
1892      *
1893      * @param receiver The BroadcastReceiver to unregister.
1894      *
1895      * @see #registerReceiver
1896      */
unregisterReceiver(BroadcastReceiver receiver)1897     public abstract void unregisterReceiver(BroadcastReceiver receiver);
1898 
1899     /**
1900      * Request that a given application service be started.  The Intent
1901      * should contain either contain the complete class name of a specific service
1902      * implementation to start or a specific package name to target.  If the
1903      * Intent is less specified, it log a warning about this and which of the
1904      * multiple matching services it finds and uses will be undefined.  If this service
1905      * is not already running, it will be instantiated and started (creating a
1906      * process for it if needed); if it is running then it remains running.
1907      *
1908      * <p>Every call to this method will result in a corresponding call to
1909      * the target service's {@link android.app.Service#onStartCommand} method,
1910      * with the <var>intent</var> given here.  This provides a convenient way
1911      * to submit jobs to a service without having to bind and call on to its
1912      * interface.
1913      *
1914      * <p>Using startService() overrides the default service lifetime that is
1915      * managed by {@link #bindService}: it requires the service to remain
1916      * running until {@link #stopService} is called, regardless of whether
1917      * any clients are connected to it.  Note that calls to startService()
1918      * are not nesting: no matter how many times you call startService(),
1919      * a single call to {@link #stopService} will stop it.
1920      *
1921      * <p>The system attempts to keep running services around as much as
1922      * possible.  The only time they should be stopped is if the current
1923      * foreground application is using so many resources that the service needs
1924      * to be killed.  If any errors happen in the service's process, it will
1925      * automatically be restarted.
1926      *
1927      * <p>This function will throw {@link SecurityException} if you do not
1928      * have permission to start the given service.
1929      *
1930      * @param service Identifies the service to be started.  The Intent must be either
1931      *      fully explicit (supplying a component name) or specify a specific package
1932      *      name it is targetted to.  Additional values
1933      *      may be included in the Intent extras to supply arguments along with
1934      *      this specific start call.
1935      *
1936      * @return If the service is being started or is already running, the
1937      * {@link ComponentName} of the actual service that was started is
1938      * returned; else if the service does not exist null is returned.
1939      *
1940      * @throws SecurityException &nbsp;
1941      *
1942      * @see #stopService
1943      * @see #bindService
1944      */
1945     @Nullable
startService(Intent service)1946     public abstract ComponentName startService(Intent service);
1947 
1948     /**
1949      * Request that a given application service be stopped.  If the service is
1950      * not running, nothing happens.  Otherwise it is stopped.  Note that calls
1951      * to startService() are not counted -- this stops the service no matter
1952      * how many times it was started.
1953      *
1954      * <p>Note that if a stopped service still has {@link ServiceConnection}
1955      * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
1956      * not be destroyed until all of these bindings are removed.  See
1957      * the {@link android.app.Service} documentation for more details on a
1958      * service's lifecycle.
1959      *
1960      * <p>This function will throw {@link SecurityException} if you do not
1961      * have permission to stop the given service.
1962      *
1963      * @param service Description of the service to be stopped.  The Intent must be either
1964      *      fully explicit (supplying a component name) or specify a specific package
1965      *      name it is targetted to.
1966      *
1967      * @return If there is a service matching the given Intent that is already
1968      * running, then it is stopped and {@code true} is returned; else {@code false} is returned.
1969      *
1970      * @throws SecurityException &nbsp;
1971      *
1972      * @see #startService
1973      */
stopService(Intent service)1974     public abstract boolean stopService(Intent service);
1975 
1976     /**
1977      * @hide like {@link #startService(Intent)} but for a specific user.
1978      */
startServiceAsUser(Intent service, UserHandle user)1979     public abstract ComponentName startServiceAsUser(Intent service, UserHandle user);
1980 
1981     /**
1982      * @hide like {@link #stopService(Intent)} but for a specific user.
1983      */
stopServiceAsUser(Intent service, UserHandle user)1984     public abstract boolean stopServiceAsUser(Intent service, UserHandle user);
1985 
1986     /**
1987      * Connect to an application service, creating it if needed.  This defines
1988      * a dependency between your application and the service.  The given
1989      * <var>conn</var> will receive the service object when it is created and be
1990      * told if it dies and restarts.  The service will be considered required
1991      * by the system only for as long as the calling context exists.  For
1992      * example, if this Context is an Activity that is stopped, the service will
1993      * not be required to continue running until the Activity is resumed.
1994      *
1995      * <p>This function will throw {@link SecurityException} if you do not
1996      * have permission to bind to the given service.
1997      *
1998      * <p class="note">Note: this method <em>can not be called from a
1999      * {@link BroadcastReceiver} component</em>.  A pattern you can use to
2000      * communicate from a BroadcastReceiver to a Service is to call
2001      * {@link #startService} with the arguments containing the command to be
2002      * sent, with the service calling its
2003      * {@link android.app.Service#stopSelf(int)} method when done executing
2004      * that command.  See the API demo App/Service/Service Start Arguments
2005      * Controller for an illustration of this.  It is okay, however, to use
2006      * this method from a BroadcastReceiver that has been registered with
2007      * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
2008      * is tied to another object (the one that registered it).</p>
2009      *
2010      * @param service Identifies the service to connect to.  The Intent may
2011      *      specify either an explicit component name, or a logical
2012      *      description (action, category, etc) to match an
2013      *      {@link IntentFilter} published by a service.
2014      * @param conn Receives information as the service is started and stopped.
2015      *      This must be a valid ServiceConnection object; it must not be null.
2016      * @param flags Operation options for the binding.  May be 0,
2017      *          {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND},
2018      *          {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT},
2019      *          {@link #BIND_ALLOW_OOM_MANAGEMENT}, or
2020      *          {@link #BIND_WAIVE_PRIORITY}.
2021      * @return If you have successfully bound to the service, {@code true} is returned;
2022      *         {@code false} is returned if the connection is not made so you will not
2023      *         receive the service object.
2024      *
2025      * @throws SecurityException &nbsp;
2026      *
2027      * @see #unbindService
2028      * @see #startService
2029      * @see #BIND_AUTO_CREATE
2030      * @see #BIND_DEBUG_UNBIND
2031      * @see #BIND_NOT_FOREGROUND
2032      */
bindService(Intent service, @NonNull ServiceConnection conn, @BindServiceFlags int flags)2033     public abstract boolean bindService(Intent service, @NonNull ServiceConnection conn,
2034             @BindServiceFlags int flags);
2035 
2036     /**
2037      * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle
2038      * argument for use by system server and other multi-user aware code.
2039      * @hide
2040      */
2041     @SystemApi
bindServiceAsUser(Intent service, ServiceConnection conn, int flags, UserHandle user)2042     public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags, UserHandle user) {
2043         throw new RuntimeException("Not implemented. Must override in a subclass.");
2044     }
2045 
2046     /**
2047      * Disconnect from an application service.  You will no longer receive
2048      * calls as the service is restarted, and the service is now allowed to
2049      * stop at any time.
2050      *
2051      * @param conn The connection interface previously supplied to
2052      *             bindService().  This parameter must not be null.
2053      *
2054      * @see #bindService
2055      */
unbindService(@onNull ServiceConnection conn)2056     public abstract void unbindService(@NonNull ServiceConnection conn);
2057 
2058     /**
2059      * Start executing an {@link android.app.Instrumentation} class.  The given
2060      * Instrumentation component will be run by killing its target application
2061      * (if currently running), starting the target process, instantiating the
2062      * instrumentation component, and then letting it drive the application.
2063      *
2064      * <p>This function is not synchronous -- it returns as soon as the
2065      * instrumentation has started and while it is running.
2066      *
2067      * <p>Instrumentation is normally only allowed to run against a package
2068      * that is either unsigned or signed with a signature that the
2069      * the instrumentation package is also signed with (ensuring the target
2070      * trusts the instrumentation).
2071      *
2072      * @param className Name of the Instrumentation component to be run.
2073      * @param profileFile Optional path to write profiling data as the
2074      * instrumentation runs, or null for no profiling.
2075      * @param arguments Additional optional arguments to pass to the
2076      * instrumentation, or null.
2077      *
2078      * @return {@code true} if the instrumentation was successfully started,
2079      * else {@code false} if it could not be found.
2080      */
startInstrumentation(@onNull ComponentName className, @Nullable String profileFile, @Nullable Bundle arguments)2081     public abstract boolean startInstrumentation(@NonNull ComponentName className,
2082             @Nullable String profileFile, @Nullable Bundle arguments);
2083 
2084     /** @hide */
2085     @StringDef({
2086             POWER_SERVICE,
2087             WINDOW_SERVICE,
2088             LAYOUT_INFLATER_SERVICE,
2089             ACCOUNT_SERVICE,
2090             ACTIVITY_SERVICE,
2091             ALARM_SERVICE,
2092             NOTIFICATION_SERVICE,
2093             ACCESSIBILITY_SERVICE,
2094             CAPTIONING_SERVICE,
2095             KEYGUARD_SERVICE,
2096             LOCATION_SERVICE,
2097             //@hide: COUNTRY_DETECTOR,
2098             SEARCH_SERVICE,
2099             SENSOR_SERVICE,
2100             STORAGE_SERVICE,
2101             WALLPAPER_SERVICE,
2102             VIBRATOR_SERVICE,
2103             //@hide: STATUS_BAR_SERVICE,
2104             CONNECTIVITY_SERVICE,
2105             //@hide: UPDATE_LOCK_SERVICE,
2106             //@hide: NETWORKMANAGEMENT_SERVICE,
2107             //@hide: NETWORK_STATS_SERVICE,
2108             //@hide: NETWORK_POLICY_SERVICE,
2109             WIFI_SERVICE,
2110             WIFI_PASSPOINT_SERVICE,
2111             WIFI_P2P_SERVICE,
2112             WIFI_SCANNING_SERVICE,
2113             //@hide: ETHERNET_SERVICE,
2114             WIFI_RTT_SERVICE,
2115             NSD_SERVICE,
2116             AUDIO_SERVICE,
2117             MEDIA_ROUTER_SERVICE,
2118             TELEPHONY_SERVICE,
2119             TELECOM_SERVICE,
2120             CLIPBOARD_SERVICE,
2121             INPUT_METHOD_SERVICE,
2122             TEXT_SERVICES_MANAGER_SERVICE,
2123             APPWIDGET_SERVICE,
2124             //@hide: BACKUP_SERVICE,
2125             DROPBOX_SERVICE,
2126             DEVICE_POLICY_SERVICE,
2127             UI_MODE_SERVICE,
2128             DOWNLOAD_SERVICE,
2129             NFC_SERVICE,
2130             BLUETOOTH_SERVICE,
2131             //@hide: SIP_SERVICE,
2132             USB_SERVICE,
2133             LAUNCHER_APPS_SERVICE,
2134             //@hide: SERIAL_SERVICE,
2135             INPUT_SERVICE,
2136             DISPLAY_SERVICE,
2137             //@hide: SCHEDULING_POLICY_SERVICE,
2138             USER_SERVICE,
2139             //@hide: APP_OPS_SERVICE
2140             CAMERA_SERVICE,
2141             PRINT_SERVICE,
2142             MEDIA_SESSION_SERVICE,
2143             BATTERY_SERVICE,
2144             JOB_SCHEDULER_SERVICE,
2145             MEDIA_PROJECTION_SERVICE,
2146     })
2147     @Retention(RetentionPolicy.SOURCE)
2148     public @interface ServiceName {}
2149 
2150     /**
2151      * Return the handle to a system-level service by name. The class of the
2152      * returned object varies by the requested name. Currently available names
2153      * are:
2154      *
2155      * <dl>
2156      *  <dt> {@link #WINDOW_SERVICE} ("window")
2157      *  <dd> The top-level window manager in which you can place custom
2158      *  windows.  The returned object is a {@link android.view.WindowManager}.
2159      *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
2160      *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
2161      *  in this context.
2162      *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
2163      *  <dd> A {@link android.app.ActivityManager} for interacting with the
2164      *  global activity state of the system.
2165      *  <dt> {@link #POWER_SERVICE} ("power")
2166      *  <dd> A {@link android.os.PowerManager} for controlling power
2167      *  management.
2168      *  <dt> {@link #ALARM_SERVICE} ("alarm")
2169      *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
2170      *  time of your choosing.
2171      *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
2172      *  <dd> A {@link android.app.NotificationManager} for informing the user
2173      *   of background events.
2174      *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
2175      *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
2176      *  <dt> {@link #LOCATION_SERVICE} ("location")
2177      *  <dd> A {@link android.location.LocationManager} for controlling location
2178      *   (e.g., GPS) updates.
2179      *  <dt> {@link #SEARCH_SERVICE} ("search")
2180      *  <dd> A {@link android.app.SearchManager} for handling search.
2181      *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
2182      *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
2183      *  hardware.
2184      *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
2185      *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
2186      *  handling management of network connections.
2187      *  <dt> {@link #WIFI_SERVICE} ("wifi")
2188      *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
2189      * Wi-Fi connectivity.
2190      *  <dt> {@link #WIFI_P2P_SERVICE} ("wifip2p")
2191      *  <dd> A {@link android.net.wifi.p2p.WifiP2pManager WifiP2pManager} for management of
2192      * Wi-Fi Direct connectivity.
2193      * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
2194      * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
2195      * for management of input methods.
2196      * <dt> {@link #UI_MODE_SERVICE} ("uimode")
2197      * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
2198      * <dt> {@link #DOWNLOAD_SERVICE} ("download")
2199      * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
2200      * <dt> {@link #BATTERY_SERVICE} ("batterymanager")
2201      * <dd> A {@link android.os.BatteryManager} for managing battery state
2202      * <dt> {@link #JOB_SCHEDULER_SERVICE} ("taskmanager")
2203      * <dd>  A {@link android.app.job.JobScheduler} for managing scheduled tasks
2204      * </dl>
2205      *
2206      * <p>Note:  System services obtained via this API may be closely associated with
2207      * the Context in which they are obtained from.  In general, do not share the
2208      * service objects between various different contexts (Activities, Applications,
2209      * Services, Providers, etc.)
2210      *
2211      * @param name The name of the desired service.
2212      *
2213      * @return The service or null if the name does not exist.
2214      *
2215      * @see #WINDOW_SERVICE
2216      * @see android.view.WindowManager
2217      * @see #LAYOUT_INFLATER_SERVICE
2218      * @see android.view.LayoutInflater
2219      * @see #ACTIVITY_SERVICE
2220      * @see android.app.ActivityManager
2221      * @see #POWER_SERVICE
2222      * @see android.os.PowerManager
2223      * @see #ALARM_SERVICE
2224      * @see android.app.AlarmManager
2225      * @see #NOTIFICATION_SERVICE
2226      * @see android.app.NotificationManager
2227      * @see #KEYGUARD_SERVICE
2228      * @see android.app.KeyguardManager
2229      * @see #LOCATION_SERVICE
2230      * @see android.location.LocationManager
2231      * @see #SEARCH_SERVICE
2232      * @see android.app.SearchManager
2233      * @see #SENSOR_SERVICE
2234      * @see android.hardware.SensorManager
2235      * @see #STORAGE_SERVICE
2236      * @see android.os.storage.StorageManager
2237      * @see #VIBRATOR_SERVICE
2238      * @see android.os.Vibrator
2239      * @see #CONNECTIVITY_SERVICE
2240      * @see android.net.ConnectivityManager
2241      * @see #WIFI_SERVICE
2242      * @see android.net.wifi.WifiManager
2243      * @see #AUDIO_SERVICE
2244      * @see android.media.AudioManager
2245      * @see #MEDIA_ROUTER_SERVICE
2246      * @see android.media.MediaRouter
2247      * @see #TELEPHONY_SERVICE
2248      * @see android.telephony.TelephonyManager
2249      * @see #TELEPHONY_SUBSCRIPTION_SERVICE
2250      * @see android.telephony.SubscriptionManager
2251      * @see #INPUT_METHOD_SERVICE
2252      * @see android.view.inputmethod.InputMethodManager
2253      * @see #UI_MODE_SERVICE
2254      * @see android.app.UiModeManager
2255      * @see #DOWNLOAD_SERVICE
2256      * @see android.app.DownloadManager
2257      * @see #BATTERY_SERVICE
2258      * @see android.os.BatteryManager
2259      * @see #JOB_SCHEDULER_SERVICE
2260      * @see android.app.job.JobScheduler
2261      */
getSystemService(@erviceName @onNull String name)2262     public abstract Object getSystemService(@ServiceName @NonNull String name);
2263 
2264     /**
2265      * Use with {@link #getSystemService} to retrieve a
2266      * {@link android.os.PowerManager} for controlling power management,
2267      * including "wake locks," which let you keep the device on while
2268      * you're running long tasks.
2269      */
2270     public static final String POWER_SERVICE = "power";
2271 
2272     /**
2273      * Use with {@link #getSystemService} to retrieve a
2274      * {@link android.view.WindowManager} for accessing the system's window
2275      * manager.
2276      *
2277      * @see #getSystemService
2278      * @see android.view.WindowManager
2279      */
2280     public static final String WINDOW_SERVICE = "window";
2281 
2282     /**
2283      * Use with {@link #getSystemService} to retrieve a
2284      * {@link android.view.LayoutInflater} for inflating layout resources in this
2285      * context.
2286      *
2287      * @see #getSystemService
2288      * @see android.view.LayoutInflater
2289      */
2290     public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
2291 
2292     /**
2293      * Use with {@link #getSystemService} to retrieve a
2294      * {@link android.accounts.AccountManager} for receiving intents at a
2295      * time of your choosing.
2296      *
2297      * @see #getSystemService
2298      * @see android.accounts.AccountManager
2299      */
2300     public static final String ACCOUNT_SERVICE = "account";
2301 
2302     /**
2303      * Use with {@link #getSystemService} to retrieve a
2304      * {@link android.app.ActivityManager} for interacting with the global
2305      * system state.
2306      *
2307      * @see #getSystemService
2308      * @see android.app.ActivityManager
2309      */
2310     public static final String ACTIVITY_SERVICE = "activity";
2311 
2312     /**
2313      * Use with {@link #getSystemService} to retrieve a
2314      * {@link android.app.AlarmManager} for receiving intents at a
2315      * time of your choosing.
2316      *
2317      * @see #getSystemService
2318      * @see android.app.AlarmManager
2319      */
2320     public static final String ALARM_SERVICE = "alarm";
2321 
2322     /**
2323      * Use with {@link #getSystemService} to retrieve a
2324      * {@link android.app.NotificationManager} for informing the user of
2325      * background events.
2326      *
2327      * @see #getSystemService
2328      * @see android.app.NotificationManager
2329      */
2330     public static final String NOTIFICATION_SERVICE = "notification";
2331 
2332     /**
2333      * Use with {@link #getSystemService} to retrieve a
2334      * {@link android.view.accessibility.AccessibilityManager} for giving the user
2335      * feedback for UI events through the registered event listeners.
2336      *
2337      * @see #getSystemService
2338      * @see android.view.accessibility.AccessibilityManager
2339      */
2340     public static final String ACCESSIBILITY_SERVICE = "accessibility";
2341 
2342     /**
2343      * Use with {@link #getSystemService} to retrieve a
2344      * {@link android.view.accessibility.CaptioningManager} for obtaining
2345      * captioning properties and listening for changes in captioning
2346      * preferences.
2347      *
2348      * @see #getSystemService
2349      * @see android.view.accessibility.CaptioningManager
2350      */
2351     public static final String CAPTIONING_SERVICE = "captioning";
2352 
2353     /**
2354      * Use with {@link #getSystemService} to retrieve a
2355      * {@link android.app.NotificationManager} for controlling keyguard.
2356      *
2357      * @see #getSystemService
2358      * @see android.app.KeyguardManager
2359      */
2360     public static final String KEYGUARD_SERVICE = "keyguard";
2361 
2362     /**
2363      * Use with {@link #getSystemService} to retrieve a {@link
2364      * android.location.LocationManager} for controlling location
2365      * updates.
2366      *
2367      * @see #getSystemService
2368      * @see android.location.LocationManager
2369      */
2370     public static final String LOCATION_SERVICE = "location";
2371 
2372     /**
2373      * Use with {@link #getSystemService} to retrieve a
2374      * {@link android.location.CountryDetector} for detecting the country that
2375      * the user is in.
2376      *
2377      * @hide
2378      */
2379     public static final String COUNTRY_DETECTOR = "country_detector";
2380 
2381     /**
2382      * Use with {@link #getSystemService} to retrieve a {@link
2383      * android.app.SearchManager} for handling searches.
2384      *
2385      * @see #getSystemService
2386      * @see android.app.SearchManager
2387      */
2388     public static final String SEARCH_SERVICE = "search";
2389 
2390     /**
2391      * Use with {@link #getSystemService} to retrieve a {@link
2392      * android.hardware.SensorManager} for accessing sensors.
2393      *
2394      * @see #getSystemService
2395      * @see android.hardware.SensorManager
2396      */
2397     public static final String SENSOR_SERVICE = "sensor";
2398 
2399     /**
2400      * Use with {@link #getSystemService} to retrieve a {@link
2401      * android.os.storage.StorageManager} for accessing system storage
2402      * functions.
2403      *
2404      * @see #getSystemService
2405      * @see android.os.storage.StorageManager
2406      */
2407     public static final String STORAGE_SERVICE = "storage";
2408 
2409     /**
2410      * Use with {@link #getSystemService} to retrieve a
2411      * com.android.server.WallpaperService for accessing wallpapers.
2412      *
2413      * @see #getSystemService
2414      */
2415     public static final String WALLPAPER_SERVICE = "wallpaper";
2416 
2417     /**
2418      * Use with {@link #getSystemService} to retrieve a {@link
2419      * android.os.Vibrator} for interacting with the vibration hardware.
2420      *
2421      * @see #getSystemService
2422      * @see android.os.Vibrator
2423      */
2424     public static final String VIBRATOR_SERVICE = "vibrator";
2425 
2426     /**
2427      * Use with {@link #getSystemService} to retrieve a {@link
2428      * android.app.StatusBarManager} for interacting with the status bar.
2429      *
2430      * @see #getSystemService
2431      * @see android.app.StatusBarManager
2432      * @hide
2433      */
2434     public static final String STATUS_BAR_SERVICE = "statusbar";
2435 
2436     /**
2437      * Use with {@link #getSystemService} to retrieve a {@link
2438      * android.net.ConnectivityManager} for handling management of
2439      * network connections.
2440      *
2441      * @see #getSystemService
2442      * @see android.net.ConnectivityManager
2443      */
2444     public static final String CONNECTIVITY_SERVICE = "connectivity";
2445 
2446     /**
2447      * Use with {@link #getSystemService} to retrieve a {@link
2448      * android.os.IUpdateLock} for managing runtime sequences that
2449      * must not be interrupted by headless OTA application or similar.
2450      *
2451      * @hide
2452      * @see #getSystemService
2453      * @see android.os.UpdateLock
2454      */
2455     public static final String UPDATE_LOCK_SERVICE = "updatelock";
2456 
2457     /**
2458      * Constant for the internal network management service, not really a Context service.
2459      * @hide
2460      */
2461     public static final String NETWORKMANAGEMENT_SERVICE = "network_management";
2462 
2463     /** {@hide} */
2464     public static final String NETWORK_STATS_SERVICE = "netstats";
2465     /** {@hide} */
2466     public static final String NETWORK_POLICY_SERVICE = "netpolicy";
2467 
2468     /**
2469      * Use with {@link #getSystemService} to retrieve a {@link
2470      * android.net.wifi.WifiManager} for handling management of
2471      * Wi-Fi access.
2472      *
2473      * @see #getSystemService
2474      * @see android.net.wifi.WifiManager
2475      */
2476     public static final String WIFI_SERVICE = "wifi";
2477 
2478     /**
2479      * Use with {@link #getSystemService} to retrieve a {@link
2480      * android.net.wifi.passpoint.WifiPasspointManager} for handling management of
2481      * Wi-Fi passpoint access.
2482      *
2483      * @see #getSystemService
2484      * @see android.net.wifi.passpoint.WifiPasspointManager
2485      * @hide
2486      */
2487     public static final String WIFI_PASSPOINT_SERVICE = "wifipasspoint";
2488 
2489     /**
2490      * Use with {@link #getSystemService} to retrieve a {@link
2491      * android.net.wifi.p2p.WifiP2pManager} for handling management of
2492      * Wi-Fi peer-to-peer connections.
2493      *
2494      * @see #getSystemService
2495      * @see android.net.wifi.p2p.WifiP2pManager
2496      */
2497     public static final String WIFI_P2P_SERVICE = "wifip2p";
2498 
2499     /**
2500      * Use with {@link #getSystemService} to retrieve a {@link
2501      * android.net.wifi.WifiScanner} for scanning the wifi universe
2502      *
2503      * @see #getSystemService
2504      * @see android.net.wifi.WifiScanner
2505      * @hide
2506      */
2507     @SystemApi
2508     public static final String WIFI_SCANNING_SERVICE = "wifiscanner";
2509 
2510     /**
2511      * Use with {@link #getSystemService} to retrieve a {@link
2512      * android.net.wifi.RttManager} for ranging devices with wifi
2513      *
2514      * @see #getSystemService
2515      * @see android.net.wifi.RttManager
2516      * @hide
2517      */
2518     @SystemApi
2519     public static final String WIFI_RTT_SERVICE = "rttmanager";
2520 
2521     /**
2522      * Use with {@link #getSystemService} to retrieve a {@link
2523      * android.net.EthernetManager} for handling management of
2524      * Ethernet access.
2525      *
2526      * @see #getSystemService
2527      * @see android.net.EthernetManager
2528      *
2529      * @hide
2530      */
2531     public static final String ETHERNET_SERVICE = "ethernet";
2532 
2533     /**
2534      * Use with {@link #getSystemService} to retrieve a {@link
2535      * android.net.nsd.NsdManager} for handling management of network service
2536      * discovery
2537      *
2538      * @see #getSystemService
2539      * @see android.net.nsd.NsdManager
2540      */
2541     public static final String NSD_SERVICE = "servicediscovery";
2542 
2543     /**
2544      * Use with {@link #getSystemService} to retrieve a
2545      * {@link android.media.AudioManager} for handling management of volume,
2546      * ringer modes and audio routing.
2547      *
2548      * @see #getSystemService
2549      * @see android.media.AudioManager
2550      */
2551     public static final String AUDIO_SERVICE = "audio";
2552 
2553     /**
2554      * Use with {@link #getSystemService} to retrieve a
2555      * {@link android.service.fingerprint.FingerprintManager} for handling management
2556      * of fingerprints.
2557      *
2558      * @see #getSystemService
2559      * @see android.app.FingerprintManager
2560      * @hide
2561      */
2562     public static final String FINGERPRINT_SERVICE = "fingerprint";
2563 
2564     /**
2565      * Use with {@link #getSystemService} to retrieve a
2566      * {@link android.media.MediaRouter} for controlling and managing
2567      * routing of media.
2568      *
2569      * @see #getSystemService
2570      * @see android.media.MediaRouter
2571      */
2572     public static final String MEDIA_ROUTER_SERVICE = "media_router";
2573 
2574     /**
2575      * Use with {@link #getSystemService} to retrieve a
2576      * {@link android.media.session.MediaSessionManager} for managing media Sessions.
2577      *
2578      * @see #getSystemService
2579      * @see android.media.session.MediaSessionManager
2580      */
2581     public static final String MEDIA_SESSION_SERVICE = "media_session";
2582 
2583     /**
2584      * Use with {@link #getSystemService} to retrieve a
2585      * {@link android.telephony.TelephonyManager} for handling management the
2586      * telephony features of the device.
2587      *
2588      * @see #getSystemService
2589      * @see android.telephony.TelephonyManager
2590      */
2591     public static final String TELEPHONY_SERVICE = "phone";
2592 
2593     /**
2594      * Use with {@link #getSystemService} to retrieve a
2595      * {@link android.telephony.SubscriptionManager} for handling management the
2596      * telephony subscriptions of the device.
2597      *
2598      * @see #getSystemService
2599      * @see android.telephony.SubscriptionManager
2600      */
2601     public static final String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service";
2602 
2603     /**
2604      * Use with {@link #getSystemService} to retrieve a
2605      * {@link android.telecom.TelecomManager} to manage telecom-related features
2606      * of the device.
2607      *
2608      * @see #getSystemService
2609      * @see android.telecom.TelecomManager
2610      */
2611     public static final String TELECOM_SERVICE = "telecom";
2612 
2613     /**
2614      * Use with {@link #getSystemService} to retrieve a
2615      * {@link android.text.ClipboardManager} for accessing and modifying
2616      * the contents of the global clipboard.
2617      *
2618      * @see #getSystemService
2619      * @see android.text.ClipboardManager
2620      */
2621     public static final String CLIPBOARD_SERVICE = "clipboard";
2622 
2623     /**
2624      * Use with {@link #getSystemService} to retrieve a
2625      * {@link android.view.inputmethod.InputMethodManager} for accessing input
2626      * methods.
2627      *
2628      * @see #getSystemService
2629      */
2630     public static final String INPUT_METHOD_SERVICE = "input_method";
2631 
2632     /**
2633      * Use with {@link #getSystemService} to retrieve a
2634      * {@link android.view.textservice.TextServicesManager} for accessing
2635      * text services.
2636      *
2637      * @see #getSystemService
2638      */
2639     public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
2640 
2641     /**
2642      * Use with {@link #getSystemService} to retrieve a
2643      * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
2644      *
2645      * @see #getSystemService
2646      */
2647     public static final String APPWIDGET_SERVICE = "appwidget";
2648 
2649     /**
2650      * Official published name of the (internal) voice interaction manager service.
2651      *
2652      * @hide
2653      * @see #getSystemService
2654      */
2655     public static final String VOICE_INTERACTION_MANAGER_SERVICE = "voiceinteraction";
2656 
2657     /**
2658      * Use with {@link #getSystemService} to retrieve an
2659      * {@link android.app.backup.IBackupManager IBackupManager} for communicating
2660      * with the backup mechanism.
2661      * @hide
2662      *
2663      * @see #getSystemService
2664      */
2665     @SystemApi
2666     public static final String BACKUP_SERVICE = "backup";
2667 
2668     /**
2669      * Use with {@link #getSystemService} to retrieve a
2670      * {@link android.os.DropBoxManager} instance for recording
2671      * diagnostic logs.
2672      * @see #getSystemService
2673      */
2674     public static final String DROPBOX_SERVICE = "dropbox";
2675 
2676     /**
2677      * Use with {@link #getSystemService} to retrieve a
2678      * {@link android.app.admin.DevicePolicyManager} for working with global
2679      * device policy management.
2680      *
2681      * @see #getSystemService
2682      */
2683     public static final String DEVICE_POLICY_SERVICE = "device_policy";
2684 
2685     /**
2686      * Use with {@link #getSystemService} to retrieve a
2687      * {@link android.app.UiModeManager} for controlling UI modes.
2688      *
2689      * @see #getSystemService
2690      */
2691     public static final String UI_MODE_SERVICE = "uimode";
2692 
2693     /**
2694      * Use with {@link #getSystemService} to retrieve a
2695      * {@link android.app.DownloadManager} for requesting HTTP downloads.
2696      *
2697      * @see #getSystemService
2698      */
2699     public static final String DOWNLOAD_SERVICE = "download";
2700 
2701     /**
2702      * Use with {@link #getSystemService} to retrieve a
2703      * {@link android.os.BatteryManager} for managing battery state.
2704      *
2705      * @see #getSystemService
2706      */
2707     public static final String BATTERY_SERVICE = "batterymanager";
2708 
2709     /**
2710      * Use with {@link #getSystemService} to retrieve a
2711      * {@link android.nfc.NfcManager} for using NFC.
2712      *
2713      * @see #getSystemService
2714      */
2715     public static final String NFC_SERVICE = "nfc";
2716 
2717     /**
2718      * Use with {@link #getSystemService} to retrieve a
2719      * {@link android.bluetooth.BluetoothAdapter} for using Bluetooth.
2720      *
2721      * @see #getSystemService
2722      */
2723     public static final String BLUETOOTH_SERVICE = "bluetooth";
2724 
2725     /**
2726      * Use with {@link #getSystemService} to retrieve a
2727      * {@link android.net.sip.SipManager} for accessing the SIP related service.
2728      *
2729      * @see #getSystemService
2730      */
2731     /** @hide */
2732     public static final String SIP_SERVICE = "sip";
2733 
2734     /**
2735      * Use with {@link #getSystemService} to retrieve a {@link
2736      * android.hardware.usb.UsbManager} for access to USB devices (as a USB host)
2737      * and for controlling this device's behavior as a USB device.
2738      *
2739      * @see #getSystemService
2740      * @see android.hardware.usb.UsbManager
2741      */
2742     public static final String USB_SERVICE = "usb";
2743 
2744     /**
2745      * Use with {@link #getSystemService} to retrieve a {@link
2746      * android.hardware.SerialManager} for access to serial ports.
2747      *
2748      * @see #getSystemService
2749      * @see android.hardware.SerialManager
2750      *
2751      * @hide
2752      */
2753     public static final String SERIAL_SERVICE = "serial";
2754 
2755     /**
2756      * Use with {@link #getSystemService} to retrieve a
2757      * {@link android.hardware.hdmi.HdmiControlManager} for controlling and managing
2758      * HDMI-CEC protocol.
2759      *
2760      * @see #getSystemService
2761      * @see android.hardware.hdmi.HdmiControlManager
2762      * @hide
2763      */
2764     @SystemApi
2765     public static final String HDMI_CONTROL_SERVICE = "hdmi_control";
2766 
2767     /**
2768      * Use with {@link #getSystemService} to retrieve a
2769      * {@link android.hardware.input.InputManager} for interacting with input devices.
2770      *
2771      * @see #getSystemService
2772      * @see android.hardware.input.InputManager
2773      */
2774     public static final String INPUT_SERVICE = "input";
2775 
2776     /**
2777      * Use with {@link #getSystemService} to retrieve a
2778      * {@link android.hardware.display.DisplayManager} for interacting with display devices.
2779      *
2780      * @see #getSystemService
2781      * @see android.hardware.display.DisplayManager
2782      */
2783     public static final String DISPLAY_SERVICE = "display";
2784 
2785     /**
2786      * Use with {@link #getSystemService} to retrieve a
2787      * {@link android.os.UserManager} for managing users on devices that support multiple users.
2788      *
2789      * @see #getSystemService
2790      * @see android.os.UserManager
2791      */
2792     public static final String USER_SERVICE = "user";
2793 
2794     /**
2795      * Use with {@link #getSystemService} to retrieve a
2796      * {@link android.content.pm.LauncherApps} for querying and monitoring launchable apps across
2797      * profiles of a user.
2798      *
2799      * @see #getSystemService
2800      * @see android.content.pm.LauncherApps
2801      */
2802     public static final String LAUNCHER_APPS_SERVICE = "launcherapps";
2803 
2804     /**
2805      * Use with {@link #getSystemService} to retrieve a
2806      * {@link android.content.RestrictionsManager} for retrieving application restrictions
2807      * and requesting permissions for restricted operations.
2808      * @see #getSystemService
2809      * @see android.content.RestrictionsManager
2810      */
2811     public static final String RESTRICTIONS_SERVICE = "restrictions";
2812 
2813     /**
2814      * Use with {@link #getSystemService} to retrieve a
2815      * {@link android.app.AppOpsManager} for tracking application operations
2816      * on the device.
2817      *
2818      * @see #getSystemService
2819      * @see android.app.AppOpsManager
2820      */
2821     public static final String APP_OPS_SERVICE = "appops";
2822 
2823     /**
2824      * Use with {@link #getSystemService} to retrieve a
2825      * {@link android.hardware.camera2.CameraManager} for interacting with
2826      * camera devices.
2827      *
2828      * @see #getSystemService
2829      * @see android.hardware.camera2.CameraManager
2830      */
2831     public static final String CAMERA_SERVICE = "camera";
2832 
2833     /**
2834      * {@link android.print.PrintManager} for printing and managing
2835      * printers and print tasks.
2836      *
2837      * @see #getSystemService
2838      * @see android.print.PrintManager
2839      */
2840     public static final String PRINT_SERVICE = "print";
2841 
2842     /**
2843      * Use with {@link #getSystemService} to retrieve a
2844      * {@link android.hardware.ConsumerIrManager} for transmitting infrared
2845      * signals from the device.
2846      *
2847      * @see #getSystemService
2848      * @see android.hardware.ConsumerIrManager
2849      */
2850     public static final String CONSUMER_IR_SERVICE = "consumer_ir";
2851 
2852     /**
2853      * {@link android.app.trust.TrustManager} for managing trust agents.
2854      * @see #getSystemService
2855      * @see android.app.trust.TrustManager
2856      * @hide
2857      */
2858     public static final String TRUST_SERVICE = "trust";
2859 
2860     /**
2861      * Use with {@link #getSystemService} to retrieve a
2862      * {@link android.media.tv.TvInputManager} for interacting with TV inputs
2863      * on the device.
2864      *
2865      * @see #getSystemService
2866      * @see android.media.tv.TvInputManager
2867      */
2868     public static final String TV_INPUT_SERVICE = "tv_input";
2869 
2870     /**
2871      * {@link android.net.NetworkScoreManager} for managing network scoring.
2872      * @see #getSystemService
2873      * @see android.net.NetworkScoreManager
2874      * @hide
2875      */
2876     @SystemApi
2877     public static final String NETWORK_SCORE_SERVICE = "network_score";
2878 
2879     /**
2880      * Use with {@link #getSystemService} to retrieve a {@link
2881      * android.app.usage.UsageStatsManager} for querying device usage stats.
2882      *
2883      * @see #getSystemService
2884      * @see android.app.usage.UsageStatsManager
2885      */
2886     public static final String USAGE_STATS_SERVICE = "usagestats";
2887 
2888     /**
2889      * Use with {@link #getSystemService} to retrieve a {@link
2890      * android.app.job.JobScheduler} instance for managing occasional
2891      * background tasks.
2892      * @see #getSystemService
2893      * @see android.app.job.JobScheduler
2894      */
2895     public static final String JOB_SCHEDULER_SERVICE = "jobscheduler";
2896 
2897     /**
2898      * Use with {@link #getSystemService} to retrieve a {@link
2899      * android.service.persistentdata.PersistentDataBlockManager} instance
2900      * for interacting with a storage device that lives across factory resets.
2901      *
2902      * @see #getSystemService
2903      * @see android.service.persistentdata.PersistentDataBlockManager
2904      * @hide
2905      */
2906     @SystemApi
2907     public static final String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block";
2908 
2909     /**
2910      * Use with {@link #getSystemService} to retrieve a {@link
2911      * android.media.projection.MediaProjectionManager} instance for managing
2912      * media projection sessions.
2913      * @see #getSystemService
2914      * @see android.media.projection.ProjectionManager
2915      */
2916     public static final String MEDIA_PROJECTION_SERVICE = "media_projection";
2917 
2918     /**
2919      * Determine whether the given permission is allowed for a particular
2920      * process and user ID running in the system.
2921      *
2922      * @param permission The name of the permission being checked.
2923      * @param pid The process ID being checked against.  Must be > 0.
2924      * @param uid The user ID being checked against.  A uid of 0 is the root
2925      * user, which will pass every permission check.
2926      *
2927      * @return {@link PackageManager#PERMISSION_GRANTED} if the given
2928      * pid/uid is allowed that permission, or
2929      * {@link PackageManager#PERMISSION_DENIED} if it is not.
2930      *
2931      * @see PackageManager#checkPermission(String, String)
2932      * @see #checkCallingPermission
2933      */
2934     @PackageManager.PermissionResult
checkPermission(@onNull String permission, int pid, int uid)2935     public abstract int checkPermission(@NonNull String permission, int pid, int uid);
2936 
2937     /** @hide */
2938     @PackageManager.PermissionResult
checkPermission(@onNull String permission, int pid, int uid, IBinder callerToken)2939     public abstract int checkPermission(@NonNull String permission, int pid, int uid,
2940             IBinder callerToken);
2941 
2942     /**
2943      * Determine whether the calling process of an IPC you are handling has been
2944      * granted a particular permission.  This is basically the same as calling
2945      * {@link #checkPermission(String, int, int)} with the pid and uid returned
2946      * by {@link android.os.Binder#getCallingPid} and
2947      * {@link android.os.Binder#getCallingUid}.  One important difference
2948      * is that if you are not currently processing an IPC, this function
2949      * will always fail.  This is done to protect against accidentally
2950      * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
2951      * to avoid this protection.
2952      *
2953      * @param permission The name of the permission being checked.
2954      *
2955      * @return {@link PackageManager#PERMISSION_GRANTED} if the calling
2956      * pid/uid is allowed that permission, or
2957      * {@link PackageManager#PERMISSION_DENIED} if it is not.
2958      *
2959      * @see PackageManager#checkPermission(String, String)
2960      * @see #checkPermission
2961      * @see #checkCallingOrSelfPermission
2962      */
2963     @PackageManager.PermissionResult
checkCallingPermission(@onNull String permission)2964     public abstract int checkCallingPermission(@NonNull String permission);
2965 
2966     /**
2967      * Determine whether the calling process of an IPC <em>or you</em> have been
2968      * granted a particular permission.  This is the same as
2969      * {@link #checkCallingPermission}, except it grants your own permissions
2970      * if you are not currently processing an IPC.  Use with care!
2971      *
2972      * @param permission The name of the permission being checked.
2973      *
2974      * @return {@link PackageManager#PERMISSION_GRANTED} if the calling
2975      * pid/uid is allowed that permission, or
2976      * {@link PackageManager#PERMISSION_DENIED} if it is not.
2977      *
2978      * @see PackageManager#checkPermission(String, String)
2979      * @see #checkPermission
2980      * @see #checkCallingPermission
2981      */
2982     @PackageManager.PermissionResult
checkCallingOrSelfPermission(@onNull String permission)2983     public abstract int checkCallingOrSelfPermission(@NonNull String permission);
2984 
2985     /**
2986      * If the given permission is not allowed for a particular process
2987      * and user ID running in the system, throw a {@link SecurityException}.
2988      *
2989      * @param permission The name of the permission being checked.
2990      * @param pid The process ID being checked against.  Must be &gt; 0.
2991      * @param uid The user ID being checked against.  A uid of 0 is the root
2992      * user, which will pass every permission check.
2993      * @param message A message to include in the exception if it is thrown.
2994      *
2995      * @see #checkPermission(String, int, int)
2996      */
enforcePermission( @onNull String permission, int pid, int uid, @Nullable String message)2997     public abstract void enforcePermission(
2998             @NonNull String permission, int pid, int uid, @Nullable String message);
2999 
3000     /**
3001      * If the calling process of an IPC you are handling has not been
3002      * granted a particular permission, throw a {@link
3003      * SecurityException}.  This is basically the same as calling
3004      * {@link #enforcePermission(String, int, int, String)} with the
3005      * pid and uid returned by {@link android.os.Binder#getCallingPid}
3006      * and {@link android.os.Binder#getCallingUid}.  One important
3007      * difference is that if you are not currently processing an IPC,
3008      * this function will always throw the SecurityException.  This is
3009      * done to protect against accidentally leaking permissions; you
3010      * can use {@link #enforceCallingOrSelfPermission} to avoid this
3011      * protection.
3012      *
3013      * @param permission The name of the permission being checked.
3014      * @param message A message to include in the exception if it is thrown.
3015      *
3016      * @see #checkCallingPermission(String)
3017      */
enforceCallingPermission( @onNull String permission, @Nullable String message)3018     public abstract void enforceCallingPermission(
3019             @NonNull String permission, @Nullable String message);
3020 
3021     /**
3022      * If neither you nor the calling process of an IPC you are
3023      * handling has been granted a particular permission, throw a
3024      * {@link SecurityException}.  This is the same as {@link
3025      * #enforceCallingPermission}, except it grants your own
3026      * permissions if you are not currently processing an IPC.  Use
3027      * with care!
3028      *
3029      * @param permission The name of the permission being checked.
3030      * @param message A message to include in the exception if it is thrown.
3031      *
3032      * @see #checkCallingOrSelfPermission(String)
3033      */
enforceCallingOrSelfPermission( @onNull String permission, @Nullable String message)3034     public abstract void enforceCallingOrSelfPermission(
3035             @NonNull String permission, @Nullable String message);
3036 
3037     /**
3038      * Grant permission to access a specific Uri to another package, regardless
3039      * of whether that package has general permission to access the Uri's
3040      * content provider.  This can be used to grant specific, temporary
3041      * permissions, typically in response to user interaction (such as the
3042      * user opening an attachment that you would like someone else to
3043      * display).
3044      *
3045      * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
3046      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3047      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
3048      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
3049      * start an activity instead of this function directly.  If you use this
3050      * function directly, you should be sure to call
3051      * {@link #revokeUriPermission} when the target should no longer be allowed
3052      * to access it.
3053      *
3054      * <p>To succeed, the content provider owning the Uri must have set the
3055      * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
3056      * grantUriPermissions} attribute in its manifest or included the
3057      * {@link android.R.styleable#AndroidManifestGrantUriPermission
3058      * &lt;grant-uri-permissions&gt;} tag.
3059      *
3060      * @param toPackage The package you would like to allow to access the Uri.
3061      * @param uri The Uri you would like to grant access to.
3062      * @param modeFlags The desired access modes.  Any combination of
3063      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
3064      * Intent.FLAG_GRANT_READ_URI_PERMISSION},
3065      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
3066      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION},
3067      * {@link Intent#FLAG_GRANT_PERSISTABLE_URI_PERMISSION
3068      * Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION}, or
3069      * {@link Intent#FLAG_GRANT_PREFIX_URI_PERMISSION
3070      * Intent.FLAG_GRANT_PREFIX_URI_PERMISSION}.
3071      *
3072      * @see #revokeUriPermission
3073      */
grantUriPermission(String toPackage, Uri uri, @Intent.GrantUriMode int modeFlags)3074     public abstract void grantUriPermission(String toPackage, Uri uri,
3075             @Intent.GrantUriMode int modeFlags);
3076 
3077     /**
3078      * Remove all permissions to access a particular content provider Uri
3079      * that were previously added with {@link #grantUriPermission}.  The given
3080      * Uri will match all previously granted Uris that are the same or a
3081      * sub-path of the given Uri.  That is, revoking "content://foo/target" will
3082      * revoke both "content://foo/target" and "content://foo/target/sub", but not
3083      * "content://foo".  It will not remove any prefix grants that exist at a
3084      * higher level.
3085      *
3086      * <p>Prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, if you did not have
3087      * regular permission access to a Uri, but had received access to it through
3088      * a specific Uri permission grant, you could not revoke that grant with this
3089      * function and a {@link SecurityException} would be thrown.  As of
3090      * {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this function will not throw a security exception,
3091      * but will remove whatever permission grants to the Uri had been given to the app
3092      * (or none).</p>
3093      *
3094      * @param uri The Uri you would like to revoke access to.
3095      * @param modeFlags The desired access modes.  Any combination of
3096      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
3097      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3098      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
3099      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3100      *
3101      * @see #grantUriPermission
3102      */
revokeUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags)3103     public abstract void revokeUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags);
3104 
3105     /**
3106      * Determine whether a particular process and user ID has been granted
3107      * permission to access a specific URI.  This only checks for permissions
3108      * that have been explicitly granted -- if the given process/uid has
3109      * more general access to the URI's content provider then this check will
3110      * always fail.
3111      *
3112      * @param uri The uri that is being checked.
3113      * @param pid The process ID being checked against.  Must be &gt; 0.
3114      * @param uid The user ID being checked against.  A uid of 0 is the root
3115      * user, which will pass every permission check.
3116      * @param modeFlags The type of access to grant.  May be one or both of
3117      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3118      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3119      *
3120      * @return {@link PackageManager#PERMISSION_GRANTED} if the given
3121      * pid/uid is allowed to access that uri, or
3122      * {@link PackageManager#PERMISSION_DENIED} if it is not.
3123      *
3124      * @see #checkCallingUriPermission
3125      */
checkUriPermission(Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags)3126     public abstract int checkUriPermission(Uri uri, int pid, int uid,
3127             @Intent.AccessUriMode int modeFlags);
3128 
3129     /** @hide */
checkUriPermission(Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, IBinder callerToken)3130     public abstract int checkUriPermission(Uri uri, int pid, int uid,
3131             @Intent.AccessUriMode int modeFlags, IBinder callerToken);
3132 
3133     /**
3134      * Determine whether the calling process and user ID has been
3135      * granted permission to access a specific URI.  This is basically
3136      * the same as calling {@link #checkUriPermission(Uri, int, int,
3137      * int)} with the pid and uid returned by {@link
3138      * android.os.Binder#getCallingPid} and {@link
3139      * android.os.Binder#getCallingUid}.  One important difference is
3140      * that if you are not currently processing an IPC, this function
3141      * will always fail.
3142      *
3143      * @param uri The uri that is being checked.
3144      * @param modeFlags The type of access to grant.  May be one or both of
3145      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3146      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3147      *
3148      * @return {@link PackageManager#PERMISSION_GRANTED} if the caller
3149      * is allowed to access that uri, or
3150      * {@link PackageManager#PERMISSION_DENIED} if it is not.
3151      *
3152      * @see #checkUriPermission(Uri, int, int, int)
3153      */
checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags)3154     public abstract int checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags);
3155 
3156     /**
3157      * Determine whether the calling process of an IPC <em>or you</em> has been granted
3158      * permission to access a specific URI.  This is the same as
3159      * {@link #checkCallingUriPermission}, except it grants your own permissions
3160      * if you are not currently processing an IPC.  Use with care!
3161      *
3162      * @param uri The uri that is being checked.
3163      * @param modeFlags The type of access to grant.  May be one or both of
3164      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3165      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3166      *
3167      * @return {@link PackageManager#PERMISSION_GRANTED} if the caller
3168      * is allowed to access that uri, or
3169      * {@link PackageManager#PERMISSION_DENIED} if it is not.
3170      *
3171      * @see #checkCallingUriPermission
3172      */
checkCallingOrSelfUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags)3173     public abstract int checkCallingOrSelfUriPermission(Uri uri,
3174             @Intent.AccessUriMode int modeFlags);
3175 
3176     /**
3177      * Check both a Uri and normal permission.  This allows you to perform
3178      * both {@link #checkPermission} and {@link #checkUriPermission} in one
3179      * call.
3180      *
3181      * @param uri The Uri whose permission is to be checked, or null to not
3182      * do this check.
3183      * @param readPermission The permission that provides overall read access,
3184      * or null to not do this check.
3185      * @param writePermission The permission that provides overall write
3186      * access, or null to not do this check.
3187      * @param pid The process ID being checked against.  Must be &gt; 0.
3188      * @param uid The user ID being checked against.  A uid of 0 is the root
3189      * user, which will pass every permission check.
3190      * @param modeFlags The type of access to grant.  May be one or both of
3191      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3192      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3193      *
3194      * @return {@link PackageManager#PERMISSION_GRANTED} if the caller
3195      * is allowed to access that uri or holds one of the given permissions, or
3196      * {@link PackageManager#PERMISSION_DENIED} if it is not.
3197      */
checkUriPermission(@ullable Uri uri, @Nullable String readPermission, @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags)3198     public abstract int checkUriPermission(@Nullable Uri uri, @Nullable String readPermission,
3199             @Nullable String writePermission, int pid, int uid,
3200             @Intent.AccessUriMode int modeFlags);
3201 
3202     /**
3203      * If a particular process and user ID has not been granted
3204      * permission to access a specific URI, throw {@link
3205      * SecurityException}.  This only checks for permissions that have
3206      * been explicitly granted -- if the given process/uid has more
3207      * general access to the URI's content provider then this check
3208      * will always fail.
3209      *
3210      * @param uri The uri that is being checked.
3211      * @param pid The process ID being checked against.  Must be &gt; 0.
3212      * @param uid The user ID being checked against.  A uid of 0 is the root
3213      * user, which will pass every permission check.
3214      * @param modeFlags The type of access to grant.  May be one or both of
3215      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3216      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3217      * @param message A message to include in the exception if it is thrown.
3218      *
3219      * @see #checkUriPermission(Uri, int, int, int)
3220      */
enforceUriPermission( Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message)3221     public abstract void enforceUriPermission(
3222             Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message);
3223 
3224     /**
3225      * If the calling process and user ID has not been granted
3226      * permission to access a specific URI, throw {@link
3227      * SecurityException}.  This is basically the same as calling
3228      * {@link #enforceUriPermission(Uri, int, int, int, String)} with
3229      * the pid and uid returned by {@link
3230      * android.os.Binder#getCallingPid} and {@link
3231      * android.os.Binder#getCallingUid}.  One important difference is
3232      * that if you are not currently processing an IPC, this function
3233      * will always throw a SecurityException.
3234      *
3235      * @param uri The uri that is being checked.
3236      * @param modeFlags The type of access to grant.  May be one or both of
3237      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3238      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3239      * @param message A message to include in the exception if it is thrown.
3240      *
3241      * @see #checkCallingUriPermission(Uri, int)
3242      */
enforceCallingUriPermission( Uri uri, @Intent.AccessUriMode int modeFlags, String message)3243     public abstract void enforceCallingUriPermission(
3244             Uri uri, @Intent.AccessUriMode int modeFlags, String message);
3245 
3246     /**
3247      * If the calling process of an IPC <em>or you</em> has not been
3248      * granted permission to access a specific URI, throw {@link
3249      * SecurityException}.  This is the same as {@link
3250      * #enforceCallingUriPermission}, except it grants your own
3251      * permissions if you are not currently processing an IPC.  Use
3252      * with care!
3253      *
3254      * @param uri The uri that is being checked.
3255      * @param modeFlags The type of access to grant.  May be one or both of
3256      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3257      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3258      * @param message A message to include in the exception if it is thrown.
3259      *
3260      * @see #checkCallingOrSelfUriPermission(Uri, int)
3261      */
enforceCallingOrSelfUriPermission( Uri uri, @Intent.AccessUriMode int modeFlags, String message)3262     public abstract void enforceCallingOrSelfUriPermission(
3263             Uri uri, @Intent.AccessUriMode int modeFlags, String message);
3264 
3265     /**
3266      * Enforce both a Uri and normal permission.  This allows you to perform
3267      * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
3268      * call.
3269      *
3270      * @param uri The Uri whose permission is to be checked, or null to not
3271      * do this check.
3272      * @param readPermission The permission that provides overall read access,
3273      * or null to not do this check.
3274      * @param writePermission The permission that provides overall write
3275      * access, or null to not do this check.
3276      * @param pid The process ID being checked against.  Must be &gt; 0.
3277      * @param uid The user ID being checked against.  A uid of 0 is the root
3278      * user, which will pass every permission check.
3279      * @param modeFlags The type of access to grant.  May be one or both of
3280      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
3281      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
3282      * @param message A message to include in the exception if it is thrown.
3283      *
3284      * @see #checkUriPermission(Uri, String, String, int, int, int)
3285      */
enforceUriPermission( @ullable Uri uri, @Nullable String readPermission, @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags, @Nullable String message)3286     public abstract void enforceUriPermission(
3287             @Nullable Uri uri, @Nullable String readPermission,
3288             @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags,
3289             @Nullable String message);
3290 
3291     /** @hide */
3292     @IntDef(flag = true,
3293             value = {CONTEXT_INCLUDE_CODE, CONTEXT_IGNORE_SECURITY, CONTEXT_RESTRICTED})
3294     @Retention(RetentionPolicy.SOURCE)
3295     public @interface CreatePackageOptions {}
3296 
3297     /**
3298      * Flag for use with {@link #createPackageContext}: include the application
3299      * code with the context.  This means loading code into the caller's
3300      * process, so that {@link #getClassLoader()} can be used to instantiate
3301      * the application's classes.  Setting this flags imposes security
3302      * restrictions on what application context you can access; if the
3303      * requested application can not be safely loaded into your process,
3304      * java.lang.SecurityException will be thrown.  If this flag is not set,
3305      * there will be no restrictions on the packages that can be loaded,
3306      * but {@link #getClassLoader} will always return the default system
3307      * class loader.
3308      */
3309     public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
3310 
3311     /**
3312      * Flag for use with {@link #createPackageContext}: ignore any security
3313      * restrictions on the Context being requested, allowing it to always
3314      * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
3315      * to be loaded into a process even when it isn't safe to do so.  Use
3316      * with extreme care!
3317      */
3318     public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
3319 
3320     /**
3321      * Flag for use with {@link #createPackageContext}: a restricted context may
3322      * disable specific features. For instance, a View associated with a restricted
3323      * context would ignore particular XML attributes.
3324      */
3325     public static final int CONTEXT_RESTRICTED = 0x00000004;
3326 
3327     /**
3328      * @hide Used to indicate we should tell the activity manager about the process
3329      * loading this code.
3330      */
3331     public static final int CONTEXT_REGISTER_PACKAGE = 0x40000000;
3332 
3333     /**
3334      * Return a new Context object for the given application name.  This
3335      * Context is the same as what the named application gets when it is
3336      * launched, containing the same resources and class loader.  Each call to
3337      * this method returns a new instance of a Context object; Context objects
3338      * are not shared, however they share common state (Resources, ClassLoader,
3339      * etc) so the Context instance itself is fairly lightweight.
3340      *
3341      * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
3342      * application with the given package name.
3343      *
3344      * <p>Throws {@link java.lang.SecurityException} if the Context requested
3345      * can not be loaded into the caller's process for security reasons (see
3346      * {@link #CONTEXT_INCLUDE_CODE} for more information}.
3347      *
3348      * @param packageName Name of the application's package.
3349      * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
3350      *              or {@link #CONTEXT_IGNORE_SECURITY}.
3351      *
3352      * @return A {@link Context} for the application.
3353      *
3354      * @throws SecurityException &nbsp;
3355      * @throws PackageManager.NameNotFoundException if there is no application with
3356      * the given package name.
3357      */
createPackageContext(String packageName, @CreatePackageOptions int flags)3358     public abstract Context createPackageContext(String packageName,
3359             @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException;
3360 
3361     /**
3362      * Similar to {@link #createPackageContext(String, int)}, but with a
3363      * different {@link UserHandle}. For example, {@link #getContentResolver()}
3364      * will open any {@link Uri} as the given user.
3365      *
3366      * @hide
3367      */
createPackageContextAsUser( String packageName, int flags, UserHandle user)3368     public abstract Context createPackageContextAsUser(
3369             String packageName, int flags, UserHandle user)
3370             throws PackageManager.NameNotFoundException;
3371 
3372     /**
3373      * Creates a context given an {@link android.content.pm.ApplicationInfo}.
3374      *
3375      * @hide
3376      */
createApplicationContext(ApplicationInfo application, int flags)3377     public abstract Context createApplicationContext(ApplicationInfo application,
3378             int flags) throws PackageManager.NameNotFoundException;
3379 
3380     /**
3381      * Get the userId associated with this context
3382      * @return user id
3383      *
3384      * @hide
3385      */
getUserId()3386     public abstract int getUserId();
3387 
3388     /**
3389      * Return a new Context object for the current Context but whose resources
3390      * are adjusted to match the given Configuration.  Each call to this method
3391      * returns a new instance of a Context object; Context objects are not
3392      * shared, however common state (ClassLoader, other Resources for the
3393      * same configuration) may be so the Context itself can be fairly lightweight.
3394      *
3395      * @param overrideConfiguration A {@link Configuration} specifying what
3396      * values to modify in the base Configuration of the original Context's
3397      * resources.  If the base configuration changes (such as due to an
3398      * orientation change), the resources of this context will also change except
3399      * for those that have been explicitly overridden with a value here.
3400      *
3401      * @return A {@link Context} with the given configuration override.
3402      */
createConfigurationContext( @onNull Configuration overrideConfiguration)3403     public abstract Context createConfigurationContext(
3404             @NonNull Configuration overrideConfiguration);
3405 
3406     /**
3407      * Return a new Context object for the current Context but whose resources
3408      * are adjusted to match the metrics of the given Display.  Each call to this method
3409      * returns a new instance of a Context object; Context objects are not
3410      * shared, however common state (ClassLoader, other Resources for the
3411      * same configuration) may be so the Context itself can be fairly lightweight.
3412      *
3413      * The returned display Context provides a {@link WindowManager}
3414      * (see {@link #getSystemService(String)}) that is configured to show windows
3415      * on the given display.  The WindowManager's {@link WindowManager#getDefaultDisplay}
3416      * method can be used to retrieve the Display from the returned Context.
3417      *
3418      * @param display A {@link Display} object specifying the display
3419      * for whose metrics the Context's resources should be tailored and upon which
3420      * new windows should be shown.
3421      *
3422      * @return A {@link Context} for the display.
3423      */
createDisplayContext(@onNull Display display)3424     public abstract Context createDisplayContext(@NonNull Display display);
3425 
3426     /**
3427      * Gets the display adjustments holder for this context.  This information
3428      * is provided on a per-application or activity basis and is used to simulate lower density
3429      * display metrics for legacy applications and restricted screen sizes.
3430      *
3431      * @param displayId The display id for which to get compatibility info.
3432      * @return The compatibility info holder, or null if not required by the application.
3433      * @hide
3434      */
getDisplayAdjustments(int displayId)3435     public abstract DisplayAdjustments getDisplayAdjustments(int displayId);
3436 
3437     /**
3438      * Indicates whether this Context is restricted.
3439      *
3440      * @return {@code true} if this Context is restricted, {@code false} otherwise.
3441      *
3442      * @see #CONTEXT_RESTRICTED
3443      */
isRestricted()3444     public boolean isRestricted() {
3445         return false;
3446     }
3447 }
3448