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> 1134 * <p> 1135 * The returned path may change over time if the calling app is moved to an 1136 * adopted storage device, so only relative paths should be persisted. 1137 * <p> 1138 * Apps require no extra permissions to read or write to the returned path, 1139 * since this path lives in their private storage. 1140 * 1141 * @return The path of the directory holding application cache files. 1142 * @see #openFileOutput 1143 * @see #getFileStreamPath 1144 * @see #getDir 1145 */ getCacheDir()1146 public abstract File getCacheDir(); 1147 1148 /** 1149 * Returns the absolute path to the application specific cache directory on 1150 * the filesystem designed for storing cached code. The system will delete 1151 * any files stored in this location both when your specific application is 1152 * upgraded, and when the entire platform is upgraded. 1153 * <p> 1154 * This location is optimal for storing compiled or optimized code generated 1155 * by your application at runtime. 1156 * <p> 1157 * The returned path may change over time if the calling app is moved to an 1158 * adopted storage device, so only relative paths should be persisted. 1159 * <p> 1160 * Apps require no extra permissions to read or write to the returned path, 1161 * since this path lives in their private storage. 1162 * 1163 * @return The path of the directory holding application code cache files. 1164 */ getCodeCacheDir()1165 public abstract File getCodeCacheDir(); 1166 1167 /** 1168 * Returns absolute path to application-specific directory on the primary 1169 * shared/external storage device where the application can place cache 1170 * files it owns. These files are internal to the application, and not 1171 * typically visible to the user as media. 1172 * <p> 1173 * This is like {@link #getCacheDir()} in that these files will be deleted 1174 * when the application is uninstalled, however there are some important 1175 * differences: 1176 * <ul> 1177 * <li>The platform does not always monitor the space available in shared 1178 * storage, and thus may not automatically delete these files. Apps should 1179 * always manage the maximum space used in this location. Currently the only 1180 * time files here will be deleted by the platform is when running on 1181 * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and 1182 * {@link Environment#isExternalStorageEmulated(File)} returns true. 1183 * <li>Shared storage may not always be available, since removable media can 1184 * be ejected by the user. Media state can be checked using 1185 * {@link Environment#getExternalStorageState(File)}. 1186 * <li>There is no security enforced with these files. For example, any 1187 * application holding 1188 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1189 * these files. 1190 * </ul> 1191 * <p> 1192 * If a shared storage device is emulated (as determined by 1193 * {@link Environment#isExternalStorageEmulated(File)}), it's contents are 1194 * backed by a private user data partition, which means there is little 1195 * benefit to storing data here instead of the private directory returned by 1196 * {@link #getCacheDir()}. 1197 * <p> 1198 * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions 1199 * are required to read or write to the returned path; it's always 1200 * accessible to the calling app. This only applies to paths generated for 1201 * package name of the calling application. To access paths belonging to 1202 * other packages, 1203 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} and/or 1204 * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required. 1205 * <p> 1206 * On devices with multiple users (as described by {@link UserManager}), 1207 * each user has their own isolated shared storage. Applications only have 1208 * access to the shared storage for the user they're running as. 1209 * <p> 1210 * The returned path may change over time if different shared storage media 1211 * is inserted, so only relative paths should be persisted. 1212 * 1213 * @return the absolute path to application-specific directory. May return 1214 * {@code null} if shared storage is not currently available. 1215 * @see #getCacheDir 1216 * @see #getExternalCacheDirs() 1217 * @see Environment#getExternalStorageState(File) 1218 * @see Environment#isExternalStorageEmulated(File) 1219 * @see Environment#isExternalStorageRemovable(File) 1220 */ 1221 @Nullable getExternalCacheDir()1222 public abstract File getExternalCacheDir(); 1223 1224 /** 1225 * Returns absolute paths to application-specific directories on all 1226 * shared/external storage devices where the application can place cache 1227 * files it owns. These files are internal to the application, and not 1228 * typically visible to the user as media. 1229 * <p> 1230 * This is like {@link #getCacheDir()} in that these files will be deleted 1231 * when the application is uninstalled, however there are some important 1232 * differences: 1233 * <ul> 1234 * <li>The platform does not always monitor the space available in shared 1235 * storage, and thus may not automatically delete these files. Apps should 1236 * always manage the maximum space used in this location. Currently the only 1237 * time files here will be deleted by the platform is when running on 1238 * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and 1239 * {@link Environment#isExternalStorageEmulated(File)} returns true. 1240 * <li>Shared storage may not always be available, since removable media can 1241 * be ejected by the user. Media state can be checked using 1242 * {@link Environment#getExternalStorageState(File)}. 1243 * <li>There is no security enforced with these files. For example, any 1244 * application holding 1245 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1246 * these files. 1247 * </ul> 1248 * <p> 1249 * If a shared storage device is emulated (as determined by 1250 * {@link Environment#isExternalStorageEmulated(File)}), it's contents are 1251 * backed by a private user data partition, which means there is little 1252 * benefit to storing data here instead of the private directory returned by 1253 * {@link #getCacheDir()}. 1254 * <p> 1255 * Shared storage devices returned here are considered a stable part of the 1256 * device, including physical media slots under a protective cover. The 1257 * returned paths do not include transient devices, such as USB flash drives 1258 * connected to handheld devices. 1259 * <p> 1260 * An application may store data on any or all of the returned devices. For 1261 * example, an app may choose to store large files on the device with the 1262 * most available space, as measured by {@link StatFs}. 1263 * <p> 1264 * No additional permissions are required for the calling app to read or 1265 * write files under the returned path. Write access outside of these paths 1266 * on secondary external storage devices is not available. 1267 * <p> 1268 * The returned paths may change over time if different shared storage media 1269 * is inserted, so only relative paths should be persisted. 1270 * 1271 * @return the absolute paths to application-specific directories. Some 1272 * individual paths may be {@code null} if that shared storage is 1273 * not currently available. The first path returned is the same as 1274 * {@link #getExternalCacheDir()}. 1275 * @see #getExternalCacheDir() 1276 * @see Environment#getExternalStorageState(File) 1277 * @see Environment#isExternalStorageEmulated(File) 1278 * @see Environment#isExternalStorageRemovable(File) 1279 */ getExternalCacheDirs()1280 public abstract File[] getExternalCacheDirs(); 1281 1282 /** 1283 * Returns absolute paths to application-specific directories on all 1284 * shared/external storage devices where the application can place media 1285 * files. These files are scanned and made available to other apps through 1286 * {@link MediaStore}. 1287 * <p> 1288 * This is like {@link #getExternalFilesDirs} in that these files will be 1289 * deleted when the application is uninstalled, however there are some 1290 * important differences: 1291 * <ul> 1292 * <li>Shared storage may not always be available, since removable media can 1293 * be ejected by the user. Media state can be checked using 1294 * {@link Environment#getExternalStorageState(File)}. 1295 * <li>There is no security enforced with these files. For example, any 1296 * application holding 1297 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1298 * these files. 1299 * </ul> 1300 * <p> 1301 * Shared storage devices returned here are considered a stable part of the 1302 * device, including physical media slots under a protective cover. The 1303 * returned paths do not include transient devices, such as USB flash drives 1304 * connected to handheld devices. 1305 * <p> 1306 * An application may store data on any or all of the returned devices. For 1307 * example, an app may choose to store large files on the device with the 1308 * most available space, as measured by {@link StatFs}. 1309 * <p> 1310 * No additional permissions are required for the calling app to read or 1311 * write files under the returned path. Write access outside of these paths 1312 * on secondary external storage devices is not available. 1313 * <p> 1314 * The returned paths may change over time if different shared storage media 1315 * is inserted, so only relative paths should be persisted. 1316 * 1317 * @return the absolute paths to application-specific directories. Some 1318 * individual paths may be {@code null} if that shared storage is 1319 * not currently available. 1320 * @see Environment#getExternalStorageState(File) 1321 * @see Environment#isExternalStorageEmulated(File) 1322 * @see Environment#isExternalStorageRemovable(File) 1323 */ getExternalMediaDirs()1324 public abstract File[] getExternalMediaDirs(); 1325 1326 /** 1327 * Returns an array of strings naming the private files associated with 1328 * this Context's application package. 1329 * 1330 * @return Array of strings naming the private files. 1331 * 1332 * @see #openFileInput 1333 * @see #openFileOutput 1334 * @see #deleteFile 1335 */ fileList()1336 public abstract String[] fileList(); 1337 1338 /** 1339 * Retrieve, creating if needed, a new directory in which the application 1340 * can place its own custom data files. You can use the returned File 1341 * object to create and access files in this directory. Note that files 1342 * created through a File object will only be accessible by your own 1343 * application; you can only set the mode of the entire directory, not 1344 * of individual files. 1345 * <p> 1346 * The returned path may change over time if the calling app is moved to an 1347 * adopted storage device, so only relative paths should be persisted. 1348 * <p> 1349 * Apps require no extra permissions to read or write to the returned path, 1350 * since this path lives in their private storage. 1351 * 1352 * @param name Name of the directory to retrieve. This is a directory 1353 * that is created as part of your application data. 1354 * @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the 1355 * default operation. 1356 * 1357 * @return A {@link File} object for the requested directory. The directory 1358 * will have been created if it does not already exist. 1359 * 1360 * @see #openFileOutput(String, int) 1361 */ getDir(String name, int mode)1362 public abstract File getDir(String name, int mode); 1363 1364 /** 1365 * Open a new private SQLiteDatabase associated with this Context's 1366 * application package. Create the database file if it doesn't exist. 1367 * 1368 * @param name The name (unique in the application package) of the database. 1369 * @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the 1370 * default operation. Use 1371 * {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead 1372 * logging by default. Use {@link #MODE_NO_LOCALIZED_COLLATORS} 1373 * to disable localized collators. 1374 * @param factory An optional factory class that is called to instantiate a 1375 * cursor when query is called. 1376 * @return The contents of a newly created database with the given name. 1377 * @throws android.database.sqlite.SQLiteException if the database file 1378 * could not be opened. 1379 * @see #MODE_PRIVATE 1380 * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING 1381 * @see #MODE_NO_LOCALIZED_COLLATORS 1382 * @see #deleteDatabase 1383 */ openOrCreateDatabase(String name, int mode, CursorFactory factory)1384 public abstract SQLiteDatabase openOrCreateDatabase(String name, 1385 int mode, CursorFactory factory); 1386 1387 /** 1388 * Open a new private SQLiteDatabase associated with this Context's 1389 * application package. Creates the database file if it doesn't exist. 1390 * <p> 1391 * Accepts input param: a concrete instance of {@link DatabaseErrorHandler} 1392 * to be used to handle corruption when sqlite reports database corruption. 1393 * </p> 1394 * 1395 * @param name The name (unique in the application package) of the database. 1396 * @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the 1397 * default operation. Use 1398 * {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead 1399 * logging by default. Use {@link #MODE_NO_LOCALIZED_COLLATORS} 1400 * to disable localized collators. 1401 * @param factory An optional factory class that is called to instantiate a 1402 * cursor when query is called. 1403 * @param errorHandler the {@link DatabaseErrorHandler} to be used when 1404 * sqlite reports database corruption. if null, 1405 * {@link android.database.DefaultDatabaseErrorHandler} is 1406 * assumed. 1407 * @return The contents of a newly created database with the given name. 1408 * @throws android.database.sqlite.SQLiteException if the database file 1409 * could not be opened. 1410 * @see #MODE_PRIVATE 1411 * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING 1412 * @see #MODE_NO_LOCALIZED_COLLATORS 1413 * @see #deleteDatabase 1414 */ openOrCreateDatabase(String name, int mode, CursorFactory factory, @Nullable DatabaseErrorHandler errorHandler)1415 public abstract SQLiteDatabase openOrCreateDatabase(String name, 1416 int mode, CursorFactory factory, 1417 @Nullable DatabaseErrorHandler errorHandler); 1418 1419 /** 1420 * Move an existing database file from the given source storage context to 1421 * this context. This is typically used to migrate data between storage 1422 * locations after an upgrade, such as migrating to device protected 1423 * storage. 1424 * <p> 1425 * The database must be closed before being moved. 1426 * 1427 * @param sourceContext The source context which contains the existing 1428 * database to move. 1429 * @param name The name of the database file. 1430 * @return {@code true} if the move was successful or if the database didn't 1431 * exist in the source context, otherwise {@code false}. 1432 * @see #createDeviceProtectedStorageContext() 1433 */ moveDatabaseFrom(Context sourceContext, String name)1434 public abstract boolean moveDatabaseFrom(Context sourceContext, String name); 1435 1436 /** @removed */ 1437 @Deprecated migrateDatabaseFrom(Context sourceContext, String name)1438 public boolean migrateDatabaseFrom(Context sourceContext, String name) { 1439 return moveDatabaseFrom(sourceContext, name); 1440 } 1441 1442 /** 1443 * Delete an existing private SQLiteDatabase associated with this Context's 1444 * application package. 1445 * 1446 * @param name The name (unique in the application package) of the 1447 * database. 1448 * 1449 * @return {@code true} if the database was successfully deleted; else {@code false}. 1450 * 1451 * @see #openOrCreateDatabase 1452 */ deleteDatabase(String name)1453 public abstract boolean deleteDatabase(String name); 1454 1455 /** 1456 * Returns the absolute path on the filesystem where a database created with 1457 * {@link #openOrCreateDatabase} is stored. 1458 * <p> 1459 * The returned path may change over time if the calling app is moved to an 1460 * adopted storage device, so only relative paths should be persisted. 1461 * 1462 * @param name The name of the database for which you would like to get 1463 * its path. 1464 * 1465 * @return An absolute path to the given database. 1466 * 1467 * @see #openOrCreateDatabase 1468 */ getDatabasePath(String name)1469 public abstract File getDatabasePath(String name); 1470 1471 /** 1472 * Returns an array of strings naming the private databases associated with 1473 * this Context's application package. 1474 * 1475 * @return Array of strings naming the private databases. 1476 * 1477 * @see #openOrCreateDatabase 1478 * @see #deleteDatabase 1479 */ databaseList()1480 public abstract String[] databaseList(); 1481 1482 /** 1483 * @deprecated Use {@link android.app.WallpaperManager#getDrawable 1484 * WallpaperManager.get()} instead. 1485 */ 1486 @Deprecated getWallpaper()1487 public abstract Drawable getWallpaper(); 1488 1489 /** 1490 * @deprecated Use {@link android.app.WallpaperManager#peekDrawable 1491 * WallpaperManager.peek()} instead. 1492 */ 1493 @Deprecated peekWallpaper()1494 public abstract Drawable peekWallpaper(); 1495 1496 /** 1497 * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth() 1498 * WallpaperManager.getDesiredMinimumWidth()} instead. 1499 */ 1500 @Deprecated getWallpaperDesiredMinimumWidth()1501 public abstract int getWallpaperDesiredMinimumWidth(); 1502 1503 /** 1504 * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight() 1505 * WallpaperManager.getDesiredMinimumHeight()} instead. 1506 */ 1507 @Deprecated getWallpaperDesiredMinimumHeight()1508 public abstract int getWallpaperDesiredMinimumHeight(); 1509 1510 /** 1511 * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap) 1512 * WallpaperManager.set()} instead. 1513 * <p>This method requires the caller to hold the permission 1514 * {@link android.Manifest.permission#SET_WALLPAPER}. 1515 */ 1516 @Deprecated setWallpaper(Bitmap bitmap)1517 public abstract void setWallpaper(Bitmap bitmap) throws IOException; 1518 1519 /** 1520 * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream) 1521 * WallpaperManager.set()} instead. 1522 * <p>This method requires the caller to hold the permission 1523 * {@link android.Manifest.permission#SET_WALLPAPER}. 1524 */ 1525 @Deprecated setWallpaper(InputStream data)1526 public abstract void setWallpaper(InputStream data) throws IOException; 1527 1528 /** 1529 * @deprecated Use {@link android.app.WallpaperManager#clear 1530 * WallpaperManager.clear()} instead. 1531 * <p>This method requires the caller to hold the permission 1532 * {@link android.Manifest.permission#SET_WALLPAPER}. 1533 */ 1534 @Deprecated clearWallpaper()1535 public abstract void clearWallpaper() throws IOException; 1536 1537 /** 1538 * Same as {@link #startActivity(Intent, Bundle)} with no options 1539 * specified. 1540 * 1541 * @param intent The description of the activity to start. 1542 * 1543 * @throws ActivityNotFoundException 1544 *` 1545 * @see #startActivity(Intent, Bundle) 1546 * @see PackageManager#resolveActivity 1547 */ startActivity(@equiresPermission Intent intent)1548 public abstract void startActivity(@RequiresPermission Intent intent); 1549 1550 /** 1551 * Version of {@link #startActivity(Intent)} that allows you to specify the 1552 * user the activity will be started for. This is not available to applications 1553 * that are not pre-installed on the system image. Using it requires holding 1554 * the INTERACT_ACROSS_USERS_FULL permission. 1555 * @param intent The description of the activity to start. 1556 * @param user The UserHandle of the user to start this activity for. 1557 * @throws ActivityNotFoundException 1558 * @hide 1559 */ startActivityAsUser(@equiresPermission Intent intent, UserHandle user)1560 public void startActivityAsUser(@RequiresPermission Intent intent, UserHandle user) { 1561 throw new RuntimeException("Not implemented. Must override in a subclass."); 1562 } 1563 1564 /** 1565 * Launch a new activity. You will not receive any information about when 1566 * the activity exits. 1567 * 1568 * <p>Note that if this method is being called from outside of an 1569 * {@link android.app.Activity} Context, then the Intent must include 1570 * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag. This is because, 1571 * without being started from an existing Activity, there is no existing 1572 * task in which to place the new activity and thus it needs to be placed 1573 * in its own separate task. 1574 * 1575 * <p>This method throws {@link ActivityNotFoundException} 1576 * if there was no Activity found to run the given Intent. 1577 * 1578 * @param intent The description of the activity to start. 1579 * @param options Additional options for how the Activity should be started. 1580 * May be null if there are no options. See {@link android.app.ActivityOptions} 1581 * for how to build the Bundle supplied here; there are no supported definitions 1582 * for building it manually. 1583 * 1584 * @throws ActivityNotFoundException 1585 * 1586 * @see #startActivity(Intent) 1587 * @see PackageManager#resolveActivity 1588 */ startActivity(@equiresPermission Intent intent, @Nullable Bundle options)1589 public abstract void startActivity(@RequiresPermission Intent intent, 1590 @Nullable Bundle options); 1591 1592 /** 1593 * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the 1594 * user the activity will be started for. This is not available to applications 1595 * that are not pre-installed on the system image. Using it requires holding 1596 * the INTERACT_ACROSS_USERS_FULL permission. 1597 * @param intent The description of the activity to start. 1598 * @param options Additional options for how the Activity should be started. 1599 * May be null if there are no options. See {@link android.app.ActivityOptions} 1600 * for how to build the Bundle supplied here; there are no supported definitions 1601 * for building it manually. 1602 * @param userId The UserHandle of the user to start this activity for. 1603 * @throws ActivityNotFoundException 1604 * @hide 1605 */ startActivityAsUser(@equiresPermission Intent intent, @Nullable Bundle options, UserHandle userId)1606 public void startActivityAsUser(@RequiresPermission Intent intent, @Nullable Bundle options, 1607 UserHandle userId) { 1608 throw new RuntimeException("Not implemented. Must override in a subclass."); 1609 } 1610 1611 /** 1612 * Version of {@link #startActivity(Intent, Bundle)} that returns a result to the caller. This 1613 * is only supported for Views and Fragments. 1614 * @param who The identifier for the calling element that will receive the result. 1615 * @param intent The intent to start. 1616 * @param requestCode The code that will be returned with onActivityResult() identifying this 1617 * request. 1618 * @param options Additional options for how the Activity should be started. 1619 * May be null if there are no options. See {@link android.app.ActivityOptions} 1620 * for how to build the Bundle supplied here; there are no supported definitions 1621 * for building it manually. 1622 * @hide 1623 */ startActivityForResult( @onNull String who, Intent intent, int requestCode, @Nullable Bundle options)1624 public void startActivityForResult( 1625 @NonNull String who, Intent intent, int requestCode, @Nullable Bundle options) { 1626 throw new RuntimeException("This method is only implemented for Activity-based Contexts. " 1627 + "Check canStartActivityForResult() before calling."); 1628 } 1629 1630 /** 1631 * Identifies whether this Context instance will be able to process calls to 1632 * {@link #startActivityForResult(String, Intent, int, Bundle)}. 1633 * @hide 1634 */ canStartActivityForResult()1635 public boolean canStartActivityForResult() { 1636 return false; 1637 } 1638 1639 /** 1640 * Same as {@link #startActivities(Intent[], Bundle)} with no options 1641 * specified. 1642 * 1643 * @param intents An array of Intents to be started. 1644 * 1645 * @throws ActivityNotFoundException 1646 * 1647 * @see #startActivities(Intent[], Bundle) 1648 * @see PackageManager#resolveActivity 1649 */ startActivities(@equiresPermission Intent[] intents)1650 public abstract void startActivities(@RequiresPermission Intent[] intents); 1651 1652 /** 1653 * Launch multiple new activities. This is generally the same as calling 1654 * {@link #startActivity(Intent)} for the first Intent in the array, 1655 * that activity during its creation calling {@link #startActivity(Intent)} 1656 * for the second entry, etc. Note that unlike that approach, generally 1657 * none of the activities except the last in the array will be created 1658 * at this point, but rather will be created when the user first visits 1659 * them (due to pressing back from the activity on top). 1660 * 1661 * <p>This method throws {@link ActivityNotFoundException} 1662 * if there was no Activity found for <em>any</em> given Intent. In this 1663 * case the state of the activity stack is undefined (some Intents in the 1664 * list may be on it, some not), so you probably want to avoid such situations. 1665 * 1666 * @param intents An array of Intents to be started. 1667 * @param options Additional options for how the Activity should be started. 1668 * See {@link android.content.Context#startActivity(Intent, Bundle) 1669 * Context.startActivity(Intent, Bundle)} for more details. 1670 * 1671 * @throws ActivityNotFoundException 1672 * 1673 * @see #startActivities(Intent[]) 1674 * @see PackageManager#resolveActivity 1675 */ startActivities(@equiresPermission Intent[] intents, Bundle options)1676 public abstract void startActivities(@RequiresPermission Intent[] intents, Bundle options); 1677 1678 /** 1679 * @hide 1680 * Launch multiple new activities. This is generally the same as calling 1681 * {@link #startActivity(Intent)} for the first Intent in the array, 1682 * that activity during its creation calling {@link #startActivity(Intent)} 1683 * for the second entry, etc. Note that unlike that approach, generally 1684 * none of the activities except the last in the array will be created 1685 * at this point, but rather will be created when the user first visits 1686 * them (due to pressing back from the activity on top). 1687 * 1688 * <p>This method throws {@link ActivityNotFoundException} 1689 * if there was no Activity found for <em>any</em> given Intent. In this 1690 * case the state of the activity stack is undefined (some Intents in the 1691 * list may be on it, some not), so you probably want to avoid such situations. 1692 * 1693 * @param intents An array of Intents to be started. 1694 * @param options Additional options for how the Activity should be started. 1695 * @param userHandle The user for whom to launch the activities 1696 * See {@link android.content.Context#startActivity(Intent, Bundle) 1697 * Context.startActivity(Intent, Bundle)} for more details. 1698 * 1699 * @throws ActivityNotFoundException 1700 * 1701 * @see #startActivities(Intent[]) 1702 * @see PackageManager#resolveActivity 1703 */ startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle)1704 public void startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) { 1705 throw new RuntimeException("Not implemented. Must override in a subclass."); 1706 } 1707 1708 /** 1709 * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)} 1710 * with no options specified. 1711 * 1712 * @param intent The IntentSender to launch. 1713 * @param fillInIntent If non-null, this will be provided as the 1714 * intent parameter to {@link IntentSender#sendIntent}. 1715 * @param flagsMask Intent flags in the original IntentSender that you 1716 * would like to change. 1717 * @param flagsValues Desired values for any bits set in 1718 * <var>flagsMask</var> 1719 * @param extraFlags Always set to 0. 1720 * 1721 * @see #startActivity(Intent) 1722 * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle) 1723 */ startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)1724 public abstract void startIntentSender(IntentSender intent, 1725 Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 1726 throws IntentSender.SendIntentException; 1727 1728 /** 1729 * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender 1730 * to start. If the IntentSender is for an activity, that activity will be started 1731 * as if you had called the regular {@link #startActivity(Intent)} 1732 * here; otherwise, its associated action will be executed (such as 1733 * sending a broadcast) as if you had called 1734 * {@link IntentSender#sendIntent IntentSender.sendIntent} on it. 1735 * 1736 * @param intent The IntentSender to launch. 1737 * @param fillInIntent If non-null, this will be provided as the 1738 * intent parameter to {@link IntentSender#sendIntent}. 1739 * @param flagsMask Intent flags in the original IntentSender that you 1740 * would like to change. 1741 * @param flagsValues Desired values for any bits set in 1742 * <var>flagsMask</var> 1743 * @param extraFlags Always set to 0. 1744 * @param options Additional options for how the Activity should be started. 1745 * See {@link android.content.Context#startActivity(Intent, Bundle) 1746 * Context.startActivity(Intent, Bundle)} for more details. If options 1747 * have also been supplied by the IntentSender, options given here will 1748 * override any that conflict with those given by the IntentSender. 1749 * 1750 * @see #startActivity(Intent, Bundle) 1751 * @see #startIntentSender(IntentSender, Intent, int, int, int) 1752 */ startIntentSender(IntentSender intent, @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)1753 public abstract void startIntentSender(IntentSender intent, 1754 @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, 1755 Bundle options) throws IntentSender.SendIntentException; 1756 1757 /** 1758 * Broadcast the given intent to all interested BroadcastReceivers. This 1759 * call is asynchronous; it returns immediately, and you will continue 1760 * executing while the receivers are run. No results are propagated from 1761 * receivers and receivers can not abort the broadcast. If you want 1762 * to allow receivers to propagate results or abort the broadcast, you must 1763 * send an ordered broadcast using 1764 * {@link #sendOrderedBroadcast(Intent, String)}. 1765 * 1766 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1767 * 1768 * @param intent The Intent to broadcast; all receivers matching this 1769 * Intent will receive the broadcast. 1770 * 1771 * @see android.content.BroadcastReceiver 1772 * @see #registerReceiver 1773 * @see #sendBroadcast(Intent, String) 1774 * @see #sendOrderedBroadcast(Intent, String) 1775 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 1776 */ sendBroadcast(@equiresPermission Intent intent)1777 public abstract void sendBroadcast(@RequiresPermission Intent intent); 1778 1779 /** 1780 * Broadcast the given intent to all interested BroadcastReceivers, allowing 1781 * an optional required permission to be enforced. This 1782 * call is asynchronous; it returns immediately, and you will continue 1783 * executing while the receivers are run. No results are propagated from 1784 * receivers and receivers can not abort the broadcast. If you want 1785 * to allow receivers to propagate results or abort the broadcast, you must 1786 * send an ordered broadcast using 1787 * {@link #sendOrderedBroadcast(Intent, String)}. 1788 * 1789 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1790 * 1791 * @param intent The Intent to broadcast; all receivers matching this 1792 * Intent will receive the broadcast. 1793 * @param receiverPermission (optional) String naming a permission that 1794 * a receiver must hold in order to receive your broadcast. 1795 * If null, no permission is required. 1796 * 1797 * @see android.content.BroadcastReceiver 1798 * @see #registerReceiver 1799 * @see #sendBroadcast(Intent) 1800 * @see #sendOrderedBroadcast(Intent, String) 1801 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 1802 */ sendBroadcast(@equiresPermission Intent intent, @Nullable String receiverPermission)1803 public abstract void sendBroadcast(@RequiresPermission Intent intent, 1804 @Nullable String receiverPermission); 1805 1806 1807 /** 1808 * Broadcast the given intent to all interested BroadcastReceivers, allowing 1809 * an array of required permissions to be enforced. This call is asynchronous; it returns 1810 * immediately, and you will continue executing while the receivers are run. No results are 1811 * propagated from receivers and receivers can not abort the broadcast. If you want to allow 1812 * receivers to propagate results or abort the broadcast, you must send an ordered broadcast 1813 * using {@link #sendOrderedBroadcast(Intent, String)}. 1814 * 1815 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1816 * 1817 * @param intent The Intent to broadcast; all receivers matching this 1818 * Intent will receive the broadcast. 1819 * @param receiverPermissions Array of names of permissions that a receiver must hold 1820 * in order to receive your broadcast. 1821 * If null or empty, no permissions are required. 1822 * 1823 * @see android.content.BroadcastReceiver 1824 * @see #registerReceiver 1825 * @see #sendBroadcast(Intent) 1826 * @see #sendOrderedBroadcast(Intent, String) 1827 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 1828 * @hide 1829 */ sendBroadcastMultiplePermissions(Intent intent, String[] receiverPermissions)1830 public abstract void sendBroadcastMultiplePermissions(Intent intent, 1831 String[] receiverPermissions); 1832 1833 /** 1834 * Broadcast the given intent to all interested BroadcastReceivers, allowing 1835 * an optional required permission to be enforced. This 1836 * call is asynchronous; it returns immediately, and you will continue 1837 * executing while the receivers are run. No results are propagated from 1838 * receivers and receivers can not abort the broadcast. If you want 1839 * to allow receivers to propagate results or abort the broadcast, you must 1840 * send an ordered broadcast using 1841 * {@link #sendOrderedBroadcast(Intent, String)}. 1842 * 1843 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1844 * 1845 * @param intent The Intent to broadcast; all receivers matching this 1846 * Intent will receive the broadcast. 1847 * @param receiverPermission (optional) String naming a permission that 1848 * a receiver must hold in order to receive your broadcast. 1849 * If null, no permission is required. 1850 * @param options (optional) Additional sending options, generated from a 1851 * {@link android.app.BroadcastOptions}. 1852 * 1853 * @see android.content.BroadcastReceiver 1854 * @see #registerReceiver 1855 * @see #sendBroadcast(Intent) 1856 * @see #sendOrderedBroadcast(Intent, String) 1857 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 1858 * @hide 1859 */ 1860 @SystemApi sendBroadcast(Intent intent, @Nullable String receiverPermission, @Nullable Bundle options)1861 public abstract void sendBroadcast(Intent intent, 1862 @Nullable String receiverPermission, 1863 @Nullable Bundle options); 1864 1865 /** 1866 * Like {@link #sendBroadcast(Intent, String)}, but also allows specification 1867 * of an associated app op as per {@link android.app.AppOpsManager}. 1868 * @hide 1869 */ sendBroadcast(Intent intent, String receiverPermission, int appOp)1870 public abstract void sendBroadcast(Intent intent, 1871 String receiverPermission, int appOp); 1872 1873 /** 1874 * Broadcast the given intent to all interested BroadcastReceivers, delivering 1875 * them one at a time to allow more preferred receivers to consume the 1876 * broadcast before it is delivered to less preferred receivers. This 1877 * call is asynchronous; it returns immediately, and you will continue 1878 * executing while the receivers are run. 1879 * 1880 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1881 * 1882 * @param intent The Intent to broadcast; all receivers matching this 1883 * Intent will receive the broadcast. 1884 * @param receiverPermission (optional) String naming a permissions that 1885 * a receiver must hold in order to receive your broadcast. 1886 * If null, no permission is required. 1887 * 1888 * @see android.content.BroadcastReceiver 1889 * @see #registerReceiver 1890 * @see #sendBroadcast(Intent) 1891 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 1892 */ sendOrderedBroadcast(@equiresPermission Intent intent, @Nullable String receiverPermission)1893 public abstract void sendOrderedBroadcast(@RequiresPermission Intent intent, 1894 @Nullable String receiverPermission); 1895 1896 /** 1897 * Version of {@link #sendBroadcast(Intent)} that allows you to 1898 * receive data back from the broadcast. This is accomplished by 1899 * supplying your own BroadcastReceiver when calling, which will be 1900 * treated as a final receiver at the end of the broadcast -- its 1901 * {@link BroadcastReceiver#onReceive} method will be called with 1902 * the result values collected from the other receivers. The broadcast will 1903 * be serialized in the same way as calling 1904 * {@link #sendOrderedBroadcast(Intent, String)}. 1905 * 1906 * <p>Like {@link #sendBroadcast(Intent)}, this method is 1907 * asynchronous; it will return before 1908 * resultReceiver.onReceive() is called. 1909 * 1910 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1911 * 1912 * @param intent The Intent to broadcast; all receivers matching this 1913 * Intent will receive the broadcast. 1914 * @param receiverPermission String naming a permissions that 1915 * a receiver must hold in order to receive your broadcast. 1916 * If null, no permission is required. 1917 * @param resultReceiver Your own BroadcastReceiver to treat as the final 1918 * receiver of the broadcast. 1919 * @param scheduler A custom Handler with which to schedule the 1920 * resultReceiver callback; if null it will be 1921 * scheduled in the Context's main thread. 1922 * @param initialCode An initial value for the result code. Often 1923 * Activity.RESULT_OK. 1924 * @param initialData An initial value for the result data. Often 1925 * null. 1926 * @param initialExtras An initial value for the result extras. Often 1927 * null. 1928 * 1929 * @see #sendBroadcast(Intent) 1930 * @see #sendBroadcast(Intent, String) 1931 * @see #sendOrderedBroadcast(Intent, String) 1932 * @see android.content.BroadcastReceiver 1933 * @see #registerReceiver 1934 * @see android.app.Activity#RESULT_OK 1935 */ sendOrderedBroadcast(@equiresPermission @onNull Intent intent, @Nullable String receiverPermission, @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)1936 public abstract void sendOrderedBroadcast(@RequiresPermission @NonNull Intent intent, 1937 @Nullable String receiverPermission, @Nullable BroadcastReceiver resultReceiver, 1938 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 1939 @Nullable Bundle initialExtras); 1940 1941 /** 1942 * Version of {@link #sendBroadcast(Intent)} that allows you to 1943 * receive data back from the broadcast. This is accomplished by 1944 * supplying your own BroadcastReceiver when calling, which will be 1945 * treated as a final receiver at the end of the broadcast -- its 1946 * {@link BroadcastReceiver#onReceive} method will be called with 1947 * the result values collected from the other receivers. The broadcast will 1948 * be serialized in the same way as calling 1949 * {@link #sendOrderedBroadcast(Intent, String)}. 1950 * 1951 * <p>Like {@link #sendBroadcast(Intent)}, this method is 1952 * asynchronous; it will return before 1953 * resultReceiver.onReceive() is called. 1954 * 1955 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1956 * 1957 * 1958 * @param intent The Intent to broadcast; all receivers matching this 1959 * Intent will receive the broadcast. 1960 * @param receiverPermission String naming a permissions that 1961 * a receiver must hold in order to receive your broadcast. 1962 * If null, no permission is required. 1963 * @param options (optional) Additional sending options, generated from a 1964 * {@link android.app.BroadcastOptions}. 1965 * @param resultReceiver Your own BroadcastReceiver to treat as the final 1966 * receiver of the broadcast. 1967 * @param scheduler A custom Handler with which to schedule the 1968 * resultReceiver callback; if null it will be 1969 * scheduled in the Context's main thread. 1970 * @param initialCode An initial value for the result code. Often 1971 * Activity.RESULT_OK. 1972 * @param initialData An initial value for the result data. Often 1973 * null. 1974 * @param initialExtras An initial value for the result extras. Often 1975 * null. 1976 * @see #sendBroadcast(Intent) 1977 * @see #sendBroadcast(Intent, String) 1978 * @see #sendOrderedBroadcast(Intent, String) 1979 * @see android.content.BroadcastReceiver 1980 * @see #registerReceiver 1981 * @see android.app.Activity#RESULT_OK 1982 * @hide 1983 */ 1984 @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)1985 public abstract void sendOrderedBroadcast(@NonNull Intent intent, 1986 @Nullable String receiverPermission, @Nullable Bundle options, 1987 @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, 1988 int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras); 1989 1990 /** 1991 * Like {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, 1992 * int, String, android.os.Bundle)}, but also allows specification 1993 * of an associated app op as per {@link android.app.AppOpsManager}. 1994 * @hide 1995 */ sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)1996 public abstract void sendOrderedBroadcast(Intent intent, 1997 String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 1998 Handler scheduler, int initialCode, String initialData, 1999 Bundle initialExtras); 2000 2001 /** 2002 * Version of {@link #sendBroadcast(Intent)} that allows you to specify the 2003 * user the broadcast will be sent to. This is not available to applications 2004 * that are not pre-installed on the system image. Using it requires holding 2005 * the INTERACT_ACROSS_USERS permission. 2006 * @param intent The intent to broadcast 2007 * @param user UserHandle to send the intent to. 2008 * @see #sendBroadcast(Intent) 2009 */ sendBroadcastAsUser(@equiresPermission Intent intent, UserHandle user)2010 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2011 UserHandle user); 2012 2013 /** 2014 * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the 2015 * user the broadcast will be sent to. This is not available to applications 2016 * that are not pre-installed on the system image. Using it requires holding 2017 * the INTERACT_ACROSS_USERS permission. 2018 * 2019 * @param intent The Intent to broadcast; all receivers matching this 2020 * Intent will receive the broadcast. 2021 * @param user UserHandle to send the intent to. 2022 * @param receiverPermission (optional) String naming a permission that 2023 * a receiver must hold in order to receive your broadcast. 2024 * If null, no permission is required. 2025 * 2026 * @see #sendBroadcast(Intent, String) 2027 */ sendBroadcastAsUser(@equiresPermission Intent intent, UserHandle user, @Nullable String receiverPermission)2028 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2029 UserHandle user, @Nullable String receiverPermission); 2030 2031 2032 /** 2033 * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the 2034 * user the broadcast will be sent to. This is not available to applications 2035 * that are not pre-installed on the system image. Using it requires holding 2036 * the INTERACT_ACROSS_USERS permission. 2037 * 2038 * @param intent The Intent to broadcast; all receivers matching this 2039 * Intent will receive the broadcast. 2040 * @param user UserHandle to send the intent to. 2041 * @param receiverPermission (optional) String naming a permission that 2042 * a receiver must hold in order to receive your broadcast. 2043 * If null, no permission is required. 2044 * @param appOp The app op associated with the broadcast. 2045 * 2046 * @see #sendBroadcast(Intent, String) 2047 * 2048 * @hide 2049 */ sendBroadcastAsUser(@equiresPermission Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp)2050 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2051 UserHandle user, @Nullable String receiverPermission, int appOp); 2052 2053 /** 2054 * Version of 2055 * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)} 2056 * that allows you to specify the 2057 * user the broadcast will be sent to. This is not available to applications 2058 * that are not pre-installed on the system image. Using it requires holding 2059 * the INTERACT_ACROSS_USERS permission. 2060 * 2061 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2062 * 2063 * @param intent The Intent to broadcast; all receivers matching this 2064 * Intent will receive the broadcast. 2065 * @param user UserHandle to send the intent to. 2066 * @param receiverPermission String naming a permissions that 2067 * a receiver must hold in order to receive your broadcast. 2068 * If null, no permission is required. 2069 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2070 * receiver of the broadcast. 2071 * @param scheduler A custom Handler with which to schedule the 2072 * resultReceiver callback; if null it will be 2073 * scheduled in the Context's main thread. 2074 * @param initialCode An initial value for the result code. Often 2075 * Activity.RESULT_OK. 2076 * @param initialData An initial value for the result data. Often 2077 * null. 2078 * @param initialExtras An initial value for the result extras. Often 2079 * null. 2080 * 2081 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2082 */ sendOrderedBroadcastAsUser(@equiresPermission Intent intent, UserHandle user, @Nullable String receiverPermission, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)2083 public abstract void sendOrderedBroadcastAsUser(@RequiresPermission Intent intent, 2084 UserHandle user, @Nullable String receiverPermission, BroadcastReceiver resultReceiver, 2085 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2086 @Nullable Bundle initialExtras); 2087 2088 /** 2089 * Similar to above but takes an appOp as well, to enforce restrictions. 2090 * @see #sendOrderedBroadcastAsUser(Intent, UserHandle, String, 2091 * BroadcastReceiver, Handler, int, String, Bundle) 2092 * @hide 2093 */ sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)2094 public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 2095 @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 2096 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2097 @Nullable Bundle initialExtras); 2098 2099 /** 2100 * Similar to above but takes an appOp as well, to enforce restrictions, and an options Bundle. 2101 * @see #sendOrderedBroadcastAsUser(Intent, UserHandle, String, 2102 * BroadcastReceiver, Handler, int, String, Bundle) 2103 * @hide 2104 */ 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)2105 public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 2106 @Nullable String receiverPermission, int appOp, @Nullable Bundle options, 2107 BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, 2108 @Nullable String initialData, @Nullable Bundle initialExtras); 2109 2110 /** 2111 * <p>Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the 2112 * Intent you are sending stays around after the broadcast is complete, 2113 * so that others can quickly retrieve that data through the return 2114 * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}. In 2115 * all other ways, this behaves the same as 2116 * {@link #sendBroadcast(Intent)}. 2117 * 2118 * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY} 2119 * permission in order to use this API. If you do not hold that 2120 * permission, {@link SecurityException} will be thrown. 2121 * 2122 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2123 * can access them), no protection (anyone can modify them), and many other problems. 2124 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2125 * has changed, with another mechanism for apps to retrieve the current value whenever 2126 * desired. 2127 * 2128 * @param intent The Intent to broadcast; all receivers matching this 2129 * Intent will receive the broadcast, and the Intent will be held to 2130 * be re-broadcast to future receivers. 2131 * 2132 * @see #sendBroadcast(Intent) 2133 * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) 2134 */ 2135 @Deprecated sendStickyBroadcast(@equiresPermission Intent intent)2136 public abstract void sendStickyBroadcast(@RequiresPermission Intent intent); 2137 2138 /** 2139 * <p>Version of {@link #sendStickyBroadcast} that allows you to 2140 * receive data back from the broadcast. This is accomplished by 2141 * supplying your own BroadcastReceiver when calling, which will be 2142 * treated as a final receiver at the end of the broadcast -- its 2143 * {@link BroadcastReceiver#onReceive} method will be called with 2144 * the result values collected from the other receivers. The broadcast will 2145 * be serialized in the same way as calling 2146 * {@link #sendOrderedBroadcast(Intent, String)}. 2147 * 2148 * <p>Like {@link #sendBroadcast(Intent)}, this method is 2149 * asynchronous; it will return before 2150 * resultReceiver.onReceive() is called. Note that the sticky data 2151 * stored is only the data you initially supply to the broadcast, not 2152 * the result of any changes made by the receivers. 2153 * 2154 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2155 * 2156 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2157 * can access them), no protection (anyone can modify them), and many other problems. 2158 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2159 * has changed, with another mechanism for apps to retrieve the current value whenever 2160 * desired. 2161 * 2162 * @param intent The Intent to broadcast; all receivers matching this 2163 * Intent will receive the broadcast. 2164 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2165 * receiver of the broadcast. 2166 * @param scheduler A custom Handler with which to schedule the 2167 * resultReceiver callback; if null it will be 2168 * scheduled in the Context's main thread. 2169 * @param initialCode An initial value for the result code. Often 2170 * Activity.RESULT_OK. 2171 * @param initialData An initial value for the result data. Often 2172 * null. 2173 * @param initialExtras An initial value for the result extras. Often 2174 * null. 2175 * 2176 * @see #sendBroadcast(Intent) 2177 * @see #sendBroadcast(Intent, String) 2178 * @see #sendOrderedBroadcast(Intent, String) 2179 * @see #sendStickyBroadcast(Intent) 2180 * @see android.content.BroadcastReceiver 2181 * @see #registerReceiver 2182 * @see android.app.Activity#RESULT_OK 2183 */ 2184 @Deprecated sendStickyOrderedBroadcast(@equiresPermission Intent intent, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)2185 public abstract void sendStickyOrderedBroadcast(@RequiresPermission Intent intent, 2186 BroadcastReceiver resultReceiver, 2187 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2188 @Nullable Bundle initialExtras); 2189 2190 /** 2191 * <p>Remove the data previously sent with {@link #sendStickyBroadcast}, 2192 * so that it is as if the sticky broadcast had never happened. 2193 * 2194 * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY} 2195 * permission in order to use this API. If you do not hold that 2196 * permission, {@link SecurityException} will be thrown. 2197 * 2198 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2199 * can access them), no protection (anyone can modify them), and many other problems. 2200 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2201 * has changed, with another mechanism for apps to retrieve the current value whenever 2202 * desired. 2203 * 2204 * @param intent The Intent that was previously broadcast. 2205 * 2206 * @see #sendStickyBroadcast 2207 */ 2208 @Deprecated removeStickyBroadcast(@equiresPermission Intent intent)2209 public abstract void removeStickyBroadcast(@RequiresPermission Intent intent); 2210 2211 /** 2212 * <p>Version of {@link #sendStickyBroadcast(Intent)} that allows you to specify the 2213 * user the broadcast will be sent to. This is not available to applications 2214 * that are not pre-installed on the system image. Using it requires holding 2215 * the INTERACT_ACROSS_USERS permission. 2216 * 2217 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2218 * can access them), no protection (anyone can modify them), and many other problems. 2219 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2220 * has changed, with another mechanism for apps to retrieve the current value whenever 2221 * desired. 2222 * 2223 * @param intent The Intent to broadcast; all receivers matching this 2224 * Intent will receive the broadcast, and the Intent will be held to 2225 * be re-broadcast to future receivers. 2226 * @param user UserHandle to send the intent to. 2227 * 2228 * @see #sendBroadcast(Intent) 2229 */ 2230 @Deprecated sendStickyBroadcastAsUser(@equiresPermission Intent intent, UserHandle user)2231 public abstract void sendStickyBroadcastAsUser(@RequiresPermission Intent intent, 2232 UserHandle user); 2233 2234 /** 2235 * @hide 2236 * This is just here for sending CONNECTIVITY_ACTION. 2237 */ 2238 @Deprecated sendStickyBroadcastAsUser(@equiresPermission Intent intent, UserHandle user, Bundle options)2239 public abstract void sendStickyBroadcastAsUser(@RequiresPermission Intent intent, 2240 UserHandle user, Bundle options); 2241 2242 /** 2243 * <p>Version of 2244 * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)} 2245 * that allows you to specify the 2246 * user the broadcast will be sent to. This is not available to applications 2247 * that are not pre-installed on the system image. Using it requires holding 2248 * the INTERACT_ACROSS_USERS permission. 2249 * 2250 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2251 * 2252 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2253 * can access them), no protection (anyone can modify them), and many other problems. 2254 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2255 * has changed, with another mechanism for apps to retrieve the current value whenever 2256 * desired. 2257 * 2258 * @param intent The Intent to broadcast; all receivers matching this 2259 * Intent will receive the broadcast. 2260 * @param user UserHandle to send the intent to. 2261 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2262 * receiver of the broadcast. 2263 * @param scheduler A custom Handler with which to schedule the 2264 * resultReceiver callback; if null it will be 2265 * scheduled in the Context's main thread. 2266 * @param initialCode An initial value for the result code. Often 2267 * Activity.RESULT_OK. 2268 * @param initialData An initial value for the result data. Often 2269 * null. 2270 * @param initialExtras An initial value for the result extras. Often 2271 * null. 2272 * 2273 * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) 2274 */ 2275 @Deprecated sendStickyOrderedBroadcastAsUser(@equiresPermission Intent intent, UserHandle user, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras)2276 public abstract void sendStickyOrderedBroadcastAsUser(@RequiresPermission Intent intent, 2277 UserHandle user, BroadcastReceiver resultReceiver, 2278 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2279 @Nullable Bundle initialExtras); 2280 2281 /** 2282 * <p>Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the 2283 * user the broadcast will be sent to. This is not available to applications 2284 * that are not pre-installed on the system image. Using it requires holding 2285 * the INTERACT_ACROSS_USERS permission. 2286 * 2287 * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY} 2288 * permission in order to use this API. If you do not hold that 2289 * permission, {@link SecurityException} will be thrown. 2290 * 2291 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2292 * can access them), no protection (anyone can modify them), and many other problems. 2293 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2294 * has changed, with another mechanism for apps to retrieve the current value whenever 2295 * desired. 2296 * 2297 * @param intent The Intent that was previously broadcast. 2298 * @param user UserHandle to remove the sticky broadcast from. 2299 * 2300 * @see #sendStickyBroadcastAsUser 2301 */ 2302 @Deprecated removeStickyBroadcastAsUser(@equiresPermission Intent intent, UserHandle user)2303 public abstract void removeStickyBroadcastAsUser(@RequiresPermission Intent intent, 2304 UserHandle user); 2305 2306 /** 2307 * Register a BroadcastReceiver to be run in the main activity thread. The 2308 * <var>receiver</var> will be called with any broadcast Intent that 2309 * matches <var>filter</var>, in the main application thread. 2310 * 2311 * <p>The system may broadcast Intents that are "sticky" -- these stay 2312 * around after the broadcast as finished, to be sent to any later 2313 * registrations. If your IntentFilter matches one of these sticky 2314 * Intents, that Intent will be returned by this function 2315 * <strong>and</strong> sent to your <var>receiver</var> as if it had just 2316 * been broadcast. 2317 * 2318 * <p>There may be multiple sticky Intents that match <var>filter</var>, 2319 * in which case each of these will be sent to <var>receiver</var>. In 2320 * this case, only one of these can be returned directly by the function; 2321 * which of these that is returned is arbitrarily decided by the system. 2322 * 2323 * <p>If you know the Intent your are registering for is sticky, you can 2324 * supply null for your <var>receiver</var>. In this case, no receiver is 2325 * registered -- the function simply returns the sticky Intent that 2326 * matches <var>filter</var>. In the case of multiple matches, the same 2327 * rules as described above apply. 2328 * 2329 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2330 * 2331 * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers 2332 * registered with this method will correctly respect the 2333 * {@link Intent#setPackage(String)} specified for an Intent being broadcast. 2334 * Prior to that, it would be ignored and delivered to all matching registered 2335 * receivers. Be careful if using this for security.</p> 2336 * 2337 * <p class="note">Note: this method <em>cannot be called from a 2338 * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver 2339 * that is declared in an application's manifest. It is okay, however, to call 2340 * this method from another BroadcastReceiver that has itself been registered 2341 * at run time with {@link #registerReceiver}, since the lifetime of such a 2342 * registered BroadcastReceiver is tied to the object that registered it.</p> 2343 * 2344 * @param receiver The BroadcastReceiver to handle the broadcast. 2345 * @param filter Selects the Intent broadcasts to be received. 2346 * 2347 * @return The first sticky intent found that matches <var>filter</var>, 2348 * or null if there are none. 2349 * 2350 * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2351 * @see #sendBroadcast 2352 * @see #unregisterReceiver 2353 */ 2354 @Nullable registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter)2355 public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver, 2356 IntentFilter filter); 2357 2358 /** 2359 * Register to receive intent broadcasts, to run in the context of 2360 * <var>scheduler</var>. See 2361 * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more 2362 * information. This allows you to enforce permissions on who can 2363 * broadcast intents to your receiver, or have the receiver run in 2364 * a different thread than the main application thread. 2365 * 2366 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2367 * 2368 * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers 2369 * registered with this method will correctly respect the 2370 * {@link Intent#setPackage(String)} specified for an Intent being broadcast. 2371 * Prior to that, it would be ignored and delivered to all matching registered 2372 * receivers. Be careful if using this for security.</p> 2373 * 2374 * @param receiver The BroadcastReceiver to handle the broadcast. 2375 * @param filter Selects the Intent broadcasts to be received. 2376 * @param broadcastPermission String naming a permissions that a 2377 * broadcaster must hold in order to send an Intent to you. If null, 2378 * no permission is required. 2379 * @param scheduler Handler identifying the thread that will receive 2380 * the Intent. If null, the main thread of the process will be used. 2381 * 2382 * @return The first sticky intent found that matches <var>filter</var>, 2383 * or null if there are none. 2384 * 2385 * @see #registerReceiver(BroadcastReceiver, IntentFilter) 2386 * @see #sendBroadcast 2387 * @see #unregisterReceiver 2388 */ 2389 @Nullable registerReceiver(BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)2390 public abstract Intent registerReceiver(BroadcastReceiver receiver, 2391 IntentFilter filter, @Nullable String broadcastPermission, 2392 @Nullable Handler scheduler); 2393 2394 /** 2395 * @hide 2396 * Same as {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2397 * but for a specific user. This receiver will receiver broadcasts that 2398 * are sent to the requested user. It 2399 * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} 2400 * permission. 2401 * 2402 * @param receiver The BroadcastReceiver to handle the broadcast. 2403 * @param user UserHandle to send the intent to. 2404 * @param filter Selects the Intent broadcasts to be received. 2405 * @param broadcastPermission String naming a permissions that a 2406 * broadcaster must hold in order to send an Intent to you. If null, 2407 * no permission is required. 2408 * @param scheduler Handler identifying the thread that will receive 2409 * the Intent. If null, the main thread of the process will be used. 2410 * 2411 * @return The first sticky intent found that matches <var>filter</var>, 2412 * or null if there are none. 2413 * 2414 * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2415 * @see #sendBroadcast 2416 * @see #unregisterReceiver 2417 */ 2418 @Nullable registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)2419 public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver, 2420 UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, 2421 @Nullable Handler scheduler); 2422 2423 /** 2424 * Unregister a previously registered BroadcastReceiver. <em>All</em> 2425 * filters that have been registered for this BroadcastReceiver will be 2426 * removed. 2427 * 2428 * @param receiver The BroadcastReceiver to unregister. 2429 * 2430 * @see #registerReceiver 2431 */ unregisterReceiver(BroadcastReceiver receiver)2432 public abstract void unregisterReceiver(BroadcastReceiver receiver); 2433 2434 /** 2435 * Request that a given application service be started. The Intent 2436 * should contain either contain the complete class name of a specific service 2437 * implementation to start or a specific package name to target. If the 2438 * Intent is less specified, it log a warning about this and which of the 2439 * multiple matching services it finds and uses will be undefined. If this service 2440 * is not already running, it will be instantiated and started (creating a 2441 * process for it if needed); if it is running then it remains running. 2442 * 2443 * <p>Every call to this method will result in a corresponding call to 2444 * the target service's {@link android.app.Service#onStartCommand} method, 2445 * with the <var>intent</var> given here. This provides a convenient way 2446 * to submit jobs to a service without having to bind and call on to its 2447 * interface. 2448 * 2449 * <p>Using startService() overrides the default service lifetime that is 2450 * managed by {@link #bindService}: it requires the service to remain 2451 * running until {@link #stopService} is called, regardless of whether 2452 * any clients are connected to it. Note that calls to startService() 2453 * are not nesting: no matter how many times you call startService(), 2454 * a single call to {@link #stopService} will stop it. 2455 * 2456 * <p>The system attempts to keep running services around as much as 2457 * possible. The only time they should be stopped is if the current 2458 * foreground application is using so many resources that the service needs 2459 * to be killed. If any errors happen in the service's process, it will 2460 * automatically be restarted. 2461 * 2462 * <p>This function will throw {@link SecurityException} if you do not 2463 * have permission to start the given service. 2464 * 2465 * <p class="note"><strong>Note:</strong> Each call to startService() 2466 * results in significant work done by the system to manage service 2467 * lifecycle surrounding the processing of the intent, which can take 2468 * multiple milliseconds of CPU time. Due to this cost, startService() 2469 * should not be used for frequent intent delivery to a service, and only 2470 * for scheduling significant work. Use {@link #bindService bound services} 2471 * for high frequency calls. 2472 * </p> 2473 * 2474 * @param service Identifies the service to be started. The Intent must be either 2475 * fully explicit (supplying a component name) or specify a specific package 2476 * name it is targetted to. Additional values 2477 * may be included in the Intent extras to supply arguments along with 2478 * this specific start call. 2479 * 2480 * @return If the service is being started or is already running, the 2481 * {@link ComponentName} of the actual service that was started is 2482 * returned; else if the service does not exist null is returned. 2483 * 2484 * @throws SecurityException 2485 * 2486 * @see #stopService 2487 * @see #bindService 2488 */ 2489 @Nullable startService(Intent service)2490 public abstract ComponentName startService(Intent service); 2491 2492 /** 2493 * Request that a given application service be stopped. If the service is 2494 * not running, nothing happens. Otherwise it is stopped. Note that calls 2495 * to startService() are not counted -- this stops the service no matter 2496 * how many times it was started. 2497 * 2498 * <p>Note that if a stopped service still has {@link ServiceConnection} 2499 * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will 2500 * not be destroyed until all of these bindings are removed. See 2501 * the {@link android.app.Service} documentation for more details on a 2502 * service's lifecycle. 2503 * 2504 * <p>This function will throw {@link SecurityException} if you do not 2505 * have permission to stop the given service. 2506 * 2507 * @param service Description of the service to be stopped. The Intent must be either 2508 * fully explicit (supplying a component name) or specify a specific package 2509 * name it is targetted to. 2510 * 2511 * @return If there is a service matching the given Intent that is already 2512 * running, then it is stopped and {@code true} is returned; else {@code false} is returned. 2513 * 2514 * @throws SecurityException 2515 * 2516 * @see #startService 2517 */ stopService(Intent service)2518 public abstract boolean stopService(Intent service); 2519 2520 /** 2521 * @hide like {@link #startService(Intent)} but for a specific user. 2522 */ startServiceAsUser(Intent service, UserHandle user)2523 public abstract ComponentName startServiceAsUser(Intent service, UserHandle user); 2524 2525 /** 2526 * @hide like {@link #stopService(Intent)} but for a specific user. 2527 */ stopServiceAsUser(Intent service, UserHandle user)2528 public abstract boolean stopServiceAsUser(Intent service, UserHandle user); 2529 2530 /** 2531 * Connect to an application service, creating it if needed. This defines 2532 * a dependency between your application and the service. The given 2533 * <var>conn</var> will receive the service object when it is created and be 2534 * told if it dies and restarts. The service will be considered required 2535 * by the system only for as long as the calling context exists. For 2536 * example, if this Context is an Activity that is stopped, the service will 2537 * not be required to continue running until the Activity is resumed. 2538 * 2539 * <p>This function will throw {@link SecurityException} if you do not 2540 * have permission to bind to the given service. 2541 * 2542 * <p class="note">Note: this method <em>can not be called from a 2543 * {@link BroadcastReceiver} component</em>. A pattern you can use to 2544 * communicate from a BroadcastReceiver to a Service is to call 2545 * {@link #startService} with the arguments containing the command to be 2546 * sent, with the service calling its 2547 * {@link android.app.Service#stopSelf(int)} method when done executing 2548 * that command. See the API demo App/Service/Service Start Arguments 2549 * Controller for an illustration of this. It is okay, however, to use 2550 * this method from a BroadcastReceiver that has been registered with 2551 * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver 2552 * is tied to another object (the one that registered it).</p> 2553 * 2554 * @param service Identifies the service to connect to. The Intent may 2555 * specify either an explicit component name, or a logical 2556 * description (action, category, etc) to match an 2557 * {@link IntentFilter} published by a service. 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 2765 * Wi-Fi connectivity. 2766 * <dt> {@link #WIFI_P2P_SERVICE} ("wifip2p") 2767 * <dd> A {@link android.net.wifi.p2p.WifiP2pManager WifiP2pManager} for management of 2768 * Wi-Fi Direct connectivity. 2769 * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method") 2770 * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager} 2771 * for management of input methods. 2772 * <dt> {@link #UI_MODE_SERVICE} ("uimode") 2773 * <dd> An {@link android.app.UiModeManager} for controlling UI modes. 2774 * <dt> {@link #DOWNLOAD_SERVICE} ("download") 2775 * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads 2776 * <dt> {@link #BATTERY_SERVICE} ("batterymanager") 2777 * <dd> A {@link android.os.BatteryManager} for managing battery state 2778 * <dt> {@link #JOB_SCHEDULER_SERVICE} ("taskmanager") 2779 * <dd> A {@link android.app.job.JobScheduler} for managing scheduled tasks 2780 * <dt> {@link #NETWORK_STATS_SERVICE} ("netstats") 2781 * <dd> A {@link android.app.usage.NetworkStatsManager NetworkStatsManager} for querying network 2782 * usage statistics. 2783 * <dt> {@link #HARDWARE_PROPERTIES_SERVICE} ("hardware_properties") 2784 * <dd> A {@link android.os.HardwarePropertiesManager} for accessing hardware properties. 2785 * </dl> 2786 * 2787 * <p>Note: System services obtained via this API may be closely associated with 2788 * the Context in which they are obtained from. In general, do not share the 2789 * service objects between various different contexts (Activities, Applications, 2790 * Services, Providers, etc.) 2791 * 2792 * @param name The name of the desired service. 2793 * 2794 * @return The service or null if the name does not exist. 2795 * 2796 * @see #WINDOW_SERVICE 2797 * @see android.view.WindowManager 2798 * @see #LAYOUT_INFLATER_SERVICE 2799 * @see android.view.LayoutInflater 2800 * @see #ACTIVITY_SERVICE 2801 * @see android.app.ActivityManager 2802 * @see #POWER_SERVICE 2803 * @see android.os.PowerManager 2804 * @see #ALARM_SERVICE 2805 * @see android.app.AlarmManager 2806 * @see #NOTIFICATION_SERVICE 2807 * @see android.app.NotificationManager 2808 * @see #KEYGUARD_SERVICE 2809 * @see android.app.KeyguardManager 2810 * @see #LOCATION_SERVICE 2811 * @see android.location.LocationManager 2812 * @see #SEARCH_SERVICE 2813 * @see android.app.SearchManager 2814 * @see #SENSOR_SERVICE 2815 * @see android.hardware.SensorManager 2816 * @see #STORAGE_SERVICE 2817 * @see android.os.storage.StorageManager 2818 * @see #VIBRATOR_SERVICE 2819 * @see android.os.Vibrator 2820 * @see #CONNECTIVITY_SERVICE 2821 * @see android.net.ConnectivityManager 2822 * @see #WIFI_SERVICE 2823 * @see android.net.wifi.WifiManager 2824 * @see #AUDIO_SERVICE 2825 * @see android.media.AudioManager 2826 * @see #MEDIA_ROUTER_SERVICE 2827 * @see android.media.MediaRouter 2828 * @see #TELEPHONY_SERVICE 2829 * @see android.telephony.TelephonyManager 2830 * @see #TELEPHONY_SUBSCRIPTION_SERVICE 2831 * @see android.telephony.SubscriptionManager 2832 * @see #CARRIER_CONFIG_SERVICE 2833 * @see android.telephony.CarrierConfigManager 2834 * @see #INPUT_METHOD_SERVICE 2835 * @see android.view.inputmethod.InputMethodManager 2836 * @see #UI_MODE_SERVICE 2837 * @see android.app.UiModeManager 2838 * @see #DOWNLOAD_SERVICE 2839 * @see android.app.DownloadManager 2840 * @see #BATTERY_SERVICE 2841 * @see android.os.BatteryManager 2842 * @see #JOB_SCHEDULER_SERVICE 2843 * @see android.app.job.JobScheduler 2844 * @see #NETWORK_STATS_SERVICE 2845 * @see android.app.usage.NetworkStatsManager 2846 * @see android.os.HardwarePropertiesManager 2847 * @see #HARDWARE_PROPERTIES_SERVICE 2848 */ getSystemService(@erviceName @onNull String name)2849 public abstract Object getSystemService(@ServiceName @NonNull String name); 2850 2851 /** 2852 * Return the handle to a system-level service by class. 2853 * <p> 2854 * Currently available classes are: 2855 * {@link android.view.WindowManager}, {@link android.view.LayoutInflater}, 2856 * {@link android.app.ActivityManager}, {@link android.os.PowerManager}, 2857 * {@link android.app.AlarmManager}, {@link android.app.NotificationManager}, 2858 * {@link android.app.KeyguardManager}, {@link android.location.LocationManager}, 2859 * {@link android.app.SearchManager}, {@link android.os.Vibrator}, 2860 * {@link android.net.ConnectivityManager}, 2861 * {@link android.net.wifi.WifiManager}, 2862 * {@link android.media.AudioManager}, {@link android.media.MediaRouter}, 2863 * {@link android.telephony.TelephonyManager}, {@link android.telephony.SubscriptionManager}, 2864 * {@link android.view.inputmethod.InputMethodManager}, 2865 * {@link android.app.UiModeManager}, {@link android.app.DownloadManager}, 2866 * {@link android.os.BatteryManager}, {@link android.app.job.JobScheduler}, 2867 * {@link android.app.usage.NetworkStatsManager}. 2868 * </p><p> 2869 * Note: System services obtained via this API may be closely associated with 2870 * the Context in which they are obtained from. In general, do not share the 2871 * service objects between various different contexts (Activities, Applications, 2872 * Services, Providers, etc.) 2873 * </p> 2874 * 2875 * @param serviceClass The class of the desired service. 2876 * @return The service or null if the class is not a supported system service. 2877 */ 2878 @SuppressWarnings("unchecked") getSystemService(Class<T> serviceClass)2879 public final <T> T getSystemService(Class<T> serviceClass) { 2880 // Because subclasses may override getSystemService(String) we cannot 2881 // perform a lookup by class alone. We must first map the class to its 2882 // service name then invoke the string-based method. 2883 String serviceName = getSystemServiceName(serviceClass); 2884 return serviceName != null ? (T)getSystemService(serviceName) : null; 2885 } 2886 2887 /** 2888 * Gets the name of the system-level service that is represented by the specified class. 2889 * 2890 * @param serviceClass The class of the desired service. 2891 * @return The service name or null if the class is not a supported system service. 2892 */ getSystemServiceName(Class<?> serviceClass)2893 public abstract String getSystemServiceName(Class<?> serviceClass); 2894 2895 /** 2896 * Use with {@link #getSystemService} to retrieve a 2897 * {@link android.os.PowerManager} for controlling power management, 2898 * including "wake locks," which let you keep the device on while 2899 * you're running long tasks. 2900 */ 2901 public static final String POWER_SERVICE = "power"; 2902 2903 /** 2904 * Use with {@link #getSystemService} to retrieve a 2905 * {@link android.os.RecoverySystem} for accessing the recovery system 2906 * service. 2907 * 2908 * @see #getSystemService 2909 * @hide 2910 */ 2911 public static final String RECOVERY_SERVICE = "recovery"; 2912 2913 /** 2914 * Use with {@link #getSystemService} to retrieve a 2915 * {@link android.view.WindowManager} for accessing the system's window 2916 * manager. 2917 * 2918 * @see #getSystemService 2919 * @see android.view.WindowManager 2920 */ 2921 public static final String WINDOW_SERVICE = "window"; 2922 2923 /** 2924 * Use with {@link #getSystemService} to retrieve a 2925 * {@link android.view.LayoutInflater} for inflating layout resources in this 2926 * context. 2927 * 2928 * @see #getSystemService 2929 * @see android.view.LayoutInflater 2930 */ 2931 public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater"; 2932 2933 /** 2934 * Use with {@link #getSystemService} to retrieve a 2935 * {@link android.accounts.AccountManager} for receiving intents at a 2936 * time of your choosing. 2937 * 2938 * @see #getSystemService 2939 * @see android.accounts.AccountManager 2940 */ 2941 public static final String ACCOUNT_SERVICE = "account"; 2942 2943 /** 2944 * Use with {@link #getSystemService} to retrieve a 2945 * {@link android.app.ActivityManager} for interacting with the global 2946 * system state. 2947 * 2948 * @see #getSystemService 2949 * @see android.app.ActivityManager 2950 */ 2951 public static final String ACTIVITY_SERVICE = "activity"; 2952 2953 /** 2954 * Use with {@link #getSystemService} to retrieve a 2955 * {@link android.app.AlarmManager} for receiving intents at a 2956 * time of your choosing. 2957 * 2958 * @see #getSystemService 2959 * @see android.app.AlarmManager 2960 */ 2961 public static final String ALARM_SERVICE = "alarm"; 2962 2963 /** 2964 * Use with {@link #getSystemService} to retrieve a 2965 * {@link android.app.NotificationManager} for informing the user of 2966 * background events. 2967 * 2968 * @see #getSystemService 2969 * @see android.app.NotificationManager 2970 */ 2971 public static final String NOTIFICATION_SERVICE = "notification"; 2972 2973 /** 2974 * Use with {@link #getSystemService} to retrieve a 2975 * {@link android.view.accessibility.AccessibilityManager} for giving the user 2976 * feedback for UI events through the registered event listeners. 2977 * 2978 * @see #getSystemService 2979 * @see android.view.accessibility.AccessibilityManager 2980 */ 2981 public static final String ACCESSIBILITY_SERVICE = "accessibility"; 2982 2983 /** 2984 * Use with {@link #getSystemService} to retrieve a 2985 * {@link android.view.accessibility.CaptioningManager} for obtaining 2986 * captioning properties and listening for changes in captioning 2987 * preferences. 2988 * 2989 * @see #getSystemService 2990 * @see android.view.accessibility.CaptioningManager 2991 */ 2992 public static final String CAPTIONING_SERVICE = "captioning"; 2993 2994 /** 2995 * Use with {@link #getSystemService} to retrieve a 2996 * {@link android.app.NotificationManager} for controlling keyguard. 2997 * 2998 * @see #getSystemService 2999 * @see android.app.KeyguardManager 3000 */ 3001 public static final String KEYGUARD_SERVICE = "keyguard"; 3002 3003 /** 3004 * Use with {@link #getSystemService} to retrieve a {@link 3005 * android.location.LocationManager} for controlling location 3006 * updates. 3007 * 3008 * @see #getSystemService 3009 * @see android.location.LocationManager 3010 */ 3011 public static final String LOCATION_SERVICE = "location"; 3012 3013 /** 3014 * Use with {@link #getSystemService} to retrieve a 3015 * {@link android.location.CountryDetector} for detecting the country that 3016 * the user is in. 3017 * 3018 * @hide 3019 */ 3020 public static final String COUNTRY_DETECTOR = "country_detector"; 3021 3022 /** 3023 * Use with {@link #getSystemService} to retrieve a {@link 3024 * android.app.SearchManager} for handling searches. 3025 * 3026 * @see #getSystemService 3027 * @see android.app.SearchManager 3028 */ 3029 public static final String SEARCH_SERVICE = "search"; 3030 3031 /** 3032 * Use with {@link #getSystemService} to retrieve a {@link 3033 * android.hardware.SensorManager} for accessing sensors. 3034 * 3035 * @see #getSystemService 3036 * @see android.hardware.SensorManager 3037 */ 3038 public static final String SENSOR_SERVICE = "sensor"; 3039 3040 /** 3041 * Use with {@link #getSystemService} to retrieve a {@link 3042 * android.os.storage.StorageManager} for accessing system storage 3043 * functions. 3044 * 3045 * @see #getSystemService 3046 * @see android.os.storage.StorageManager 3047 */ 3048 public static final String STORAGE_SERVICE = "storage"; 3049 3050 /** 3051 * Use with {@link #getSystemService} to retrieve a 3052 * com.android.server.WallpaperService for accessing wallpapers. 3053 * 3054 * @see #getSystemService 3055 */ 3056 public static final String WALLPAPER_SERVICE = "wallpaper"; 3057 3058 /** 3059 * Use with {@link #getSystemService} to retrieve a {@link 3060 * android.os.Vibrator} for interacting with the vibration hardware. 3061 * 3062 * @see #getSystemService 3063 * @see android.os.Vibrator 3064 */ 3065 public static final String VIBRATOR_SERVICE = "vibrator"; 3066 3067 /** 3068 * Use with {@link #getSystemService} to retrieve a {@link 3069 * android.app.StatusBarManager} for interacting with the status bar. 3070 * 3071 * @see #getSystemService 3072 * @see android.app.StatusBarManager 3073 * @hide 3074 */ 3075 public static final String STATUS_BAR_SERVICE = "statusbar"; 3076 3077 /** 3078 * Use with {@link #getSystemService} to retrieve a {@link 3079 * android.net.ConnectivityManager} for handling management of 3080 * network connections. 3081 * 3082 * @see #getSystemService 3083 * @see android.net.ConnectivityManager 3084 */ 3085 public static final String CONNECTIVITY_SERVICE = "connectivity"; 3086 3087 /** 3088 * Use with {@link #getSystemService} to retrieve a {@link 3089 * android.os.IUpdateLock} for managing runtime sequences that 3090 * must not be interrupted by headless OTA application or similar. 3091 * 3092 * @hide 3093 * @see #getSystemService 3094 * @see android.os.UpdateLock 3095 */ 3096 public static final String UPDATE_LOCK_SERVICE = "updatelock"; 3097 3098 /** 3099 * Constant for the internal network management service, not really a Context service. 3100 * @hide 3101 */ 3102 public static final String NETWORKMANAGEMENT_SERVICE = "network_management"; 3103 3104 /** 3105 * Use with {@link #getSystemService} to retrieve a {@link 3106 * android.app.usage.NetworkStatsManager} for querying network usage stats. 3107 * 3108 * @see #getSystemService 3109 * @see android.app.usage.NetworkStatsManager 3110 */ 3111 public static final String NETWORK_STATS_SERVICE = "netstats"; 3112 /** {@hide} */ 3113 public static final String NETWORK_POLICY_SERVICE = "netpolicy"; 3114 3115 /** 3116 * Use with {@link #getSystemService} to retrieve a {@link 3117 * android.net.wifi.WifiManager} for handling management of 3118 * Wi-Fi access. 3119 * 3120 * @see #getSystemService 3121 * @see android.net.wifi.WifiManager 3122 */ 3123 public static final String WIFI_SERVICE = "wifi"; 3124 3125 /** 3126 * Use with {@link #getSystemService} to retrieve a {@link 3127 * android.net.wifi.p2p.WifiP2pManager} for handling management of 3128 * Wi-Fi peer-to-peer connections. 3129 * 3130 * @see #getSystemService 3131 * @see android.net.wifi.p2p.WifiP2pManager 3132 */ 3133 public static final String WIFI_P2P_SERVICE = "wifip2p"; 3134 3135 /** 3136 * Use with {@link #getSystemService} to retrieve a 3137 * {@link android.net.wifi.nan.WifiNanManager} for handling management of 3138 * Wi-Fi NAN discovery and connections. 3139 * 3140 * @see #getSystemService 3141 * @see android.net.wifi.nan.WifiNanManager 3142 * @hide PROPOSED_NAN_API 3143 */ 3144 public static final String WIFI_NAN_SERVICE = "wifinan"; 3145 3146 /** 3147 * Use with {@link #getSystemService} to retrieve a {@link 3148 * android.net.wifi.WifiScanner} for scanning the wifi universe 3149 * 3150 * @see #getSystemService 3151 * @see android.net.wifi.WifiScanner 3152 * @hide 3153 */ 3154 @SystemApi 3155 public static final String WIFI_SCANNING_SERVICE = "wifiscanner"; 3156 3157 /** 3158 * Use with {@link #getSystemService} to retrieve a {@link 3159 * android.net.wifi.RttManager} for ranging devices with wifi 3160 * 3161 * @see #getSystemService 3162 * @see android.net.wifi.RttManager 3163 * @hide 3164 */ 3165 @SystemApi 3166 public static final String WIFI_RTT_SERVICE = "rttmanager"; 3167 3168 /** 3169 * Use with {@link #getSystemService} to retrieve a {@link 3170 * android.net.EthernetManager} for handling management of 3171 * Ethernet access. 3172 * 3173 * @see #getSystemService 3174 * @see android.net.EthernetManager 3175 * 3176 * @hide 3177 */ 3178 public static final String ETHERNET_SERVICE = "ethernet"; 3179 3180 /** 3181 * Use with {@link #getSystemService} to retrieve a {@link 3182 * android.net.nsd.NsdManager} for handling management of network service 3183 * discovery 3184 * 3185 * @see #getSystemService 3186 * @see android.net.nsd.NsdManager 3187 */ 3188 public static final String NSD_SERVICE = "servicediscovery"; 3189 3190 /** 3191 * Use with {@link #getSystemService} to retrieve a 3192 * {@link android.media.AudioManager} for handling management of volume, 3193 * ringer modes and audio routing. 3194 * 3195 * @see #getSystemService 3196 * @see android.media.AudioManager 3197 */ 3198 public static final String AUDIO_SERVICE = "audio"; 3199 3200 /** 3201 * Use with {@link #getSystemService} to retrieve a 3202 * {@link android.hardware.fingerprint.FingerprintManager} for handling management 3203 * of fingerprints. 3204 * 3205 * @see #getSystemService 3206 * @see android.hardware.fingerprint.FingerprintManager 3207 */ 3208 public static final String FINGERPRINT_SERVICE = "fingerprint"; 3209 3210 /** 3211 * Use with {@link #getSystemService} to retrieve a 3212 * {@link android.media.MediaRouter} for controlling and managing 3213 * routing of media. 3214 * 3215 * @see #getSystemService 3216 * @see android.media.MediaRouter 3217 */ 3218 public static final String MEDIA_ROUTER_SERVICE = "media_router"; 3219 3220 /** 3221 * Use with {@link #getSystemService} to retrieve a 3222 * {@link android.media.session.MediaSessionManager} for managing media Sessions. 3223 * 3224 * @see #getSystemService 3225 * @see android.media.session.MediaSessionManager 3226 */ 3227 public static final String MEDIA_SESSION_SERVICE = "media_session"; 3228 3229 /** 3230 * Use with {@link #getSystemService} to retrieve a 3231 * {@link android.telephony.TelephonyManager} for handling management the 3232 * telephony features of the device. 3233 * 3234 * @see #getSystemService 3235 * @see android.telephony.TelephonyManager 3236 */ 3237 public static final String TELEPHONY_SERVICE = "phone"; 3238 3239 /** 3240 * Use with {@link #getSystemService} to retrieve a 3241 * {@link android.telephony.SubscriptionManager} for handling management the 3242 * telephony subscriptions of the device. 3243 * 3244 * @see #getSystemService 3245 * @see android.telephony.SubscriptionManager 3246 */ 3247 public static final String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service"; 3248 3249 /** 3250 * Use with {@link #getSystemService} to retrieve a 3251 * {@link android.telecom.TelecomManager} to manage telecom-related features 3252 * of the device. 3253 * 3254 * @see #getSystemService 3255 * @see android.telecom.TelecomManager 3256 */ 3257 public static final String TELECOM_SERVICE = "telecom"; 3258 3259 /** 3260 * Use with {@link #getSystemService} to retrieve a 3261 * {@link android.telephony.CarrierConfigManager} for reading carrier configuration values. 3262 * 3263 * @see #getSystemService 3264 * @see android.telephony.CarrierConfigManager 3265 */ 3266 public static final String CARRIER_CONFIG_SERVICE = "carrier_config"; 3267 3268 /** 3269 * Use with {@link #getSystemService} to retrieve a 3270 * {@link android.text.ClipboardManager} for accessing and modifying 3271 * {@link android.content.ClipboardManager} for accessing and modifying 3272 * the contents of the global clipboard. 3273 * 3274 * @see #getSystemService 3275 * @see android.content.ClipboardManager 3276 */ 3277 public static final String CLIPBOARD_SERVICE = "clipboard"; 3278 3279 /** 3280 * Use with {@link #getSystemService} to retrieve a 3281 * {@link android.view.inputmethod.InputMethodManager} for accessing input 3282 * methods. 3283 * 3284 * @see #getSystemService 3285 */ 3286 public static final String INPUT_METHOD_SERVICE = "input_method"; 3287 3288 /** 3289 * Use with {@link #getSystemService} to retrieve a 3290 * {@link android.view.textservice.TextServicesManager} for accessing 3291 * text services. 3292 * 3293 * @see #getSystemService 3294 */ 3295 public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices"; 3296 3297 /** 3298 * Use with {@link #getSystemService} to retrieve a 3299 * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets. 3300 * 3301 * @see #getSystemService 3302 */ 3303 public static final String APPWIDGET_SERVICE = "appwidget"; 3304 3305 /** 3306 * Official published name of the (internal) voice interaction manager service. 3307 * 3308 * @hide 3309 * @see #getSystemService 3310 */ 3311 public static final String VOICE_INTERACTION_MANAGER_SERVICE = "voiceinteraction"; 3312 3313 /** 3314 * Use with {@link #getSystemService} to access the 3315 * {@link com.android.server.voiceinteraction.SoundTriggerService}. 3316 * 3317 * @hide 3318 * @see #getSystemService 3319 */ 3320 public static final String SOUND_TRIGGER_SERVICE = "soundtrigger"; 3321 3322 3323 /** 3324 * Use with {@link #getSystemService} to retrieve an 3325 * {@link android.app.backup.IBackupManager IBackupManager} for communicating 3326 * with the backup mechanism. 3327 * @hide 3328 * 3329 * @see #getSystemService 3330 */ 3331 @SystemApi 3332 public static final String BACKUP_SERVICE = "backup"; 3333 3334 /** 3335 * Use with {@link #getSystemService} to retrieve a 3336 * {@link android.os.DropBoxManager} instance for recording 3337 * diagnostic logs. 3338 * @see #getSystemService 3339 */ 3340 public static final String DROPBOX_SERVICE = "dropbox"; 3341 3342 /** 3343 * System service name for the DeviceIdleController. There is no Java API for this. 3344 * @see #getSystemService 3345 * @hide 3346 */ 3347 public static final String DEVICE_IDLE_CONTROLLER = "deviceidle"; 3348 3349 /** 3350 * Use with {@link #getSystemService} to retrieve a 3351 * {@link android.app.admin.DevicePolicyManager} for working with global 3352 * device policy management. 3353 * 3354 * @see #getSystemService 3355 */ 3356 public static final String DEVICE_POLICY_SERVICE = "device_policy"; 3357 3358 /** 3359 * Use with {@link #getSystemService} to retrieve a 3360 * {@link android.app.UiModeManager} for controlling UI modes. 3361 * 3362 * @see #getSystemService 3363 */ 3364 public static final String UI_MODE_SERVICE = "uimode"; 3365 3366 /** 3367 * Use with {@link #getSystemService} to retrieve a 3368 * {@link android.app.DownloadManager} for requesting HTTP downloads. 3369 * 3370 * @see #getSystemService 3371 */ 3372 public static final String DOWNLOAD_SERVICE = "download"; 3373 3374 /** 3375 * Use with {@link #getSystemService} to retrieve a 3376 * {@link android.os.BatteryManager} for managing battery state. 3377 * 3378 * @see #getSystemService 3379 */ 3380 public static final String BATTERY_SERVICE = "batterymanager"; 3381 3382 /** 3383 * Use with {@link #getSystemService} to retrieve a 3384 * {@link android.nfc.NfcManager} for using NFC. 3385 * 3386 * @see #getSystemService 3387 */ 3388 public static final String NFC_SERVICE = "nfc"; 3389 3390 /** 3391 * Use with {@link #getSystemService} to retrieve a 3392 * {@link android.bluetooth.BluetoothManager} for using Bluetooth. 3393 * 3394 * @see #getSystemService 3395 */ 3396 public static final String BLUETOOTH_SERVICE = "bluetooth"; 3397 3398 /** 3399 * Use with {@link #getSystemService} to retrieve a 3400 * {@link android.net.sip.SipManager} for accessing the SIP related service. 3401 * 3402 * @see #getSystemService 3403 */ 3404 /** @hide */ 3405 public static final String SIP_SERVICE = "sip"; 3406 3407 /** 3408 * Use with {@link #getSystemService} to retrieve a {@link 3409 * android.hardware.usb.UsbManager} for access to USB devices (as a USB host) 3410 * and for controlling this device's behavior as a USB device. 3411 * 3412 * @see #getSystemService 3413 * @see android.hardware.usb.UsbManager 3414 */ 3415 public static final String USB_SERVICE = "usb"; 3416 3417 /** 3418 * Use with {@link #getSystemService} to retrieve a {@link 3419 * android.hardware.SerialManager} for access to serial ports. 3420 * 3421 * @see #getSystemService 3422 * @see android.hardware.SerialManager 3423 * 3424 * @hide 3425 */ 3426 public static final String SERIAL_SERVICE = "serial"; 3427 3428 /** 3429 * Use with {@link #getSystemService} to retrieve a 3430 * {@link android.hardware.hdmi.HdmiControlManager} for controlling and managing 3431 * HDMI-CEC protocol. 3432 * 3433 * @see #getSystemService 3434 * @see android.hardware.hdmi.HdmiControlManager 3435 * @hide 3436 */ 3437 @SystemApi 3438 public static final String HDMI_CONTROL_SERVICE = "hdmi_control"; 3439 3440 /** 3441 * Use with {@link #getSystemService} to retrieve a 3442 * {@link android.hardware.input.InputManager} for interacting with input devices. 3443 * 3444 * @see #getSystemService 3445 * @see android.hardware.input.InputManager 3446 */ 3447 public static final String INPUT_SERVICE = "input"; 3448 3449 /** 3450 * Use with {@link #getSystemService} to retrieve a 3451 * {@link android.hardware.display.DisplayManager} for interacting with display devices. 3452 * 3453 * @see #getSystemService 3454 * @see android.hardware.display.DisplayManager 3455 */ 3456 public static final String DISPLAY_SERVICE = "display"; 3457 3458 /** 3459 * Use with {@link #getSystemService} to retrieve a 3460 * {@link android.os.UserManager} for managing users on devices that support multiple users. 3461 * 3462 * @see #getSystemService 3463 * @see android.os.UserManager 3464 */ 3465 public static final String USER_SERVICE = "user"; 3466 3467 /** 3468 * Use with {@link #getSystemService} to retrieve a 3469 * {@link android.content.pm.LauncherApps} for querying and monitoring launchable apps across 3470 * profiles of a user. 3471 * 3472 * @see #getSystemService 3473 * @see android.content.pm.LauncherApps 3474 */ 3475 public static final String LAUNCHER_APPS_SERVICE = "launcherapps"; 3476 3477 /** 3478 * Use with {@link #getSystemService} to retrieve a 3479 * {@link android.content.RestrictionsManager} for retrieving application restrictions 3480 * and requesting permissions for restricted operations. 3481 * @see #getSystemService 3482 * @see android.content.RestrictionsManager 3483 */ 3484 public static final String RESTRICTIONS_SERVICE = "restrictions"; 3485 3486 /** 3487 * Use with {@link #getSystemService} to retrieve a 3488 * {@link android.app.AppOpsManager} for tracking application operations 3489 * on the device. 3490 * 3491 * @see #getSystemService 3492 * @see android.app.AppOpsManager 3493 */ 3494 public static final String APP_OPS_SERVICE = "appops"; 3495 3496 /** 3497 * Use with {@link #getSystemService} to retrieve a 3498 * {@link android.hardware.camera2.CameraManager} for interacting with 3499 * camera devices. 3500 * 3501 * @see #getSystemService 3502 * @see android.hardware.camera2.CameraManager 3503 */ 3504 public static final String CAMERA_SERVICE = "camera"; 3505 3506 /** 3507 * {@link android.print.PrintManager} for printing and managing 3508 * printers and print tasks. 3509 * 3510 * @see #getSystemService 3511 * @see android.print.PrintManager 3512 */ 3513 public static final String PRINT_SERVICE = "print"; 3514 3515 /** 3516 * Use with {@link #getSystemService} to retrieve a 3517 * {@link android.hardware.ConsumerIrManager} for transmitting infrared 3518 * signals from the device. 3519 * 3520 * @see #getSystemService 3521 * @see android.hardware.ConsumerIrManager 3522 */ 3523 public static final String CONSUMER_IR_SERVICE = "consumer_ir"; 3524 3525 /** 3526 * {@link android.app.trust.TrustManager} for managing trust agents. 3527 * @see #getSystemService 3528 * @see android.app.trust.TrustManager 3529 * @hide 3530 */ 3531 public static final String TRUST_SERVICE = "trust"; 3532 3533 /** 3534 * Use with {@link #getSystemService} to retrieve a 3535 * {@link android.media.tv.TvInputManager} for interacting with TV inputs 3536 * on the device. 3537 * 3538 * @see #getSystemService 3539 * @see android.media.tv.TvInputManager 3540 */ 3541 public static final String TV_INPUT_SERVICE = "tv_input"; 3542 3543 /** 3544 * {@link android.net.NetworkScoreManager} for managing network scoring. 3545 * @see #getSystemService 3546 * @see android.net.NetworkScoreManager 3547 * @hide 3548 */ 3549 @SystemApi 3550 public static final String NETWORK_SCORE_SERVICE = "network_score"; 3551 3552 /** 3553 * Use with {@link #getSystemService} to retrieve a {@link 3554 * android.app.usage.UsageStatsManager} for querying device usage stats. 3555 * 3556 * @see #getSystemService 3557 * @see android.app.usage.UsageStatsManager 3558 */ 3559 public static final String USAGE_STATS_SERVICE = "usagestats"; 3560 3561 /** 3562 * Use with {@link #getSystemService} to retrieve a {@link 3563 * android.app.job.JobScheduler} instance for managing occasional 3564 * background tasks. 3565 * @see #getSystemService 3566 * @see android.app.job.JobScheduler 3567 */ 3568 public static final String JOB_SCHEDULER_SERVICE = "jobscheduler"; 3569 3570 /** 3571 * Use with {@link #getSystemService} to retrieve a {@link 3572 * android.service.persistentdata.PersistentDataBlockManager} instance 3573 * for interacting with a storage device that lives across factory resets. 3574 * 3575 * @see #getSystemService 3576 * @see android.service.persistentdata.PersistentDataBlockManager 3577 * @hide 3578 */ 3579 @SystemApi 3580 public static final String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block"; 3581 3582 /** 3583 * Use with {@link #getSystemService} to retrieve a {@link 3584 * android.media.projection.MediaProjectionManager} instance for managing 3585 * media projection sessions. 3586 * @see #getSystemService 3587 * @see android.media.projection.MediaProjectionManager 3588 */ 3589 public static final String MEDIA_PROJECTION_SERVICE = "media_projection"; 3590 3591 /** 3592 * Use with {@link #getSystemService} to retrieve a 3593 * {@link android.media.midi.MidiManager} for accessing the MIDI service. 3594 * 3595 * @see #getSystemService 3596 */ 3597 public static final String MIDI_SERVICE = "midi"; 3598 3599 3600 /** 3601 * Use with {@link #getSystemService} to retrieve a 3602 * {@link android.hardware.radio.RadioManager} for accessing the broadcast radio service. 3603 * 3604 * @see #getSystemService 3605 * @hide 3606 */ 3607 public static final String RADIO_SERVICE = "radio"; 3608 3609 /** 3610 * Use with {@link #getSystemService} to retrieve a 3611 * {@link android.os.HardwarePropertiesManager} for accessing the hardware properties service. 3612 * 3613 * @see #getSystemService 3614 */ 3615 public static final String HARDWARE_PROPERTIES_SERVICE = "hardware_properties"; 3616 3617 /** 3618 * TODO Javadoc 3619 * 3620 * @see #getSystemService 3621 * @see android.content.pm.ShortcutManager 3622 * 3623 * @hide 3624 */ 3625 public static final String SHORTCUT_SERVICE = "shortcut"; 3626 3627 /** 3628 * Use with {@link #getSystemService} to retrieve a {@link 3629 * android.hardware.location.ContextHubManager} for accessing context hubs. 3630 * 3631 * @see #getSystemService 3632 * @see android.hardware.location.ContextHubManager 3633 * 3634 * @hide 3635 */ 3636 @SystemApi 3637 public static final String CONTEXTHUB_SERVICE = "contexthub"; 3638 3639 /** 3640 * Use with {@link #getSystemService} to retrieve a 3641 * {@link android.os.health.SystemHealthManager} for accessing system health (battery, power, 3642 * memory, etc) metrics. 3643 * 3644 * @see #getSystemService 3645 */ 3646 public static final String SYSTEM_HEALTH_SERVICE = "systemhealth"; 3647 3648 /** 3649 * Gatekeeper Service. 3650 * @hide 3651 */ 3652 public static final String GATEKEEPER_SERVICE = "android.service.gatekeeper.IGateKeeperService"; 3653 3654 /** 3655 * Determine whether the given permission is allowed for a particular 3656 * process and user ID running in the system. 3657 * 3658 * @param permission The name of the permission being checked. 3659 * @param pid The process ID being checked against. Must be > 0. 3660 * @param uid The user ID being checked against. A uid of 0 is the root 3661 * user, which will pass every permission check. 3662 * 3663 * @return {@link PackageManager#PERMISSION_GRANTED} if the given 3664 * pid/uid is allowed that permission, or 3665 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3666 * 3667 * @see PackageManager#checkPermission(String, String) 3668 * @see #checkCallingPermission 3669 */ 3670 @CheckResult(suggest="#enforcePermission(String,int,int,String)") 3671 @PackageManager.PermissionResult checkPermission(@onNull String permission, int pid, int uid)3672 public abstract int checkPermission(@NonNull String permission, int pid, int uid); 3673 3674 /** @hide */ 3675 @PackageManager.PermissionResult checkPermission(@onNull String permission, int pid, int uid, IBinder callerToken)3676 public abstract int checkPermission(@NonNull String permission, int pid, int uid, 3677 IBinder callerToken); 3678 3679 /** 3680 * Determine whether the calling process of an IPC you are handling has been 3681 * granted a particular permission. This is basically the same as calling 3682 * {@link #checkPermission(String, int, int)} with the pid and uid returned 3683 * by {@link android.os.Binder#getCallingPid} and 3684 * {@link android.os.Binder#getCallingUid}. One important difference 3685 * is that if you are not currently processing an IPC, this function 3686 * will always fail. This is done to protect against accidentally 3687 * leaking permissions; you can use {@link #checkCallingOrSelfPermission} 3688 * to avoid this protection. 3689 * 3690 * @param permission The name of the permission being checked. 3691 * 3692 * @return {@link PackageManager#PERMISSION_GRANTED} if the calling 3693 * pid/uid is allowed that permission, or 3694 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3695 * 3696 * @see PackageManager#checkPermission(String, String) 3697 * @see #checkPermission 3698 * @see #checkCallingOrSelfPermission 3699 */ 3700 @CheckResult(suggest="#enforceCallingPermission(String,String)") 3701 @PackageManager.PermissionResult checkCallingPermission(@onNull String permission)3702 public abstract int checkCallingPermission(@NonNull String permission); 3703 3704 /** 3705 * Determine whether the calling process of an IPC <em>or you</em> have been 3706 * granted a particular permission. This is the same as 3707 * {@link #checkCallingPermission}, except it grants your own permissions 3708 * if you are not currently processing an IPC. Use with care! 3709 * 3710 * @param permission The name of the permission being checked. 3711 * 3712 * @return {@link PackageManager#PERMISSION_GRANTED} if the calling 3713 * pid/uid is allowed that permission, or 3714 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3715 * 3716 * @see PackageManager#checkPermission(String, String) 3717 * @see #checkPermission 3718 * @see #checkCallingPermission 3719 */ 3720 @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") 3721 @PackageManager.PermissionResult checkCallingOrSelfPermission(@onNull String permission)3722 public abstract int checkCallingOrSelfPermission(@NonNull String permission); 3723 3724 /** 3725 * Determine whether <em>you</em> have been granted a particular permission. 3726 * 3727 * @param permission The name of the permission being checked. 3728 * 3729 * @return {@link PackageManager#PERMISSION_GRANTED} if you have the 3730 * permission, or {@link PackageManager#PERMISSION_DENIED} if not. 3731 * 3732 * @see PackageManager#checkPermission(String, String) 3733 * @see #checkCallingPermission(String) 3734 */ 3735 @PackageManager.PermissionResult checkSelfPermission(@onNull String permission)3736 public abstract int checkSelfPermission(@NonNull String permission); 3737 3738 /** 3739 * If the given permission is not allowed for a particular process 3740 * and user ID running in the system, throw a {@link SecurityException}. 3741 * 3742 * @param permission The name of the permission being checked. 3743 * @param pid The process ID being checked against. Must be > 0. 3744 * @param uid The user ID being checked against. A uid of 0 is the root 3745 * user, which will pass every permission check. 3746 * @param message A message to include in the exception if it is thrown. 3747 * 3748 * @see #checkPermission(String, int, int) 3749 */ enforcePermission( @onNull String permission, int pid, int uid, @Nullable String message)3750 public abstract void enforcePermission( 3751 @NonNull String permission, int pid, int uid, @Nullable String message); 3752 3753 /** 3754 * If the calling process of an IPC you are handling has not been 3755 * granted a particular permission, throw a {@link 3756 * SecurityException}. This is basically the same as calling 3757 * {@link #enforcePermission(String, int, int, String)} with the 3758 * pid and uid returned by {@link android.os.Binder#getCallingPid} 3759 * and {@link android.os.Binder#getCallingUid}. One important 3760 * difference is that if you are not currently processing an IPC, 3761 * this function will always throw the SecurityException. This is 3762 * done to protect against accidentally leaking permissions; you 3763 * can use {@link #enforceCallingOrSelfPermission} to avoid this 3764 * protection. 3765 * 3766 * @param permission The name of the permission being checked. 3767 * @param message A message to include in the exception if it is thrown. 3768 * 3769 * @see #checkCallingPermission(String) 3770 */ enforceCallingPermission( @onNull String permission, @Nullable String message)3771 public abstract void enforceCallingPermission( 3772 @NonNull String permission, @Nullable String message); 3773 3774 /** 3775 * If neither you nor the calling process of an IPC you are 3776 * handling has been granted a particular permission, throw a 3777 * {@link SecurityException}. This is the same as {@link 3778 * #enforceCallingPermission}, except it grants your own 3779 * permissions if you are not currently processing an IPC. Use 3780 * with care! 3781 * 3782 * @param permission The name of the permission being checked. 3783 * @param message A message to include in the exception if it is thrown. 3784 * 3785 * @see #checkCallingOrSelfPermission(String) 3786 */ enforceCallingOrSelfPermission( @onNull String permission, @Nullable String message)3787 public abstract void enforceCallingOrSelfPermission( 3788 @NonNull String permission, @Nullable String message); 3789 3790 /** 3791 * Grant permission to access a specific Uri to another package, regardless 3792 * of whether that package has general permission to access the Uri's 3793 * content provider. This can be used to grant specific, temporary 3794 * permissions, typically in response to user interaction (such as the 3795 * user opening an attachment that you would like someone else to 3796 * display). 3797 * 3798 * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION 3799 * Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3800 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION 3801 * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to 3802 * start an activity instead of this function directly. If you use this 3803 * function directly, you should be sure to call 3804 * {@link #revokeUriPermission} when the target should no longer be allowed 3805 * to access it. 3806 * 3807 * <p>To succeed, the content provider owning the Uri must have set the 3808 * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions 3809 * grantUriPermissions} attribute in its manifest or included the 3810 * {@link android.R.styleable#AndroidManifestGrantUriPermission 3811 * <grant-uri-permissions>} tag. 3812 * 3813 * @param toPackage The package you would like to allow to access the Uri. 3814 * @param uri The Uri you would like to grant access to. 3815 * @param modeFlags The desired access modes. Any combination of 3816 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION 3817 * Intent.FLAG_GRANT_READ_URI_PERMISSION}, 3818 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION 3819 * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}, 3820 * {@link Intent#FLAG_GRANT_PERSISTABLE_URI_PERMISSION 3821 * Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION}, or 3822 * {@link Intent#FLAG_GRANT_PREFIX_URI_PERMISSION 3823 * Intent.FLAG_GRANT_PREFIX_URI_PERMISSION}. 3824 * 3825 * @see #revokeUriPermission 3826 */ grantUriPermission(String toPackage, Uri uri, @Intent.GrantUriMode int modeFlags)3827 public abstract void grantUriPermission(String toPackage, Uri uri, 3828 @Intent.GrantUriMode int modeFlags); 3829 3830 /** 3831 * Remove all permissions to access a particular content provider Uri 3832 * that were previously added with {@link #grantUriPermission}. The given 3833 * Uri will match all previously granted Uris that are the same or a 3834 * sub-path of the given Uri. That is, revoking "content://foo/target" will 3835 * revoke both "content://foo/target" and "content://foo/target/sub", but not 3836 * "content://foo". It will not remove any prefix grants that exist at a 3837 * higher level. 3838 * 3839 * <p>Prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, if you did not have 3840 * regular permission access to a Uri, but had received access to it through 3841 * a specific Uri permission grant, you could not revoke that grant with this 3842 * function and a {@link SecurityException} would be thrown. As of 3843 * {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this function will not throw a security exception, 3844 * but will remove whatever permission grants to the Uri had been given to the app 3845 * (or none).</p> 3846 * 3847 * @param uri The Uri you would like to revoke access to. 3848 * @param modeFlags The desired access modes. Any combination of 3849 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION 3850 * Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3851 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION 3852 * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3853 * 3854 * @see #grantUriPermission 3855 */ revokeUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags)3856 public abstract void revokeUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags); 3857 3858 /** 3859 * Determine whether a particular process and user ID has been granted 3860 * permission to access a specific URI. This only checks for permissions 3861 * that have been explicitly granted -- if the given process/uid has 3862 * more general access to the URI's content provider then this check will 3863 * always fail. 3864 * 3865 * @param uri The uri that is being checked. 3866 * @param pid The process ID being checked against. Must be > 0. 3867 * @param uid The user ID being checked against. A uid of 0 is the root 3868 * user, which will pass every permission check. 3869 * @param modeFlags The type of access to grant. May be one or both of 3870 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3871 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3872 * 3873 * @return {@link PackageManager#PERMISSION_GRANTED} if the given 3874 * pid/uid is allowed to access that uri, or 3875 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3876 * 3877 * @see #checkCallingUriPermission 3878 */ 3879 @CheckResult(suggest="#enforceUriPermission(Uri,int,int,String)") checkUriPermission(Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags)3880 public abstract int checkUriPermission(Uri uri, int pid, int uid, 3881 @Intent.AccessUriMode int modeFlags); 3882 3883 /** @hide */ checkUriPermission(Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, IBinder callerToken)3884 public abstract int checkUriPermission(Uri uri, int pid, int uid, 3885 @Intent.AccessUriMode int modeFlags, IBinder callerToken); 3886 3887 /** 3888 * Determine whether the calling process and user ID has been 3889 * granted permission to access a specific URI. This is basically 3890 * the same as calling {@link #checkUriPermission(Uri, int, int, 3891 * int)} with the pid and uid returned by {@link 3892 * android.os.Binder#getCallingPid} and {@link 3893 * android.os.Binder#getCallingUid}. One important difference is 3894 * that if you are not currently processing an IPC, this function 3895 * will always fail. 3896 * 3897 * @param uri The uri that is being checked. 3898 * @param modeFlags The type of access to grant. May be one or both of 3899 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3900 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3901 * 3902 * @return {@link PackageManager#PERMISSION_GRANTED} if the caller 3903 * is allowed to access that uri, or 3904 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3905 * 3906 * @see #checkUriPermission(Uri, int, int, int) 3907 */ 3908 @CheckResult(suggest="#enforceCallingUriPermission(Uri,int,String)") checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags)3909 public abstract int checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags); 3910 3911 /** 3912 * Determine whether the calling process of an IPC <em>or you</em> has been granted 3913 * permission to access a specific URI. This is the same as 3914 * {@link #checkCallingUriPermission}, except it grants your own permissions 3915 * if you are not currently processing an IPC. Use with care! 3916 * 3917 * @param uri The uri that is being checked. 3918 * @param modeFlags The type of access to grant. May be one or both of 3919 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3920 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3921 * 3922 * @return {@link PackageManager#PERMISSION_GRANTED} if the caller 3923 * is allowed to access that uri, or 3924 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3925 * 3926 * @see #checkCallingUriPermission 3927 */ 3928 @CheckResult(suggest="#enforceCallingOrSelfUriPermission(Uri,int,String)") checkCallingOrSelfUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags)3929 public abstract int checkCallingOrSelfUriPermission(Uri uri, 3930 @Intent.AccessUriMode int modeFlags); 3931 3932 /** 3933 * Check both a Uri and normal permission. This allows you to perform 3934 * both {@link #checkPermission} and {@link #checkUriPermission} in one 3935 * call. 3936 * 3937 * @param uri The Uri whose permission is to be checked, or null to not 3938 * do this check. 3939 * @param readPermission The permission that provides overall read access, 3940 * or null to not do this check. 3941 * @param writePermission The permission that provides overall write 3942 * access, or null to not do this check. 3943 * @param pid The process ID being checked against. Must be > 0. 3944 * @param uid The user ID being checked against. A uid of 0 is the root 3945 * user, which will pass every permission check. 3946 * @param modeFlags The type of access to grant. May be one or both of 3947 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3948 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3949 * 3950 * @return {@link PackageManager#PERMISSION_GRANTED} if the caller 3951 * is allowed to access that uri or holds one of the given permissions, or 3952 * {@link PackageManager#PERMISSION_DENIED} if it is not. 3953 */ 3954 @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)3955 public abstract int checkUriPermission(@Nullable Uri uri, @Nullable String readPermission, 3956 @Nullable String writePermission, int pid, int uid, 3957 @Intent.AccessUriMode int modeFlags); 3958 3959 /** 3960 * If a particular process and user ID has not been granted 3961 * permission to access a specific URI, throw {@link 3962 * SecurityException}. This only checks for permissions that have 3963 * been explicitly granted -- if the given process/uid has more 3964 * general access to the URI's content provider then this check 3965 * will always fail. 3966 * 3967 * @param uri The uri that is being checked. 3968 * @param pid The process ID being checked against. Must be > 0. 3969 * @param uid The user ID being checked against. A uid of 0 is the root 3970 * user, which will pass every permission check. 3971 * @param modeFlags The type of access to grant. May be one or both of 3972 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3973 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3974 * @param message A message to include in the exception if it is thrown. 3975 * 3976 * @see #checkUriPermission(Uri, int, int, int) 3977 */ enforceUriPermission( Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message)3978 public abstract void enforceUriPermission( 3979 Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message); 3980 3981 /** 3982 * If the calling process and user ID has not been granted 3983 * permission to access a specific URI, throw {@link 3984 * SecurityException}. This is basically the same as calling 3985 * {@link #enforceUriPermission(Uri, int, int, int, String)} with 3986 * the pid and uid returned by {@link 3987 * android.os.Binder#getCallingPid} and {@link 3988 * android.os.Binder#getCallingUid}. One important difference is 3989 * that if you are not currently processing an IPC, this function 3990 * will always throw a SecurityException. 3991 * 3992 * @param uri The uri that is being checked. 3993 * @param modeFlags The type of access to grant. May be one or both of 3994 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 3995 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 3996 * @param message A message to include in the exception if it is thrown. 3997 * 3998 * @see #checkCallingUriPermission(Uri, int) 3999 */ enforceCallingUriPermission( Uri uri, @Intent.AccessUriMode int modeFlags, String message)4000 public abstract void enforceCallingUriPermission( 4001 Uri uri, @Intent.AccessUriMode int modeFlags, String message); 4002 4003 /** 4004 * If the calling process of an IPC <em>or you</em> has not been 4005 * granted permission to access a specific URI, throw {@link 4006 * SecurityException}. This is the same as {@link 4007 * #enforceCallingUriPermission}, except it grants your own 4008 * permissions if you are not currently processing an IPC. Use 4009 * with care! 4010 * 4011 * @param uri The uri that is being checked. 4012 * @param modeFlags The type of access to grant. May be one or both of 4013 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 4014 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 4015 * @param message A message to include in the exception if it is thrown. 4016 * 4017 * @see #checkCallingOrSelfUriPermission(Uri, int) 4018 */ enforceCallingOrSelfUriPermission( Uri uri, @Intent.AccessUriMode int modeFlags, String message)4019 public abstract void enforceCallingOrSelfUriPermission( 4020 Uri uri, @Intent.AccessUriMode int modeFlags, String message); 4021 4022 /** 4023 * Enforce both a Uri and normal permission. This allows you to perform 4024 * both {@link #enforcePermission} and {@link #enforceUriPermission} in one 4025 * call. 4026 * 4027 * @param uri The Uri whose permission is to be checked, or null to not 4028 * do this check. 4029 * @param readPermission The permission that provides overall read access, 4030 * or null to not do this check. 4031 * @param writePermission The permission that provides overall write 4032 * access, or null to not do this check. 4033 * @param pid The process ID being checked against. Must be > 0. 4034 * @param uid The user ID being checked against. A uid of 0 is the root 4035 * user, which will pass every permission check. 4036 * @param modeFlags The type of access to grant. May be one or both of 4037 * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or 4038 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}. 4039 * @param message A message to include in the exception if it is thrown. 4040 * 4041 * @see #checkUriPermission(Uri, String, String, int, int, int) 4042 */ enforceUriPermission( @ullable Uri uri, @Nullable String readPermission, @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags, @Nullable String message)4043 public abstract void enforceUriPermission( 4044 @Nullable Uri uri, @Nullable String readPermission, 4045 @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags, 4046 @Nullable String message); 4047 4048 /** @hide */ 4049 @IntDef(flag = true, 4050 value = {CONTEXT_INCLUDE_CODE, CONTEXT_IGNORE_SECURITY, CONTEXT_RESTRICTED}) 4051 @Retention(RetentionPolicy.SOURCE) 4052 public @interface CreatePackageOptions {} 4053 4054 /** 4055 * Flag for use with {@link #createPackageContext}: include the application 4056 * code with the context. This means loading code into the caller's 4057 * process, so that {@link #getClassLoader()} can be used to instantiate 4058 * the application's classes. Setting this flags imposes security 4059 * restrictions on what application context you can access; if the 4060 * requested application can not be safely loaded into your process, 4061 * java.lang.SecurityException will be thrown. If this flag is not set, 4062 * there will be no restrictions on the packages that can be loaded, 4063 * but {@link #getClassLoader} will always return the default system 4064 * class loader. 4065 */ 4066 public static final int CONTEXT_INCLUDE_CODE = 0x00000001; 4067 4068 /** 4069 * Flag for use with {@link #createPackageContext}: ignore any security 4070 * restrictions on the Context being requested, allowing it to always 4071 * be loaded. For use with {@link #CONTEXT_INCLUDE_CODE} to allow code 4072 * to be loaded into a process even when it isn't safe to do so. Use 4073 * with extreme care! 4074 */ 4075 public static final int CONTEXT_IGNORE_SECURITY = 0x00000002; 4076 4077 /** 4078 * Flag for use with {@link #createPackageContext}: a restricted context may 4079 * disable specific features. For instance, a View associated with a restricted 4080 * context would ignore particular XML attributes. 4081 */ 4082 public static final int CONTEXT_RESTRICTED = 0x00000004; 4083 4084 /** 4085 * Flag for use with {@link #createPackageContext}: point all file APIs at 4086 * device-protected storage. 4087 * 4088 * @hide 4089 */ 4090 public static final int CONTEXT_DEVICE_PROTECTED_STORAGE = 0x00000008; 4091 4092 /** 4093 * Flag for use with {@link #createPackageContext}: point all file APIs at 4094 * credential-protected storage. 4095 * 4096 * @hide 4097 */ 4098 public static final int CONTEXT_CREDENTIAL_PROTECTED_STORAGE = 0x00000010; 4099 4100 /** 4101 * @hide Used to indicate we should tell the activity manager about the process 4102 * loading this code. 4103 */ 4104 public static final int CONTEXT_REGISTER_PACKAGE = 0x40000000; 4105 4106 /** 4107 * Return a new Context object for the given application name. This 4108 * Context is the same as what the named application gets when it is 4109 * launched, containing the same resources and class loader. Each call to 4110 * this method returns a new instance of a Context object; Context objects 4111 * are not shared, however they share common state (Resources, ClassLoader, 4112 * etc) so the Context instance itself is fairly lightweight. 4113 * 4114 * <p>Throws {@link android.content.pm.PackageManager.NameNotFoundException} if there is no 4115 * application with the given package name. 4116 * 4117 * <p>Throws {@link java.lang.SecurityException} if the Context requested 4118 * can not be loaded into the caller's process for security reasons (see 4119 * {@link #CONTEXT_INCLUDE_CODE} for more information}. 4120 * 4121 * @param packageName Name of the application's package. 4122 * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE} 4123 * or {@link #CONTEXT_IGNORE_SECURITY}. 4124 * 4125 * @return A {@link Context} for the application. 4126 * 4127 * @throws SecurityException 4128 * @throws PackageManager.NameNotFoundException if there is no application with 4129 * the given package name. 4130 */ createPackageContext(String packageName, @CreatePackageOptions int flags)4131 public abstract Context createPackageContext(String packageName, 4132 @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; 4133 4134 /** 4135 * Similar to {@link #createPackageContext(String, int)}, but with a 4136 * different {@link UserHandle}. For example, {@link #getContentResolver()} 4137 * will open any {@link Uri} as the given user. 4138 * 4139 * @hide 4140 */ createPackageContextAsUser( String packageName, int flags, UserHandle user)4141 public abstract Context createPackageContextAsUser( 4142 String packageName, int flags, UserHandle user) 4143 throws PackageManager.NameNotFoundException; 4144 4145 /** 4146 * Creates a context given an {@link android.content.pm.ApplicationInfo}. 4147 * 4148 * @hide 4149 */ createApplicationContext(ApplicationInfo application, int flags)4150 public abstract Context createApplicationContext(ApplicationInfo application, 4151 int flags) throws PackageManager.NameNotFoundException; 4152 4153 /** 4154 * Get the userId associated with this context 4155 * @return user id 4156 * 4157 * @hide 4158 */ 4159 @TestApi getUserId()4160 public abstract @UserIdInt int getUserId(); 4161 4162 /** 4163 * Return a new Context object for the current Context but whose resources 4164 * are adjusted to match the given Configuration. Each call to this method 4165 * returns a new instance of a Context object; Context objects are not 4166 * shared, however common state (ClassLoader, other Resources for the 4167 * same configuration) may be so the Context itself can be fairly lightweight. 4168 * 4169 * @param overrideConfiguration A {@link Configuration} specifying what 4170 * values to modify in the base Configuration of the original Context's 4171 * resources. If the base configuration changes (such as due to an 4172 * orientation change), the resources of this context will also change except 4173 * for those that have been explicitly overridden with a value here. 4174 * 4175 * @return A {@link Context} with the given configuration override. 4176 */ createConfigurationContext( @onNull Configuration overrideConfiguration)4177 public abstract Context createConfigurationContext( 4178 @NonNull Configuration overrideConfiguration); 4179 4180 /** 4181 * Return a new Context object for the current Context but whose resources 4182 * are adjusted to match the metrics of the given Display. Each call to this method 4183 * returns a new instance of a Context object; Context objects are not 4184 * shared, however common state (ClassLoader, other Resources for the 4185 * same configuration) may be so the Context itself can be fairly lightweight. 4186 * 4187 * The returned display Context provides a {@link WindowManager} 4188 * (see {@link #getSystemService(String)}) that is configured to show windows 4189 * on the given display. The WindowManager's {@link WindowManager#getDefaultDisplay} 4190 * method can be used to retrieve the Display from the returned Context. 4191 * 4192 * @param display A {@link Display} object specifying the display 4193 * for whose metrics the Context's resources should be tailored and upon which 4194 * new windows should be shown. 4195 * 4196 * @return A {@link Context} for the display. 4197 */ createDisplayContext(@onNull Display display)4198 public abstract Context createDisplayContext(@NonNull Display display); 4199 4200 /** 4201 * Return a new Context object for the current Context but whose storage 4202 * APIs are backed by device-protected storage. 4203 * <p> 4204 * On devices with direct boot, data stored in this location is encrypted 4205 * with a key tied to the physical device, and it can be accessed 4206 * immediately after the device has booted successfully, both 4207 * <em>before and after</em> the user has authenticated with their 4208 * credentials (such as a lock pattern or PIN). 4209 * <p> 4210 * Because device-protected data is available without user authentication, 4211 * you should carefully limit the data you store using this Context. For 4212 * example, storing sensitive authentication tokens or passwords in the 4213 * device-protected area is strongly discouraged. 4214 * <p> 4215 * If the underlying device does not have the ability to store 4216 * device-protected and credential-protected data using different keys, then 4217 * both storage areas will become available at the same time. They remain as 4218 * two distinct storage locations on disk, and only the window of 4219 * availability changes. 4220 * <p> 4221 * Each call to this method returns a new instance of a Context object; 4222 * Context objects are not shared, however common state (ClassLoader, other 4223 * Resources for the same configuration) may be so the Context itself can be 4224 * fairly lightweight. 4225 * 4226 * @see #isDeviceProtectedStorage() 4227 */ createDeviceProtectedStorageContext()4228 public abstract Context createDeviceProtectedStorageContext(); 4229 4230 /** @removed */ 4231 @Deprecated createDeviceEncryptedStorageContext()4232 public Context createDeviceEncryptedStorageContext() { 4233 return createDeviceProtectedStorageContext(); 4234 } 4235 4236 /** 4237 * Return a new Context object for the current Context but whose storage 4238 * APIs are backed by credential-protected storage. This is the default 4239 * storage area for apps unless 4240 * {@link android.R.attr#defaultToDeviceProtectedStorage} was requested. 4241 * <p> 4242 * On devices with direct boot, data stored in this location is encrypted 4243 * with a key tied to user credentials, which can be accessed 4244 * <em>only after</em> the user has entered their credentials (such as a 4245 * lock pattern or PIN). 4246 * <p> 4247 * If the underlying device does not have the ability to store 4248 * device-protected and credential-protected data using different keys, then 4249 * both storage areas will become available at the same time. They remain as 4250 * two distinct storage locations on disk, and only the window of 4251 * availability changes. 4252 * <p> 4253 * Each call to this method returns a new instance of a Context object; 4254 * Context objects are not shared, however common state (ClassLoader, other 4255 * Resources for the same configuration) may be so the Context itself can be 4256 * fairly lightweight. 4257 * 4258 * @see #isCredentialProtectedStorage() 4259 * @hide 4260 */ 4261 @SystemApi createCredentialProtectedStorageContext()4262 public abstract Context createCredentialProtectedStorageContext(); 4263 4264 /** @removed */ 4265 @Deprecated createCredentialEncryptedStorageContext()4266 public Context createCredentialEncryptedStorageContext() { 4267 return createCredentialProtectedStorageContext(); 4268 } 4269 4270 /** 4271 * Gets the display adjustments holder for this context. This information 4272 * is provided on a per-application or activity basis and is used to simulate lower density 4273 * display metrics for legacy applications and restricted screen sizes. 4274 * 4275 * @param displayId The display id for which to get compatibility info. 4276 * @return The compatibility info holder, or null if not required by the application. 4277 * @hide 4278 */ getDisplayAdjustments(int displayId)4279 public abstract DisplayAdjustments getDisplayAdjustments(int displayId); 4280 4281 /** 4282 * @hide 4283 */ getDisplay()4284 public abstract Display getDisplay(); 4285 4286 /** 4287 * Indicates whether this Context is restricted. 4288 * 4289 * @return {@code true} if this Context is restricted, {@code false} otherwise. 4290 * 4291 * @see #CONTEXT_RESTRICTED 4292 */ isRestricted()4293 public boolean isRestricted() { 4294 return false; 4295 } 4296 4297 /** 4298 * Indicates if the storage APIs of this Context are backed by 4299 * device-protected storage. 4300 * 4301 * @see #createDeviceProtectedStorageContext() 4302 */ isDeviceProtectedStorage()4303 public abstract boolean isDeviceProtectedStorage(); 4304 4305 /** @removed */ 4306 @Deprecated isDeviceEncryptedStorage()4307 public boolean isDeviceEncryptedStorage() { 4308 return isDeviceProtectedStorage(); 4309 } 4310 4311 /** 4312 * Indicates if the storage APIs of this Context are backed by 4313 * credential-protected storage. 4314 * 4315 * @see #createCredentialProtectedStorageContext() 4316 * @hide 4317 */ 4318 @SystemApi isCredentialProtectedStorage()4319 public abstract boolean isCredentialProtectedStorage(); 4320 4321 /** @removed */ 4322 @Deprecated isCredentialEncryptedStorage()4323 public boolean isCredentialEncryptedStorage() { 4324 return isCredentialProtectedStorage(); 4325 } 4326 } 4327