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