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 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 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 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 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 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 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 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 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 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 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 > 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 * <grant-uri-permissions>} 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 > 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 > 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 > 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 > 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 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