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.CallbackExecutor; 21 import android.annotation.CheckResult; 22 import android.annotation.ColorInt; 23 import android.annotation.ColorRes; 24 import android.annotation.DrawableRes; 25 import android.annotation.IntDef; 26 import android.annotation.NonNull; 27 import android.annotation.Nullable; 28 import android.annotation.RequiresPermission; 29 import android.annotation.StringDef; 30 import android.annotation.StringRes; 31 import android.annotation.StyleRes; 32 import android.annotation.StyleableRes; 33 import android.annotation.SystemApi; 34 import android.annotation.TestApi; 35 import android.annotation.UnsupportedAppUsage; 36 import android.annotation.UserIdInt; 37 import android.app.ActivityManager; 38 import android.app.IApplicationThread; 39 import android.app.IServiceConnection; 40 import android.app.VrManager; 41 import android.content.pm.ApplicationInfo; 42 import android.content.pm.PackageManager; 43 import android.content.res.AssetManager; 44 import android.content.res.ColorStateList; 45 import android.content.res.Configuration; 46 import android.content.res.Resources; 47 import android.content.res.TypedArray; 48 import android.database.DatabaseErrorHandler; 49 import android.database.sqlite.SQLiteDatabase; 50 import android.database.sqlite.SQLiteDatabase.CursorFactory; 51 import android.graphics.Bitmap; 52 import android.graphics.drawable.Drawable; 53 import android.net.Uri; 54 import android.os.Build; 55 import android.os.Bundle; 56 import android.os.Environment; 57 import android.os.Handler; 58 import android.os.HandlerExecutor; 59 import android.os.IBinder; 60 import android.os.Looper; 61 import android.os.StatFs; 62 import android.os.UserHandle; 63 import android.os.UserManager; 64 import android.os.storage.StorageManager; 65 import android.provider.MediaStore; 66 import android.util.AttributeSet; 67 import android.view.Display; 68 import android.view.DisplayAdjustments; 69 import android.view.View; 70 import android.view.ViewDebug; 71 import android.view.WindowManager; 72 import android.view.autofill.AutofillManager.AutofillClient; 73 import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient; 74 import android.view.textclassifier.TextClassificationManager; 75 76 import java.io.File; 77 import java.io.FileInputStream; 78 import java.io.FileNotFoundException; 79 import java.io.FileOutputStream; 80 import java.io.IOException; 81 import java.io.InputStream; 82 import java.lang.annotation.Retention; 83 import java.lang.annotation.RetentionPolicy; 84 import java.util.concurrent.Executor; 85 86 /** 87 * Interface to global information about an application environment. This is 88 * an abstract class whose implementation is provided by 89 * the Android system. It 90 * allows access to application-specific resources and classes, as well as 91 * up-calls for application-level operations such as launching activities, 92 * broadcasting and receiving intents, etc. 93 */ 94 public abstract class Context { 95 /** @hide */ 96 @IntDef(flag = true, prefix = { "MODE_" }, value = { 97 MODE_PRIVATE, 98 MODE_WORLD_READABLE, 99 MODE_WORLD_WRITEABLE, 100 MODE_APPEND, 101 }) 102 @Retention(RetentionPolicy.SOURCE) 103 public @interface FileMode {} 104 105 /** @hide */ 106 @IntDef(flag = true, prefix = { "MODE_" }, value = { 107 MODE_PRIVATE, 108 MODE_WORLD_READABLE, 109 MODE_WORLD_WRITEABLE, 110 MODE_MULTI_PROCESS, 111 }) 112 @Retention(RetentionPolicy.SOURCE) 113 public @interface PreferencesMode {} 114 115 /** @hide */ 116 @IntDef(flag = true, prefix = { "MODE_" }, value = { 117 MODE_PRIVATE, 118 MODE_WORLD_READABLE, 119 MODE_WORLD_WRITEABLE, 120 MODE_ENABLE_WRITE_AHEAD_LOGGING, 121 MODE_NO_LOCALIZED_COLLATORS, 122 }) 123 @Retention(RetentionPolicy.SOURCE) 124 public @interface DatabaseMode {} 125 126 /** 127 * File creation mode: the default mode, where the created file can only 128 * be accessed by the calling application (or all applications sharing the 129 * same user ID). 130 */ 131 public static final int MODE_PRIVATE = 0x0000; 132 133 /** 134 * File creation mode: allow all other applications to have read access to 135 * the created file. 136 * <p> 137 * Starting from {@link android.os.Build.VERSION_CODES#N}, attempting to use this 138 * mode throws a {@link SecurityException}. 139 * 140 * @deprecated Creating world-readable files is very dangerous, and likely 141 * to cause security holes in applications. It is strongly 142 * discouraged; instead, applications should use more formal 143 * mechanism for interactions such as {@link ContentProvider}, 144 * {@link BroadcastReceiver}, and {@link android.app.Service}. 145 * There are no guarantees that this access mode will remain on 146 * a file, such as when it goes through a backup and restore. 147 * @see android.support.v4.content.FileProvider 148 * @see Intent#FLAG_GRANT_WRITE_URI_PERMISSION 149 */ 150 @Deprecated 151 public static final int MODE_WORLD_READABLE = 0x0001; 152 153 /** 154 * File creation mode: allow all other applications to have write access to 155 * the created file. 156 * <p> 157 * Starting from {@link android.os.Build.VERSION_CODES#N}, attempting to use this 158 * mode will throw a {@link SecurityException}. 159 * 160 * @deprecated Creating world-writable files is very dangerous, and likely 161 * to cause security holes in applications. It is strongly 162 * discouraged; instead, applications should use more formal 163 * mechanism for interactions such as {@link ContentProvider}, 164 * {@link BroadcastReceiver}, and {@link android.app.Service}. 165 * There are no guarantees that this access mode will remain on 166 * a file, such as when it goes through a backup and restore. 167 * @see android.support.v4.content.FileProvider 168 * @see Intent#FLAG_GRANT_WRITE_URI_PERMISSION 169 */ 170 @Deprecated 171 public static final int MODE_WORLD_WRITEABLE = 0x0002; 172 173 /** 174 * File creation mode: for use with {@link #openFileOutput}, if the file 175 * already exists then write data to the end of the existing file 176 * instead of erasing it. 177 * @see #openFileOutput 178 */ 179 public static final int MODE_APPEND = 0x8000; 180 181 /** 182 * SharedPreference loading flag: when set, the file on disk will 183 * be checked for modification even if the shared preferences 184 * instance is already loaded in this process. This behavior is 185 * sometimes desired in cases where the application has multiple 186 * processes, all writing to the same SharedPreferences file. 187 * Generally there are better forms of communication between 188 * processes, though. 189 * 190 * <p>This was the legacy (but undocumented) behavior in and 191 * before Gingerbread (Android 2.3) and this flag is implied when 192 * targeting such releases. For applications targeting SDK 193 * versions <em>greater than</em> Android 2.3, this flag must be 194 * explicitly set if desired. 195 * 196 * @see #getSharedPreferences 197 * 198 * @deprecated MODE_MULTI_PROCESS does not work reliably in 199 * some versions of Android, and furthermore does not provide any 200 * mechanism for reconciling concurrent modifications across 201 * processes. Applications should not attempt to use it. Instead, 202 * they should use an explicit cross-process data management 203 * approach such as {@link android.content.ContentProvider ContentProvider}. 204 */ 205 @Deprecated 206 public static final int MODE_MULTI_PROCESS = 0x0004; 207 208 /** 209 * Database open flag: when set, the database is opened with write-ahead 210 * logging enabled by default. 211 * 212 * @see #openOrCreateDatabase(String, int, CursorFactory) 213 * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler) 214 * @see SQLiteDatabase#enableWriteAheadLogging 215 */ 216 public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008; 217 218 /** 219 * Database open flag: when set, the database is opened without support for 220 * localized collators. 221 * 222 * @see #openOrCreateDatabase(String, int, CursorFactory) 223 * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler) 224 * @see SQLiteDatabase#NO_LOCALIZED_COLLATORS 225 */ 226 public static final int MODE_NO_LOCALIZED_COLLATORS = 0x0010; 227 228 /** @hide */ 229 @IntDef(flag = true, prefix = { "BIND_" }, value = { 230 BIND_AUTO_CREATE, 231 BIND_DEBUG_UNBIND, 232 BIND_NOT_FOREGROUND, 233 BIND_ABOVE_CLIENT, 234 BIND_ALLOW_OOM_MANAGEMENT, 235 BIND_WAIVE_PRIORITY, 236 BIND_IMPORTANT, 237 BIND_ADJUST_WITH_ACTIVITY, 238 BIND_NOT_PERCEPTIBLE, 239 BIND_INCLUDE_CAPABILITIES 240 }) 241 @Retention(RetentionPolicy.SOURCE) 242 public @interface BindServiceFlags {} 243 244 /** 245 * Flag for {@link #bindService}: automatically create the service as long 246 * as the binding exists. Note that while this will create the service, 247 * its {@link android.app.Service#onStartCommand} 248 * method will still only be called due to an 249 * explicit call to {@link #startService}. Even without that, though, 250 * this still provides you with access to the service object while the 251 * service is created. 252 * 253 * <p>Note that prior to {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, 254 * not supplying this flag would also impact how important the system 255 * consider's the target service's process to be. When set, the only way 256 * for it to be raised was by binding from a service in which case it will 257 * only be important when that activity is in the foreground. Now to 258 * achieve this behavior you must explicitly supply the new flag 259 * {@link #BIND_ADJUST_WITH_ACTIVITY}. For compatibility, old applications 260 * that don't specify {@link #BIND_AUTO_CREATE} will automatically have 261 * the flags {@link #BIND_WAIVE_PRIORITY} and 262 * {@link #BIND_ADJUST_WITH_ACTIVITY} set for them in order to achieve 263 * the same result. 264 */ 265 public static final int BIND_AUTO_CREATE = 0x0001; 266 267 /** 268 * Flag for {@link #bindService}: include debugging help for mismatched 269 * calls to unbind. When this flag is set, the callstack of the following 270 * {@link #unbindService} call is retained, to be printed if a later 271 * incorrect unbind call is made. Note that doing this requires retaining 272 * information about the binding that was made for the lifetime of the app, 273 * resulting in a leak -- this should only be used for debugging. 274 */ 275 public static final int BIND_DEBUG_UNBIND = 0x0002; 276 277 /** 278 * Flag for {@link #bindService}: don't allow this binding to raise 279 * the target service's process to the foreground scheduling priority. 280 * It will still be raised to at least the same memory priority 281 * as the client (so that its process will not be killable in any 282 * situation where the client is not killable), but for CPU scheduling 283 * purposes it may be left in the background. This only has an impact 284 * in the situation where the binding client is a foreground process 285 * and the target service is in a background process. 286 */ 287 public static final int BIND_NOT_FOREGROUND = 0x0004; 288 289 /** 290 * Flag for {@link #bindService}: indicates that the client application 291 * binding to this service considers the service to be more important than 292 * the app itself. When set, the platform will try to have the out of 293 * memory killer kill the app before it kills the service it is bound to, though 294 * this is not guaranteed to be the case. 295 */ 296 public static final int BIND_ABOVE_CLIENT = 0x0008; 297 298 /** 299 * Flag for {@link #bindService}: allow the process hosting the bound 300 * service to go through its normal memory management. It will be 301 * treated more like a running service, allowing the system to 302 * (temporarily) expunge the process if low on memory or for some other 303 * whim it may have, and being more aggressive about making it a candidate 304 * to be killed (and restarted) if running for a long time. 305 */ 306 public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010; 307 308 /** 309 * Flag for {@link #bindService}: don't impact the scheduling or 310 * memory management priority of the target service's hosting process. 311 * Allows the service's process to be managed on the background LRU list 312 * just like a regular application process in the background. 313 */ 314 public static final int BIND_WAIVE_PRIORITY = 0x0020; 315 316 /** 317 * Flag for {@link #bindService}: this service is very important to 318 * the client, so should be brought to the foreground process level 319 * when the client is. Normally a process can only be raised to the 320 * visibility level by a client, even if that client is in the foreground. 321 */ 322 public static final int BIND_IMPORTANT = 0x0040; 323 324 /** 325 * Flag for {@link #bindService}: If binding from an activity, allow the 326 * target service's process importance to be raised based on whether the 327 * activity is visible to the user, regardless whether another flag is 328 * used to reduce the amount that the client process's overall importance 329 * is used to impact it. 330 */ 331 public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080; 332 333 /** 334 * Flag for {@link #bindService}: If binding from an app that is visible or user-perceptible, 335 * lower the target service's importance to below the perceptible level. This allows 336 * the system to (temporarily) expunge the bound process from memory to make room for more 337 * important user-perceptible processes. 338 */ 339 public static final int BIND_NOT_PERCEPTIBLE = 0x00000100; 340 341 /** 342 * Flag for {@link #bindService}: If binding from an app that has specific capabilities 343 * due to its foreground state such as an activity or foreground service, then this flag will 344 * allow the bound app to get the same capabilities, as long as it has the required permissions 345 * as well. 346 */ 347 public static final int BIND_INCLUDE_CAPABILITIES = 0x000001000; 348 349 /*********** Public flags above this line ***********/ 350 /*********** Hidden flags below this line ***********/ 351 352 /** 353 * Flag for {@link #bindService}: This flag is intended to be used only by the system to adjust 354 * the scheduling policy for IMEs (and any other out-of-process user-visible components that 355 * work closely with the top app) so that UI hosted in such services can have the same 356 * scheduling policy (e.g. SCHED_FIFO when it is enabled and TOP_APP_PRIORITY_BOOST otherwise) 357 * as the actual top-app. 358 * @hide 359 */ 360 public static final int BIND_SCHEDULE_LIKE_TOP_APP = 0x00080000; 361 362 /** 363 * Flag for {@link #bindService}: allow background activity starts from the bound service's 364 * process. 365 * This flag is only respected if the caller is holding 366 * {@link android.Manifest.permission#START_ACTIVITIES_FROM_BACKGROUND}. 367 * @hide 368 */ 369 public static final int BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS = 0x00100000; 370 371 /** 372 * @hide Flag for {@link #bindService}: the service being bound to represents a 373 * protected system component, so must have association restrictions applied to it. 374 * That is, a system config must have one or more allow-association tags limiting 375 * which packages it can interact with. If it does not have any such association 376 * restrictions, a default empty set will be created. 377 */ 378 public static final int BIND_RESTRICT_ASSOCIATIONS = 0x00200000; 379 380 /** 381 * @hide Flag for {@link #bindService}: allows binding to a service provided 382 * by an instant app. Note that the caller may not have access to the instant 383 * app providing the service which is a violation of the instant app sandbox. 384 * This flag is intended ONLY for development/testing and should be used with 385 * great care. Only the system is allowed to use this flag. 386 */ 387 public static final int BIND_ALLOW_INSTANT = 0x00400000; 388 389 /** 390 * @hide Flag for {@link #bindService}: like {@link #BIND_NOT_FOREGROUND}, but puts it 391 * up in to the important background state (instead of transient). 392 */ 393 public static final int BIND_IMPORTANT_BACKGROUND = 0x00800000; 394 395 /** 396 * @hide Flag for {@link #bindService}: allows application hosting service to manage whitelists 397 * such as temporary allowing a {@code PendingIntent} to bypass Power Save mode. 398 */ 399 public static final int BIND_ALLOW_WHITELIST_MANAGEMENT = 0x01000000; 400 401 /** 402 * @hide Flag for {@link #bindService}: Like {@link #BIND_FOREGROUND_SERVICE}, 403 * but only applies while the device is awake. 404 */ 405 public static final int BIND_FOREGROUND_SERVICE_WHILE_AWAKE = 0x02000000; 406 407 /** 408 * @hide Flag for {@link #bindService}: For only the case where the binding 409 * is coming from the system, set the process state to FOREGROUND_SERVICE 410 * instead of the normal maximum of IMPORTANT_FOREGROUND. That is, this is 411 * saying that the process shouldn't participate in the normal power reduction 412 * modes (removing network access etc). 413 */ 414 public static final int BIND_FOREGROUND_SERVICE = 0x04000000; 415 416 /** 417 * @hide Flag for {@link #bindService}: Treat the binding as hosting 418 * an activity, an unbinding as the activity going in the background. 419 * That is, when unbinding, the process when empty will go on the activity 420 * LRU list instead of the regular one, keeping it around more aggressively 421 * than it otherwise would be. This is intended for use with IMEs to try 422 * to keep IME processes around for faster keyboard switching. 423 */ 424 public static final int BIND_TREAT_LIKE_ACTIVITY = 0x08000000; 425 426 /** 427 * @hide An idea that is not yet implemented. 428 * Flag for {@link #bindService}: If binding from an activity, consider 429 * this service to be visible like the binding activity is. That is, 430 * it will be treated as something more important to keep around than 431 * invisible background activities. This will impact the number of 432 * recent activities the user can switch between without having them 433 * restart. There is no guarantee this will be respected, as the system 434 * tries to balance such requests from one app vs. the importance of 435 * keeping other apps around. 436 */ 437 public static final int BIND_VISIBLE = 0x10000000; 438 439 /** 440 * @hide 441 * Flag for {@link #bindService}: Consider this binding to be causing the target 442 * process to be showing UI, so it will be do a UI_HIDDEN memory trim when it goes 443 * away. 444 */ 445 public static final int BIND_SHOWING_UI = 0x20000000; 446 447 /** 448 * Flag for {@link #bindService}: Don't consider the bound service to be 449 * visible, even if the caller is visible. 450 * @hide 451 */ 452 public static final int BIND_NOT_VISIBLE = 0x40000000; 453 454 /** 455 * Flag for {@link #bindService}: The service being bound is an 456 * {@link android.R.attr#isolatedProcess isolated}, 457 * {@link android.R.attr#externalService external} service. This binds the service into the 458 * calling application's package, rather than the package in which the service is declared. 459 * <p> 460 * When using this flag, the code for the service being bound will execute under the calling 461 * application's package name and user ID. Because the service must be an isolated process, 462 * it will not have direct access to the application's data, though. 463 * 464 * The purpose of this flag is to allow applications to provide services that are attributed 465 * to the app using the service, rather than the application providing the service. 466 * </p> 467 */ 468 public static final int BIND_EXTERNAL_SERVICE = 0x80000000; 469 470 /** 471 * These bind flags reduce the strength of the binding such that we shouldn't 472 * consider it as pulling the process up to the level of the one that is bound to it. 473 * @hide 474 */ 475 public static final int BIND_REDUCTION_FLAGS = 476 Context.BIND_ALLOW_OOM_MANAGEMENT | Context.BIND_WAIVE_PRIORITY 477 | Context.BIND_NOT_PERCEPTIBLE | Context.BIND_NOT_VISIBLE; 478 479 /** @hide */ 480 @IntDef(flag = true, prefix = { "RECEIVER_VISIBLE_" }, value = { 481 RECEIVER_VISIBLE_TO_INSTANT_APPS 482 }) 483 @Retention(RetentionPolicy.SOURCE) 484 public @interface RegisterReceiverFlags {} 485 486 /** 487 * Flag for {@link #registerReceiver}: The receiver can receive broadcasts from Instant Apps. 488 */ 489 public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 0x1; 490 491 /** 492 * Returns an AssetManager instance for the application's package. 493 * <p> 494 * <strong>Note:</strong> Implementations of this method should return 495 * an AssetManager instance that is consistent with the Resources instance 496 * returned by {@link #getResources()}. For example, they should share the 497 * same {@link Configuration} object. 498 * 499 * @return an AssetManager instance for the application's package 500 * @see #getResources() 501 */ 502 public abstract AssetManager getAssets(); 503 504 /** 505 * Returns a Resources instance for the application's package. 506 * <p> 507 * <strong>Note:</strong> Implementations of this method should return 508 * a Resources instance that is consistent with the AssetManager instance 509 * returned by {@link #getAssets()}. For example, they should share the 510 * same {@link Configuration} object. 511 * 512 * @return a Resources instance for the application's package 513 * @see #getAssets() 514 */ 515 public abstract Resources getResources(); 516 517 /** Return PackageManager instance to find global package information. */ 518 public abstract PackageManager getPackageManager(); 519 520 /** Return a ContentResolver instance for your application's package. */ 521 public abstract ContentResolver getContentResolver(); 522 523 /** 524 * Return the Looper for the main thread of the current process. This is 525 * the thread used to dispatch calls to application components (activities, 526 * services, etc). 527 * <p> 528 * By definition, this method returns the same result as would be obtained 529 * by calling {@link Looper#getMainLooper() Looper.getMainLooper()}. 530 * </p> 531 * 532 * @return The main looper. 533 */ 534 public abstract Looper getMainLooper(); 535 536 /** 537 * Return an {@link Executor} that will run enqueued tasks on the main 538 * thread associated with this context. This is the thread used to dispatch 539 * calls to application components (activities, services, etc). 540 */ 541 public Executor getMainExecutor() { 542 // This is pretty inefficient, which is why ContextImpl overrides it 543 return new HandlerExecutor(new Handler(getMainLooper())); 544 } 545 546 /** 547 * Return the context of the single, global Application object of the 548 * current process. This generally should only be used if you need a 549 * Context whose lifecycle is separate from the current context, that is 550 * tied to the lifetime of the process rather than the current component. 551 * 552 * <p>Consider for example how this interacts with 553 * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}: 554 * <ul> 555 * <li> <p>If used from an Activity context, the receiver is being registered 556 * within that activity. This means that you are expected to unregister 557 * before the activity is done being destroyed; in fact if you do not do 558 * so, the framework will clean up your leaked registration as it removes 559 * the activity and log an error. Thus, if you use the Activity context 560 * to register a receiver that is static (global to the process, not 561 * associated with an Activity instance) then that registration will be 562 * removed on you at whatever point the activity you used is destroyed. 563 * <li> <p>If used from the Context returned here, the receiver is being 564 * registered with the global state associated with your application. Thus 565 * it will never be unregistered for you. This is necessary if the receiver 566 * is associated with static data, not a particular component. However 567 * using the ApplicationContext elsewhere can easily lead to serious leaks 568 * if you forget to unregister, unbind, etc. 569 * </ul> 570 */ 571 public abstract Context getApplicationContext(); 572 573 /** Non-activity related autofill ids are unique in the app */ 574 private static int sLastAutofillId = View.NO_ID; 575 576 /** 577 * Gets the next autofill ID. 578 * 579 * <p>All IDs will be smaller or the same as {@link View#LAST_APP_AUTOFILL_ID}. All IDs 580 * returned will be unique. 581 * 582 * @return A ID that is unique in the process 583 * 584 * {@hide} 585 */ 586 public int getNextAutofillId() { 587 if (sLastAutofillId == View.LAST_APP_AUTOFILL_ID - 1) { 588 sLastAutofillId = View.NO_ID; 589 } 590 591 sLastAutofillId++; 592 593 return sLastAutofillId; 594 } 595 596 /** 597 * Add a new {@link ComponentCallbacks} to the base application of the 598 * Context, which will be called at the same times as the ComponentCallbacks 599 * methods of activities and other components are called. Note that you 600 * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when 601 * appropriate in the future; this will not be removed for you. 602 * 603 * @param callback The interface to call. This can be either a 604 * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface. 605 */ 606 public void registerComponentCallbacks(ComponentCallbacks callback) { 607 getApplicationContext().registerComponentCallbacks(callback); 608 } 609 610 /** 611 * Remove a {@link ComponentCallbacks} object that was previously registered 612 * with {@link #registerComponentCallbacks(ComponentCallbacks)}. 613 */ 614 public void unregisterComponentCallbacks(ComponentCallbacks callback) { 615 getApplicationContext().unregisterComponentCallbacks(callback); 616 } 617 618 /** 619 * Return a localized, styled CharSequence from the application's package's 620 * default string table. 621 * 622 * @param resId Resource id for the CharSequence text 623 */ 624 @NonNull 625 public final CharSequence getText(@StringRes int resId) { 626 return getResources().getText(resId); 627 } 628 629 /** 630 * Returns a localized string from the application's package's 631 * default string table. 632 * 633 * @param resId Resource id for the string 634 * @return The string data associated with the resource, stripped of styled 635 * text information. 636 */ 637 @NonNull 638 public final String getString(@StringRes int resId) { 639 return getResources().getString(resId); 640 } 641 642 /** 643 * Returns a localized formatted string from the application's package's 644 * default string table, substituting the format arguments as defined in 645 * {@link java.util.Formatter} and {@link java.lang.String#format}. 646 * 647 * @param resId Resource id for the format string 648 * @param formatArgs The format arguments that will be used for 649 * substitution. 650 * @return The string data associated with the resource, formatted and 651 * stripped of styled text information. 652 */ 653 @NonNull 654 public final String getString(@StringRes int resId, Object... formatArgs) { 655 return getResources().getString(resId, formatArgs); 656 } 657 658 /** 659 * Returns a color associated with a particular resource ID and styled for 660 * the current theme. 661 * 662 * @param id The desired resource identifier, as generated by the aapt 663 * tool. This integer encodes the package, type, and resource 664 * entry. The value 0 is an invalid identifier. 665 * @return A single color value in the form 0xAARRGGBB. 666 * @throws android.content.res.Resources.NotFoundException if the given ID 667 * does not exist. 668 */ 669 @ColorInt 670 public final int getColor(@ColorRes int id) { 671 return getResources().getColor(id, getTheme()); 672 } 673 674 /** 675 * Returns a drawable object associated with a particular resource ID and 676 * styled for the current theme. 677 * 678 * @param id The desired resource identifier, as generated by the aapt 679 * tool. This integer encodes the package, type, and resource 680 * entry. The value 0 is an invalid identifier. 681 * @return An object that can be used to draw this resource. 682 * @throws android.content.res.Resources.NotFoundException if the given ID 683 * does not exist. 684 */ 685 @Nullable 686 public final Drawable getDrawable(@DrawableRes int id) { 687 return getResources().getDrawable(id, getTheme()); 688 } 689 690 /** 691 * Returns a color state list associated with a particular resource ID and 692 * styled for the current theme. 693 * 694 * @param id The desired resource identifier, as generated by the aapt 695 * tool. This integer encodes the package, type, and resource 696 * entry. The value 0 is an invalid identifier. 697 * @return A color state list. 698 * @throws android.content.res.Resources.NotFoundException if the given ID 699 * does not exist. 700 */ 701 @NonNull 702 public final ColorStateList getColorStateList(@ColorRes int id) { 703 return getResources().getColorStateList(id, getTheme()); 704 } 705 706 /** 707 * Set the base theme for this context. Note that this should be called 708 * before any views are instantiated in the Context (for example before 709 * calling {@link android.app.Activity#setContentView} or 710 * {@link android.view.LayoutInflater#inflate}). 711 * 712 * @param resid The style resource describing the theme. 713 */ 714 public abstract void setTheme(@StyleRes int resid); 715 716 /** @hide Needed for some internal implementation... not public because 717 * you can't assume this actually means anything. */ 718 @UnsupportedAppUsage 719 public int getThemeResId() { 720 return 0; 721 } 722 723 /** 724 * Return the Theme object associated with this Context. 725 */ 726 @ViewDebug.ExportedProperty(deepExport = true) 727 public abstract Resources.Theme getTheme(); 728 729 /** 730 * Retrieve styled attribute information in this Context's theme. See 731 * {@link android.content.res.Resources.Theme#obtainStyledAttributes(int[])} 732 * for more information. 733 * 734 * @see android.content.res.Resources.Theme#obtainStyledAttributes(int[]) 735 */ 736 @NonNull 737 public final TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[] attrs) { 738 return getTheme().obtainStyledAttributes(attrs); 739 } 740 741 /** 742 * Retrieve styled attribute information in this Context's theme. See 743 * {@link android.content.res.Resources.Theme#obtainStyledAttributes(int, int[])} 744 * for more information. 745 * 746 * @see android.content.res.Resources.Theme#obtainStyledAttributes(int, int[]) 747 */ 748 @NonNull 749 public final TypedArray obtainStyledAttributes(@StyleRes int resid, 750 @NonNull @StyleableRes int[] attrs) throws Resources.NotFoundException { 751 return getTheme().obtainStyledAttributes(resid, attrs); 752 } 753 754 /** 755 * Retrieve styled attribute information in this Context's theme. See 756 * {@link android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)} 757 * for more information. 758 * 759 * @see android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int) 760 */ 761 @NonNull 762 public final TypedArray obtainStyledAttributes( 763 @Nullable AttributeSet set, @NonNull @StyleableRes int[] attrs) { 764 return getTheme().obtainStyledAttributes(set, attrs, 0, 0); 765 } 766 767 /** 768 * Retrieve styled attribute information in this Context's theme. See 769 * {@link android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)} 770 * for more information. 771 * 772 * @see android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int) 773 */ 774 @NonNull 775 public final TypedArray obtainStyledAttributes(@Nullable AttributeSet set, 776 @NonNull @StyleableRes int[] attrs, @AttrRes int defStyleAttr, 777 @StyleRes int defStyleRes) { 778 return getTheme().obtainStyledAttributes( 779 set, attrs, defStyleAttr, defStyleRes); 780 } 781 782 /** 783 * Return a class loader you can use to retrieve classes in this package. 784 */ 785 public abstract ClassLoader getClassLoader(); 786 787 /** Return the name of this application's package. */ 788 public abstract String getPackageName(); 789 790 /** 791 * @hide Return the name of the base context this context is derived from. 792 * This is the same as {@link #getOpPackageName()} except in 793 * cases where system components are loaded into other app processes, in which 794 * case {@link #getOpPackageName()} will be the name of the primary package in 795 * that process (so that app ops uid verification will work with the name). 796 */ 797 @UnsupportedAppUsage 798 public abstract String getBasePackageName(); 799 800 /** 801 * Return the package name that should be used for {@link android.app.AppOpsManager} calls from 802 * this context, so that app ops manager's uid verification will work with the name. 803 * <p> 804 * This is not generally intended for third party application developers. 805 */ 806 @NonNull 807 public String getOpPackageName() { 808 throw new RuntimeException("Not implemented. Must override in a subclass."); 809 } 810 811 /** Return the full application info for this context's package. */ 812 public abstract ApplicationInfo getApplicationInfo(); 813 814 /** 815 * Return the full path to this context's primary Android package. 816 * The Android package is a ZIP file which contains the application's 817 * primary resources. 818 * 819 * <p>Note: this is not generally useful for applications, since they should 820 * not be directly accessing the file system. 821 * 822 * @return String Path to the resources. 823 */ 824 public abstract String getPackageResourcePath(); 825 826 /** 827 * Return the full path to this context's primary Android package. 828 * The Android package is a ZIP file which contains application's 829 * primary code and assets. 830 * 831 * <p>Note: this is not generally useful for applications, since they should 832 * not be directly accessing the file system. 833 * 834 * @return String Path to the code and assets. 835 */ 836 public abstract String getPackageCodePath(); 837 838 /** 839 * @hide 840 * @deprecated use {@link #getSharedPreferencesPath(String)} 841 */ 842 @Deprecated 843 @UnsupportedAppUsage 844 public File getSharedPrefsFile(String name) { 845 return getSharedPreferencesPath(name); 846 } 847 848 /** 849 * Retrieve and hold the contents of the preferences file 'name', returning 850 * a SharedPreferences through which you can retrieve and modify its 851 * values. Only one instance of the SharedPreferences object is returned 852 * to any callers for the same name, meaning they will see each other's 853 * edits as soon as they are made. 854 * 855 * This method is thead-safe. 856 * 857 * @param name Desired preferences file. If a preferences file by this name 858 * does not exist, it will be created when you retrieve an 859 * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()). 860 * @param mode Operating mode. 861 * 862 * @return The single {@link SharedPreferences} instance that can be used 863 * to retrieve and modify the preference values. 864 * 865 * @see #MODE_PRIVATE 866 */ 867 public abstract SharedPreferences getSharedPreferences(String name, @PreferencesMode int mode); 868 869 /** 870 * Retrieve and hold the contents of the preferences file, returning 871 * a SharedPreferences through which you can retrieve and modify its 872 * values. Only one instance of the SharedPreferences object is returned 873 * to any callers for the same name, meaning they will see each other's 874 * edits as soon as they are made. 875 * 876 * @param file Desired preferences file. If a preferences file by this name 877 * does not exist, it will be created when you retrieve an 878 * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()). 879 * @param mode Operating mode. 880 * 881 * @return The single {@link SharedPreferences} instance that can be used 882 * to retrieve and modify the preference values. 883 * 884 * @see #getSharedPreferencesPath(String) 885 * @see #MODE_PRIVATE 886 * @removed 887 */ 888 public abstract SharedPreferences getSharedPreferences(File file, @PreferencesMode int mode); 889 890 /** 891 * Move an existing shared preferences file from the given source storage 892 * context to this context. This is typically used to migrate data between 893 * storage locations after an upgrade, such as moving to device protected 894 * storage. 895 * 896 * @param sourceContext The source context which contains the existing 897 * shared preferences to move. 898 * @param name The name of the shared preferences file. 899 * @return {@code true} if the move was successful or if the shared 900 * preferences didn't exist in the source context, otherwise 901 * {@code false}. 902 * @see #createDeviceProtectedStorageContext() 903 */ 904 public abstract boolean moveSharedPreferencesFrom(Context sourceContext, String name); 905 906 /** 907 * Delete an existing shared preferences file. 908 * 909 * @param name The name (unique in the application package) of the shared 910 * preferences file. 911 * @return {@code true} if the shared preferences file was successfully 912 * deleted; else {@code false}. 913 * @see #getSharedPreferences(String, int) 914 */ 915 public abstract boolean deleteSharedPreferences(String name); 916 917 /** @hide */ 918 public abstract void reloadSharedPreferences(); 919 920 /** 921 * Open a private file associated with this Context's application package 922 * for reading. 923 * 924 * @param name The name of the file to open; can not contain path 925 * separators. 926 * 927 * @return The resulting {@link FileInputStream}. 928 * 929 * @see #openFileOutput 930 * @see #fileList 931 * @see #deleteFile 932 * @see java.io.FileInputStream#FileInputStream(String) 933 */ 934 public abstract FileInputStream openFileInput(String name) 935 throws FileNotFoundException; 936 937 /** 938 * Open a private file associated with this Context's application package 939 * for writing. Creates the file if it doesn't already exist. 940 * <p> 941 * No additional permissions are required for the calling app to read or 942 * write the returned file. 943 * 944 * @param name The name of the file to open; can not contain path 945 * separators. 946 * @param mode Operating mode. 947 * @return The resulting {@link FileOutputStream}. 948 * @see #MODE_APPEND 949 * @see #MODE_PRIVATE 950 * @see #openFileInput 951 * @see #fileList 952 * @see #deleteFile 953 * @see java.io.FileOutputStream#FileOutputStream(String) 954 */ 955 public abstract FileOutputStream openFileOutput(String name, @FileMode int mode) 956 throws FileNotFoundException; 957 958 /** 959 * Delete the given private file associated with this Context's 960 * application package. 961 * 962 * @param name The name of the file to delete; can not contain path 963 * separators. 964 * 965 * @return {@code true} if the file was successfully deleted; else 966 * {@code false}. 967 * 968 * @see #openFileInput 969 * @see #openFileOutput 970 * @see #fileList 971 * @see java.io.File#delete() 972 */ 973 public abstract boolean deleteFile(String name); 974 975 /** 976 * Returns the absolute path on the filesystem where a file created with 977 * {@link #openFileOutput} is stored. 978 * <p> 979 * The returned path may change over time if the calling app is moved to an 980 * adopted storage device, so only relative paths should be persisted. 981 * 982 * @param name The name of the file for which you would like to get 983 * its path. 984 * 985 * @return An absolute path to the given file. 986 * 987 * @see #openFileOutput 988 * @see #getFilesDir 989 * @see #getDir 990 */ 991 public abstract File getFileStreamPath(String name); 992 993 /** 994 * Returns the absolute path on the filesystem where a file created with 995 * {@link #getSharedPreferences(String, int)} is stored. 996 * <p> 997 * The returned path may change over time if the calling app is moved to an 998 * adopted storage device, so only relative paths should be persisted. 999 * 1000 * @param name The name of the shared preferences for which you would like 1001 * to get a path. 1002 * @return An absolute path to the given file. 1003 * @see #getSharedPreferences(String, int) 1004 * @removed 1005 */ 1006 public abstract File getSharedPreferencesPath(String name); 1007 1008 /** 1009 * Returns the absolute path to the directory on the filesystem where all 1010 * private files belonging to this app are stored. Apps should not use this 1011 * path directly; they should instead use {@link #getFilesDir()}, 1012 * {@link #getCacheDir()}, {@link #getDir(String, int)}, or other storage 1013 * APIs on this class. 1014 * <p> 1015 * The returned path may change over time if the calling app is moved to an 1016 * adopted storage device, so only relative paths should be persisted. 1017 * <p> 1018 * No additional permissions are required for the calling app to read or 1019 * write files under the returned path. 1020 * 1021 * @see ApplicationInfo#dataDir 1022 */ 1023 public abstract File getDataDir(); 1024 1025 /** 1026 * Returns the absolute path to the directory on the filesystem where files 1027 * created with {@link #openFileOutput} are stored. 1028 * <p> 1029 * The returned path may change over time if the calling app is moved to an 1030 * adopted storage device, so only relative paths should be persisted. 1031 * <p> 1032 * No additional permissions are required for the calling app to read or 1033 * write files under the returned path. 1034 * 1035 * @return The path of the directory holding application files. 1036 * @see #openFileOutput 1037 * @see #getFileStreamPath 1038 * @see #getDir 1039 */ 1040 public abstract File getFilesDir(); 1041 1042 /** 1043 * Returns the absolute path to the directory on the filesystem similar to 1044 * {@link #getFilesDir()}. The difference is that files placed under this 1045 * directory will be excluded from automatic backup to remote storage. See 1046 * {@link android.app.backup.BackupAgent BackupAgent} for a full discussion 1047 * of the automatic backup mechanism in Android. 1048 * <p> 1049 * The returned path may change over time if the calling app is moved to an 1050 * adopted storage device, so only relative paths should be persisted. 1051 * <p> 1052 * No additional permissions are required for the calling app to read or 1053 * write files under the returned path. 1054 * 1055 * @return The path of the directory holding application files that will not 1056 * be automatically backed up to remote storage. 1057 * @see #openFileOutput 1058 * @see #getFileStreamPath 1059 * @see #getDir 1060 * @see android.app.backup.BackupAgent 1061 */ 1062 public abstract File getNoBackupFilesDir(); 1063 1064 /** 1065 * Returns the absolute path to the directory on the primary shared/external 1066 * storage device where the application can place persistent files it owns. 1067 * These files are internal to the applications, and not typically visible 1068 * to the user as media. 1069 * <p> 1070 * This is like {@link #getFilesDir()} in that these files will be deleted 1071 * when the application is uninstalled, however there are some important 1072 * differences: 1073 * <ul> 1074 * <li>Shared storage may not always be available, since removable media can 1075 * be ejected by the user. Media state can be checked using 1076 * {@link Environment#getExternalStorageState(File)}. 1077 * <li>There is no security enforced with these files. For example, any 1078 * application holding 1079 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1080 * these files. 1081 * </ul> 1082 * <p> 1083 * If a shared storage device is emulated (as determined by 1084 * {@link Environment#isExternalStorageEmulated(File)}), it's contents are 1085 * backed by a private user data partition, which means there is little 1086 * benefit to storing data here instead of the private directories returned 1087 * by {@link #getFilesDir()}, etc. 1088 * <p> 1089 * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions 1090 * are required to read or write to the returned path; it's always 1091 * accessible to the calling app. This only applies to paths generated for 1092 * package name of the calling application. To access paths belonging to 1093 * other packages, 1094 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} and/or 1095 * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required. 1096 * <p> 1097 * On devices with multiple users (as described by {@link UserManager}), 1098 * each user has their own isolated shared storage. Applications only have 1099 * access to the shared storage for the user they're running as. 1100 * <p> 1101 * The returned path may change over time if different shared storage media 1102 * is inserted, so only relative paths should be persisted. 1103 * <p> 1104 * Here is an example of typical code to manipulate a file in an 1105 * application's shared storage: 1106 * </p> 1107 * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java 1108 * private_file} 1109 * <p> 1110 * If you supply a non-null <var>type</var> to this function, the returned 1111 * file will be a path to a sub-directory of the given type. Though these 1112 * files are not automatically scanned by the media scanner, you can 1113 * explicitly add them to the media database with 1114 * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[], android.media.MediaScannerConnection.OnScanCompletedListener) 1115 * MediaScannerConnection.scanFile}. Note that this is not the same as 1116 * {@link android.os.Environment#getExternalStoragePublicDirectory 1117 * Environment.getExternalStoragePublicDirectory()}, which provides 1118 * directories of media shared by all applications. The directories returned 1119 * here are owned by the application, and their contents will be removed 1120 * when the application is uninstalled. Unlike 1121 * {@link android.os.Environment#getExternalStoragePublicDirectory 1122 * Environment.getExternalStoragePublicDirectory()}, the directory returned 1123 * here will be automatically created for you. 1124 * <p> 1125 * Here is an example of typical code to manipulate a picture in an 1126 * application's shared storage and add it to the media database: 1127 * </p> 1128 * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java 1129 * private_picture} 1130 * 1131 * @param type The type of files directory to return. May be {@code null} 1132 * for the root of the files directory or one of the following 1133 * constants for a subdirectory: 1134 * {@link android.os.Environment#DIRECTORY_MUSIC}, 1135 * {@link android.os.Environment#DIRECTORY_PODCASTS}, 1136 * {@link android.os.Environment#DIRECTORY_RINGTONES}, 1137 * {@link android.os.Environment#DIRECTORY_ALARMS}, 1138 * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS}, 1139 * {@link android.os.Environment#DIRECTORY_PICTURES}, or 1140 * {@link android.os.Environment#DIRECTORY_MOVIES}. 1141 * @return the absolute path to application-specific directory. May return 1142 * {@code null} if shared storage is not currently available. 1143 * @see #getFilesDir 1144 * @see #getExternalFilesDirs(String) 1145 * @see Environment#getExternalStorageState(File) 1146 * @see Environment#isExternalStorageEmulated(File) 1147 * @see Environment#isExternalStorageRemovable(File) 1148 */ 1149 @Nullable 1150 public abstract File getExternalFilesDir(@Nullable String type); 1151 1152 /** 1153 * Returns absolute paths to application-specific directories on all 1154 * shared/external storage devices where the application can place 1155 * persistent files it owns. These files are internal to the application, 1156 * and not typically visible to the user as media. 1157 * <p> 1158 * This is like {@link #getFilesDir()} in that these files will be deleted 1159 * when the application is uninstalled, however there are some important 1160 * differences: 1161 * <ul> 1162 * <li>Shared storage may not always be available, since removable media can 1163 * be ejected by the user. Media state can be checked using 1164 * {@link Environment#getExternalStorageState(File)}. 1165 * <li>There is no security enforced with these files. For example, any 1166 * application holding 1167 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1168 * these files. 1169 * </ul> 1170 * <p> 1171 * If a shared storage device is emulated (as determined by 1172 * {@link Environment#isExternalStorageEmulated(File)}), it's contents are 1173 * backed by a private user data partition, which means there is little 1174 * benefit to storing data here instead of the private directories returned 1175 * by {@link #getFilesDir()}, etc. 1176 * <p> 1177 * Shared storage devices returned here are considered a stable part of the 1178 * device, including physical media slots under a protective cover. The 1179 * returned paths do not include transient devices, such as USB flash drives 1180 * connected to handheld devices. 1181 * <p> 1182 * An application may store data on any or all of the returned devices. For 1183 * example, an app may choose to store large files on the device with the 1184 * most available space, as measured by {@link StatFs}. 1185 * <p> 1186 * No additional permissions are required for the calling app to read or 1187 * write files under the returned path. Write access outside of these paths 1188 * on secondary external storage devices is not available. 1189 * <p> 1190 * The returned path may change over time if different shared storage media 1191 * is inserted, so only relative paths should be persisted. 1192 * 1193 * @param type The type of files directory to return. May be {@code null} 1194 * for the root of the files directory or one of the following 1195 * constants for a subdirectory: 1196 * {@link android.os.Environment#DIRECTORY_MUSIC}, 1197 * {@link android.os.Environment#DIRECTORY_PODCASTS}, 1198 * {@link android.os.Environment#DIRECTORY_RINGTONES}, 1199 * {@link android.os.Environment#DIRECTORY_ALARMS}, 1200 * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS}, 1201 * {@link android.os.Environment#DIRECTORY_PICTURES}, or 1202 * {@link android.os.Environment#DIRECTORY_MOVIES}. 1203 * @return the absolute paths to application-specific directories. Some 1204 * individual paths may be {@code null} if that shared storage is 1205 * not currently available. The first path returned is the same as 1206 * {@link #getExternalFilesDir(String)}. 1207 * @see #getExternalFilesDir(String) 1208 * @see Environment#getExternalStorageState(File) 1209 * @see Environment#isExternalStorageEmulated(File) 1210 * @see Environment#isExternalStorageRemovable(File) 1211 */ 1212 public abstract File[] getExternalFilesDirs(String type); 1213 1214 /** 1215 * Return the primary shared/external storage directory where this 1216 * application's OBB files (if there are any) can be found. Note if the 1217 * application does not have any OBB files, this directory may not exist. 1218 * <p> 1219 * This is like {@link #getFilesDir()} in that these files will be deleted 1220 * when the application is uninstalled, however there are some important 1221 * differences: 1222 * <ul> 1223 * <li>Shared storage may not always be available, since removable media can 1224 * be ejected by the user. Media state can be checked using 1225 * {@link Environment#getExternalStorageState(File)}. 1226 * <li>There is no security enforced with these files. For example, any 1227 * application holding 1228 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1229 * these files. 1230 * </ul> 1231 * <p> 1232 * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions 1233 * are required to read or write to the path that this method returns. 1234 * However, starting from {@link android.os.Build.VERSION_CODES#M}, 1235 * to read the OBB expansion files, you must declare the 1236 * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission in the app manifest and ask for 1237 * permission at runtime as follows: 1238 * </p> 1239 * <p> 1240 * {@code <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" 1241 * android:maxSdkVersion="23" />} 1242 * </p> 1243 * <p> 1244 * Starting from {@link android.os.Build.VERSION_CODES#N}, 1245 * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} 1246 * permission is not required, so dont ask for this 1247 * permission at runtime. To handle both cases, your app must first try to read the OBB file, 1248 * and if it fails, you must request 1249 * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission at runtime. 1250 * </p> 1251 * 1252 * <p> 1253 * The following code snippet shows how to do this: 1254 * </p> 1255 * 1256 * <pre> 1257 * File obb = new File(obb_filename); 1258 * boolean open_failed = false; 1259 * 1260 * try { 1261 * BufferedReader br = new BufferedReader(new FileReader(obb)); 1262 * open_failed = false; 1263 * ReadObbFile(br); 1264 * } catch (IOException e) { 1265 * open_failed = true; 1266 * } 1267 * 1268 * if (open_failed) { 1269 * // request READ_EXTERNAL_STORAGE permission before reading OBB file 1270 * ReadObbFileWithPermission(); 1271 * } 1272 * </pre> 1273 * 1274 * On devices with multiple users (as described by {@link UserManager}), 1275 * multiple users may share the same OBB storage location. Applications 1276 * should ensure that multiple instances running under different users don't 1277 * interfere with each other. 1278 * 1279 * @return the absolute path to application-specific directory. May return 1280 * {@code null} if shared storage is not currently available. 1281 * @see #getObbDirs() 1282 * @see Environment#getExternalStorageState(File) 1283 * @see Environment#isExternalStorageEmulated(File) 1284 * @see Environment#isExternalStorageRemovable(File) 1285 */ 1286 public abstract File getObbDir(); 1287 1288 /** 1289 * Returns absolute paths to application-specific directories on all 1290 * shared/external storage devices where the application's OBB files (if 1291 * there are any) can be found. Note if the application does not have any 1292 * OBB files, these directories may not exist. 1293 * <p> 1294 * This is like {@link #getFilesDir()} in that these files will be deleted 1295 * when the application is uninstalled, however there are some important 1296 * differences: 1297 * <ul> 1298 * <li>Shared storage may not always be available, since removable media can 1299 * be ejected by the user. Media state can be checked using 1300 * {@link Environment#getExternalStorageState(File)}. 1301 * <li>There is no security enforced with these files. For example, any 1302 * application holding 1303 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1304 * these files. 1305 * </ul> 1306 * <p> 1307 * Shared storage devices returned here are considered a stable part of the 1308 * device, including physical media slots under a protective cover. The 1309 * returned paths do not include transient devices, such as USB flash drives 1310 * connected to handheld devices. 1311 * <p> 1312 * An application may store data on any or all of the returned devices. For 1313 * example, an app may choose to store large files on the device with the 1314 * most available space, as measured by {@link StatFs}. 1315 * <p> 1316 * No additional permissions are required for the calling app to read or 1317 * write files under the returned path. Write access outside of these paths 1318 * on secondary external storage devices is not available. 1319 * 1320 * @return the absolute paths to application-specific directories. Some 1321 * individual paths may be {@code null} if that shared storage is 1322 * not currently available. The first path returned is the same as 1323 * {@link #getObbDir()} 1324 * @see #getObbDir() 1325 * @see Environment#getExternalStorageState(File) 1326 * @see Environment#isExternalStorageEmulated(File) 1327 * @see Environment#isExternalStorageRemovable(File) 1328 */ 1329 public abstract File[] getObbDirs(); 1330 1331 /** 1332 * Returns the absolute path to the application specific cache directory on 1333 * the filesystem. 1334 * <p> 1335 * The system will automatically delete files in this directory as disk 1336 * space is needed elsewhere on the device. The system will always delete 1337 * older files first, as reported by {@link File#lastModified()}. If 1338 * desired, you can exert more control over how files are deleted using 1339 * {@link StorageManager#setCacheBehaviorGroup(File, boolean)} and 1340 * {@link StorageManager#setCacheBehaviorTombstone(File, boolean)}. 1341 * <p> 1342 * Apps are strongly encouraged to keep their usage of cache space below the 1343 * quota returned by 1344 * {@link StorageManager#getCacheQuotaBytes(java.util.UUID)}. If your app 1345 * goes above this quota, your cached files will be some of the first to be 1346 * deleted when additional disk space is needed. Conversely, if your app 1347 * stays under this quota, your cached files will be some of the last to be 1348 * deleted when additional disk space is needed. 1349 * <p> 1350 * Note that your cache quota will change over time depending on how 1351 * frequently the user interacts with your app, and depending on how much 1352 * system-wide disk space is used. 1353 * <p> 1354 * The returned path may change over time if the calling app is moved to an 1355 * adopted storage device, so only relative paths should be persisted. 1356 * <p> 1357 * Apps require no extra permissions to read or write to the returned path, 1358 * since this path lives in their private storage. 1359 * 1360 * @return The path of the directory holding application cache files. 1361 * @see #openFileOutput 1362 * @see #getFileStreamPath 1363 * @see #getDir 1364 * @see #getExternalCacheDir 1365 */ 1366 public abstract File getCacheDir(); 1367 1368 /** 1369 * Returns the absolute path to the application specific cache directory on 1370 * the filesystem designed for storing cached code. 1371 * <p> 1372 * The system will delete any files stored in this location both when your 1373 * specific application is upgraded, and when the entire platform is 1374 * upgraded. 1375 * <p> 1376 * This location is optimal for storing compiled or optimized code generated 1377 * by your application at runtime. 1378 * <p> 1379 * The returned path may change over time if the calling app is moved to an 1380 * adopted storage device, so only relative paths should be persisted. 1381 * <p> 1382 * Apps require no extra permissions to read or write to the returned path, 1383 * since this path lives in their private storage. 1384 * 1385 * @return The path of the directory holding application code cache files. 1386 */ 1387 public abstract File getCodeCacheDir(); 1388 1389 /** 1390 * Returns absolute path to application-specific directory on the primary 1391 * shared/external storage device where the application can place cache 1392 * files it owns. These files are internal to the application, and not 1393 * typically visible to the user as media. 1394 * <p> 1395 * This is like {@link #getCacheDir()} in that these files will be deleted 1396 * when the application is uninstalled, however there are some important 1397 * differences: 1398 * <ul> 1399 * <li>The platform does not always monitor the space available in shared 1400 * storage, and thus may not automatically delete these files. Apps should 1401 * always manage the maximum space used in this location. Currently the only 1402 * time files here will be deleted by the platform is when running on 1403 * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and 1404 * {@link Environment#isExternalStorageEmulated(File)} returns true. 1405 * <li>Shared storage may not always be available, since removable media can 1406 * be ejected by the user. Media state can be checked using 1407 * {@link Environment#getExternalStorageState(File)}. 1408 * <li>There is no security enforced with these files. For example, any 1409 * application holding 1410 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1411 * these files. 1412 * </ul> 1413 * <p> 1414 * If a shared storage device is emulated (as determined by 1415 * {@link Environment#isExternalStorageEmulated(File)}), its contents are 1416 * backed by a private user data partition, which means there is little 1417 * benefit to storing data here instead of the private directory returned by 1418 * {@link #getCacheDir()}. 1419 * <p> 1420 * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no permissions 1421 * are required to read or write to the returned path; it's always 1422 * accessible to the calling app. This only applies to paths generated for 1423 * package name of the calling application. To access paths belonging to 1424 * other packages, 1425 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} and/or 1426 * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required. 1427 * <p> 1428 * On devices with multiple users (as described by {@link UserManager}), 1429 * each user has their own isolated shared storage. Applications only have 1430 * access to the shared storage for the user they're running as. 1431 * <p> 1432 * The returned path may change over time if different shared storage media 1433 * is inserted, so only relative paths should be persisted. 1434 * 1435 * @return the absolute path to application-specific directory. May return 1436 * {@code null} if shared storage is not currently available. 1437 * @see #getCacheDir 1438 * @see #getExternalCacheDirs() 1439 * @see Environment#getExternalStorageState(File) 1440 * @see Environment#isExternalStorageEmulated(File) 1441 * @see Environment#isExternalStorageRemovable(File) 1442 */ 1443 @Nullable 1444 public abstract File getExternalCacheDir(); 1445 1446 /** 1447 * Returns absolute path to application-specific directory in the preloaded cache. 1448 * <p>Files stored in the cache directory can be deleted when the device runs low on storage. 1449 * There is no guarantee when these files will be deleted. 1450 * @hide 1451 */ 1452 @Nullable 1453 @SystemApi 1454 public abstract File getPreloadsFileCache(); 1455 1456 /** 1457 * Returns absolute paths to application-specific directories on all 1458 * shared/external storage devices where the application can place cache 1459 * files it owns. These files are internal to the application, and not 1460 * typically visible to the user as media. 1461 * <p> 1462 * This is like {@link #getCacheDir()} in that these files will be deleted 1463 * when the application is uninstalled, however there are some important 1464 * differences: 1465 * <ul> 1466 * <li>The platform does not always monitor the space available in shared 1467 * storage, and thus may not automatically delete these files. Apps should 1468 * always manage the maximum space used in this location. Currently the only 1469 * time files here will be deleted by the platform is when running on 1470 * {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} or later and 1471 * {@link Environment#isExternalStorageEmulated(File)} returns true. 1472 * <li>Shared storage may not always be available, since removable media can 1473 * be ejected by the user. Media state can be checked using 1474 * {@link Environment#getExternalStorageState(File)}. 1475 * <li>There is no security enforced with these files. For example, any 1476 * application holding 1477 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1478 * these files. 1479 * </ul> 1480 * <p> 1481 * If a shared storage device is emulated (as determined by 1482 * {@link Environment#isExternalStorageEmulated(File)}), it's contents are 1483 * backed by a private user data partition, which means there is little 1484 * benefit to storing data here instead of the private directory returned by 1485 * {@link #getCacheDir()}. 1486 * <p> 1487 * Shared storage devices returned here are considered a stable part of the 1488 * device, including physical media slots under a protective cover. The 1489 * returned paths do not include transient devices, such as USB flash drives 1490 * connected to handheld devices. 1491 * <p> 1492 * An application may store data on any or all of the returned devices. For 1493 * example, an app may choose to store large files on the device with the 1494 * most available space, as measured by {@link StatFs}. 1495 * <p> 1496 * No additional permissions are required for the calling app to read or 1497 * write files under the returned path. Write access outside of these paths 1498 * on secondary external storage devices is not available. 1499 * <p> 1500 * The returned paths may change over time if different shared storage media 1501 * is inserted, so only relative paths should be persisted. 1502 * 1503 * @return the absolute paths to application-specific directories. Some 1504 * individual paths may be {@code null} if that shared storage is 1505 * not currently available. The first path returned is the same as 1506 * {@link #getExternalCacheDir()}. 1507 * @see #getExternalCacheDir() 1508 * @see Environment#getExternalStorageState(File) 1509 * @see Environment#isExternalStorageEmulated(File) 1510 * @see Environment#isExternalStorageRemovable(File) 1511 */ 1512 public abstract File[] getExternalCacheDirs(); 1513 1514 /** 1515 * Returns absolute paths to application-specific directories on all 1516 * shared/external storage devices where the application can place media 1517 * files. These files are scanned and made available to other apps through 1518 * {@link MediaStore}. 1519 * <p> 1520 * This is like {@link #getExternalFilesDirs} in that these files will be 1521 * deleted when the application is uninstalled, however there are some 1522 * important differences: 1523 * <ul> 1524 * <li>Shared storage may not always be available, since removable media can 1525 * be ejected by the user. Media state can be checked using 1526 * {@link Environment#getExternalStorageState(File)}. 1527 * <li>There is no security enforced with these files. For example, any 1528 * application holding 1529 * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} can write to 1530 * these files. 1531 * </ul> 1532 * <p> 1533 * Shared storage devices returned here are considered a stable part of the 1534 * device, including physical media slots under a protective cover. The 1535 * returned paths do not include transient devices, such as USB flash drives 1536 * connected to handheld devices. 1537 * <p> 1538 * An application may store data on any or all of the returned devices. For 1539 * example, an app may choose to store large files on the device with the 1540 * most available space, as measured by {@link StatFs}. 1541 * <p> 1542 * No additional permissions are required for the calling app to read or 1543 * write files under the returned path. Write access outside of these paths 1544 * on secondary external storage devices is not available. 1545 * <p> 1546 * The returned paths may change over time if different shared storage media 1547 * is inserted, so only relative paths should be persisted. 1548 * 1549 * @return the absolute paths to application-specific directories. Some 1550 * individual paths may be {@code null} if that shared storage is 1551 * not currently available. 1552 * @see Environment#getExternalStorageState(File) 1553 * @see Environment#isExternalStorageEmulated(File) 1554 * @see Environment#isExternalStorageRemovable(File) 1555 */ 1556 public abstract File[] getExternalMediaDirs(); 1557 1558 /** 1559 * Returns an array of strings naming the private files associated with 1560 * this Context's application package. 1561 * 1562 * @return Array of strings naming the private files. 1563 * 1564 * @see #openFileInput 1565 * @see #openFileOutput 1566 * @see #deleteFile 1567 */ 1568 public abstract String[] fileList(); 1569 1570 /** 1571 * Retrieve, creating if needed, a new directory in which the application 1572 * can place its own custom data files. You can use the returned File 1573 * object to create and access files in this directory. Note that files 1574 * created through a File object will only be accessible by your own 1575 * application; you can only set the mode of the entire directory, not 1576 * of individual files. 1577 * <p> 1578 * The returned path may change over time if the calling app is moved to an 1579 * adopted storage device, so only relative paths should be persisted. 1580 * <p> 1581 * Apps require no extra permissions to read or write to the returned path, 1582 * since this path lives in their private storage. 1583 * 1584 * @param name Name of the directory to retrieve. This is a directory 1585 * that is created as part of your application data. 1586 * @param mode Operating mode. 1587 * 1588 * @return A {@link File} object for the requested directory. The directory 1589 * will have been created if it does not already exist. 1590 * 1591 * @see #openFileOutput(String, int) 1592 */ 1593 public abstract File getDir(String name, @FileMode int mode); 1594 1595 /** 1596 * Open a new private SQLiteDatabase associated with this Context's 1597 * application package. Create the database file if it doesn't exist. 1598 * 1599 * @param name The name (unique in the application package) of the database. 1600 * @param mode Operating mode. 1601 * @param factory An optional factory class that is called to instantiate a 1602 * cursor when query is called. 1603 * @return The contents of a newly created database with the given name. 1604 * @throws android.database.sqlite.SQLiteException if the database file 1605 * could not be opened. 1606 * @see #MODE_PRIVATE 1607 * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING 1608 * @see #MODE_NO_LOCALIZED_COLLATORS 1609 * @see #deleteDatabase 1610 */ 1611 public abstract SQLiteDatabase openOrCreateDatabase(String name, 1612 @DatabaseMode int mode, CursorFactory factory); 1613 1614 /** 1615 * Open a new private SQLiteDatabase associated with this Context's 1616 * application package. Creates the database file if it doesn't exist. 1617 * <p> 1618 * Accepts input param: a concrete instance of {@link DatabaseErrorHandler} 1619 * to be used to handle corruption when sqlite reports database corruption. 1620 * </p> 1621 * 1622 * @param name The name (unique in the application package) of the database. 1623 * @param mode Operating mode. 1624 * @param factory An optional factory class that is called to instantiate a 1625 * cursor when query is called. 1626 * @param errorHandler the {@link DatabaseErrorHandler} to be used when 1627 * sqlite reports database corruption. if null, 1628 * {@link android.database.DefaultDatabaseErrorHandler} is 1629 * assumed. 1630 * @return The contents of a newly created database with the given name. 1631 * @throws android.database.sqlite.SQLiteException if the database file 1632 * could not be opened. 1633 * @see #MODE_PRIVATE 1634 * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING 1635 * @see #MODE_NO_LOCALIZED_COLLATORS 1636 * @see #deleteDatabase 1637 */ 1638 public abstract SQLiteDatabase openOrCreateDatabase(String name, 1639 @DatabaseMode int mode, CursorFactory factory, 1640 @Nullable DatabaseErrorHandler errorHandler); 1641 1642 /** 1643 * Move an existing database file from the given source storage context to 1644 * this context. This is typically used to migrate data between storage 1645 * locations after an upgrade, such as migrating to device protected 1646 * storage. 1647 * <p> 1648 * The database must be closed before being moved. 1649 * 1650 * @param sourceContext The source context which contains the existing 1651 * database to move. 1652 * @param name The name of the database file. 1653 * @return {@code true} if the move was successful or if the database didn't 1654 * exist in the source context, otherwise {@code false}. 1655 * @see #createDeviceProtectedStorageContext() 1656 */ 1657 public abstract boolean moveDatabaseFrom(Context sourceContext, String name); 1658 1659 /** 1660 * Delete an existing private SQLiteDatabase associated with this Context's 1661 * application package. 1662 * 1663 * @param name The name (unique in the application package) of the 1664 * database. 1665 * 1666 * @return {@code true} if the database was successfully deleted; else {@code false}. 1667 * 1668 * @see #openOrCreateDatabase 1669 */ 1670 public abstract boolean deleteDatabase(String name); 1671 1672 /** 1673 * Returns the absolute path on the filesystem where a database created with 1674 * {@link #openOrCreateDatabase} is stored. 1675 * <p> 1676 * The returned path may change over time if the calling app is moved to an 1677 * adopted storage device, so only relative paths should be persisted. 1678 * 1679 * @param name The name of the database for which you would like to get 1680 * its path. 1681 * 1682 * @return An absolute path to the given database. 1683 * 1684 * @see #openOrCreateDatabase 1685 */ 1686 public abstract File getDatabasePath(String name); 1687 1688 /** 1689 * Returns an array of strings naming the private databases associated with 1690 * this Context's application package. 1691 * 1692 * @return Array of strings naming the private databases. 1693 * 1694 * @see #openOrCreateDatabase 1695 * @see #deleteDatabase 1696 */ 1697 public abstract String[] databaseList(); 1698 1699 /** 1700 * @deprecated Use {@link android.app.WallpaperManager#getDrawable 1701 * WallpaperManager.get()} instead. 1702 */ 1703 @Deprecated 1704 public abstract Drawable getWallpaper(); 1705 1706 /** 1707 * @deprecated Use {@link android.app.WallpaperManager#peekDrawable 1708 * WallpaperManager.peek()} instead. 1709 */ 1710 @Deprecated 1711 public abstract Drawable peekWallpaper(); 1712 1713 /** 1714 * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth() 1715 * WallpaperManager.getDesiredMinimumWidth()} instead. 1716 */ 1717 @Deprecated 1718 public abstract int getWallpaperDesiredMinimumWidth(); 1719 1720 /** 1721 * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight() 1722 * WallpaperManager.getDesiredMinimumHeight()} instead. 1723 */ 1724 @Deprecated 1725 public abstract int getWallpaperDesiredMinimumHeight(); 1726 1727 /** 1728 * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap) 1729 * WallpaperManager.set()} instead. 1730 * <p>This method requires the caller to hold the permission 1731 * {@link android.Manifest.permission#SET_WALLPAPER}. 1732 */ 1733 @Deprecated 1734 public abstract void setWallpaper(Bitmap bitmap) throws IOException; 1735 1736 /** 1737 * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream) 1738 * WallpaperManager.set()} instead. 1739 * <p>This method requires the caller to hold the permission 1740 * {@link android.Manifest.permission#SET_WALLPAPER}. 1741 */ 1742 @Deprecated 1743 public abstract void setWallpaper(InputStream data) throws IOException; 1744 1745 /** 1746 * @deprecated Use {@link android.app.WallpaperManager#clear 1747 * WallpaperManager.clear()} instead. 1748 * <p>This method requires the caller to hold the permission 1749 * {@link android.Manifest.permission#SET_WALLPAPER}. 1750 */ 1751 @Deprecated 1752 public abstract void clearWallpaper() throws IOException; 1753 1754 /** 1755 * Same as {@link #startActivity(Intent, Bundle)} with no options 1756 * specified. 1757 * 1758 * @param intent The description of the activity to start. 1759 * 1760 * @throws ActivityNotFoundException 1761 *` 1762 * @see #startActivity(Intent, Bundle) 1763 * @see PackageManager#resolveActivity 1764 */ 1765 public abstract void startActivity(@RequiresPermission Intent intent); 1766 1767 /** 1768 * Version of {@link #startActivity(Intent)} that allows you to specify the 1769 * user the activity will be started for. This is not available to applications 1770 * that are not pre-installed on the system image. 1771 * @param intent The description of the activity to start. 1772 * @param user The UserHandle of the user to start this activity for. 1773 * @throws ActivityNotFoundException 1774 * @hide 1775 */ 1776 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) 1777 @SystemApi 1778 public void startActivityAsUser(@RequiresPermission @NonNull Intent intent, 1779 @NonNull UserHandle user) { 1780 throw new RuntimeException("Not implemented. Must override in a subclass."); 1781 } 1782 1783 /** 1784 * Launch a new activity. You will not receive any information about when 1785 * the activity exits. 1786 * 1787 * <p>Note that if this method is being called from outside of an 1788 * {@link android.app.Activity} Context, then the Intent must include 1789 * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag. This is because, 1790 * without being started from an existing Activity, there is no existing 1791 * task in which to place the new activity and thus it needs to be placed 1792 * in its own separate task. 1793 * 1794 * <p>This method throws {@link ActivityNotFoundException} 1795 * if there was no Activity found to run the given Intent. 1796 * 1797 * @param intent The description of the activity to start. 1798 * @param options Additional options for how the Activity should be started. 1799 * May be null if there are no options. See {@link android.app.ActivityOptions} 1800 * for how to build the Bundle supplied here; there are no supported definitions 1801 * for building it manually. 1802 * 1803 * @throws ActivityNotFoundException 1804 * 1805 * @see #startActivity(Intent) 1806 * @see PackageManager#resolveActivity 1807 */ 1808 public abstract void startActivity(@RequiresPermission Intent intent, 1809 @Nullable Bundle options); 1810 1811 /** 1812 * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the 1813 * user the activity will be started for. This is not available to applications 1814 * that are not pre-installed on the system image. 1815 * @param intent The description of the activity to start. 1816 * @param options Additional options for how the Activity should be started. 1817 * May be null if there are no options. See {@link android.app.ActivityOptions} 1818 * for how to build the Bundle supplied here; there are no supported definitions 1819 * for building it manually. 1820 * @param userId The UserHandle of the user to start this activity for. 1821 * @throws ActivityNotFoundException 1822 * @hide 1823 */ 1824 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) 1825 @UnsupportedAppUsage 1826 public void startActivityAsUser(@RequiresPermission Intent intent, @Nullable Bundle options, 1827 UserHandle userId) { 1828 throw new RuntimeException("Not implemented. Must override in a subclass."); 1829 } 1830 1831 /** 1832 * Version of {@link #startActivity(Intent, Bundle)} that returns a result to the caller. This 1833 * is only supported for Views and Fragments. 1834 * @param who The identifier for the calling element that will receive the result. 1835 * @param intent The intent to start. 1836 * @param requestCode The code that will be returned with onActivityResult() identifying this 1837 * request. 1838 * @param options Additional options for how the Activity should be started. 1839 * May be null if there are no options. See {@link android.app.ActivityOptions} 1840 * for how to build the Bundle supplied here; there are no supported definitions 1841 * for building it manually. 1842 * @hide 1843 */ 1844 @UnsupportedAppUsage 1845 public void startActivityForResult( 1846 @NonNull String who, Intent intent, int requestCode, @Nullable Bundle options) { 1847 throw new RuntimeException("This method is only implemented for Activity-based Contexts. " 1848 + "Check canStartActivityForResult() before calling."); 1849 } 1850 1851 /** 1852 * Identifies whether this Context instance will be able to process calls to 1853 * {@link #startActivityForResult(String, Intent, int, Bundle)}. 1854 * @hide 1855 */ 1856 @UnsupportedAppUsage 1857 public boolean canStartActivityForResult() { 1858 return false; 1859 } 1860 1861 /** 1862 * Same as {@link #startActivities(Intent[], Bundle)} with no options 1863 * specified. 1864 * 1865 * @param intents An array of Intents to be started. 1866 * 1867 * @throws ActivityNotFoundException 1868 * 1869 * @see #startActivities(Intent[], Bundle) 1870 * @see PackageManager#resolveActivity 1871 */ 1872 public abstract void startActivities(@RequiresPermission Intent[] intents); 1873 1874 /** 1875 * Launch multiple new activities. This is generally the same as calling 1876 * {@link #startActivity(Intent)} for the first Intent in the array, 1877 * that activity during its creation calling {@link #startActivity(Intent)} 1878 * for the second entry, etc. Note that unlike that approach, generally 1879 * none of the activities except the last in the array will be created 1880 * at this point, but rather will be created when the user first visits 1881 * them (due to pressing back from the activity on top). 1882 * 1883 * <p>This method throws {@link ActivityNotFoundException} 1884 * if there was no Activity found for <em>any</em> given Intent. In this 1885 * case the state of the activity stack is undefined (some Intents in the 1886 * list may be on it, some not), so you probably want to avoid such situations. 1887 * 1888 * @param intents An array of Intents to be started. 1889 * @param options Additional options for how the Activity should be started. 1890 * See {@link android.content.Context#startActivity(Intent, Bundle)} 1891 * Context.startActivity(Intent, Bundle)} for more details. 1892 * 1893 * @throws ActivityNotFoundException 1894 * 1895 * @see #startActivities(Intent[]) 1896 * @see PackageManager#resolveActivity 1897 */ 1898 public abstract void startActivities(@RequiresPermission Intent[] intents, Bundle options); 1899 1900 /** 1901 * @hide 1902 * Launch multiple new activities. This is generally the same as calling 1903 * {@link #startActivity(Intent)} for the first Intent in the array, 1904 * that activity during its creation calling {@link #startActivity(Intent)} 1905 * for the second entry, etc. Note that unlike that approach, generally 1906 * none of the activities except the last in the array will be created 1907 * at this point, but rather will be created when the user first visits 1908 * them (due to pressing back from the activity on top). 1909 * 1910 * <p>This method throws {@link ActivityNotFoundException} 1911 * if there was no Activity found for <em>any</em> given Intent. In this 1912 * case the state of the activity stack is undefined (some Intents in the 1913 * list may be on it, some not), so you probably want to avoid such situations. 1914 * 1915 * @param intents An array of Intents to be started. 1916 * @param options Additional options for how the Activity should be started. 1917 * @param userHandle The user for whom to launch the activities 1918 * See {@link android.content.Context#startActivity(Intent, Bundle)} 1919 * Context.startActivity(Intent, Bundle)} for more details. 1920 * 1921 * @return The corresponding flag {@link ActivityManager#START_CANCELED}, 1922 * {@link ActivityManager#START_SUCCESS} etc. indicating whether the launch was 1923 * successful. 1924 * 1925 * @throws ActivityNotFoundException 1926 * 1927 * @see #startActivities(Intent[]) 1928 * @see PackageManager#resolveActivity 1929 */ 1930 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) 1931 public int startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) { 1932 throw new RuntimeException("Not implemented. Must override in a subclass."); 1933 } 1934 1935 /** 1936 * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)} 1937 * with no options specified. 1938 * 1939 * @param intent The IntentSender to launch. 1940 * @param fillInIntent If non-null, this will be provided as the 1941 * intent parameter to {@link IntentSender#sendIntent}. 1942 * @param flagsMask Intent flags in the original IntentSender that you 1943 * would like to change. 1944 * @param flagsValues Desired values for any bits set in 1945 * <var>flagsMask</var> 1946 * @param extraFlags Always set to 0. 1947 * 1948 * @see #startActivity(Intent) 1949 * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle) 1950 */ 1951 public abstract void startIntentSender(IntentSender intent, @Nullable Intent fillInIntent, 1952 @Intent.MutableFlags int flagsMask, @Intent.MutableFlags int flagsValues, 1953 int extraFlags) throws IntentSender.SendIntentException; 1954 1955 /** 1956 * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender 1957 * to start. If the IntentSender is for an activity, that activity will be started 1958 * as if you had called the regular {@link #startActivity(Intent)} 1959 * here; otherwise, its associated action will be executed (such as 1960 * sending a broadcast) as if you had called 1961 * {@link IntentSender#sendIntent IntentSender.sendIntent} on it. 1962 * 1963 * @param intent The IntentSender to launch. 1964 * @param fillInIntent If non-null, this will be provided as the 1965 * intent parameter to {@link IntentSender#sendIntent}. 1966 * @param flagsMask Intent flags in the original IntentSender that you 1967 * would like to change. 1968 * @param flagsValues Desired values for any bits set in 1969 * <var>flagsMask</var> 1970 * @param extraFlags Always set to 0. 1971 * @param options Additional options for how the Activity should be started. 1972 * See {@link android.content.Context#startActivity(Intent, Bundle)} 1973 * Context.startActivity(Intent, Bundle)} for more details. If options 1974 * have also been supplied by the IntentSender, options given here will 1975 * override any that conflict with those given by the IntentSender. 1976 * 1977 * @see #startActivity(Intent, Bundle) 1978 * @see #startIntentSender(IntentSender, Intent, int, int, int) 1979 */ 1980 public abstract void startIntentSender(IntentSender intent, @Nullable Intent fillInIntent, 1981 @Intent.MutableFlags int flagsMask, @Intent.MutableFlags int flagsValues, 1982 int extraFlags, @Nullable Bundle options) throws IntentSender.SendIntentException; 1983 1984 /** 1985 * Broadcast the given intent to all interested BroadcastReceivers. This 1986 * call is asynchronous; it returns immediately, and you will continue 1987 * executing while the receivers are run. No results are propagated from 1988 * receivers and receivers can not abort the broadcast. If you want 1989 * to allow receivers to propagate results or abort the broadcast, you must 1990 * send an ordered broadcast using 1991 * {@link #sendOrderedBroadcast(Intent, String)}. 1992 * 1993 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 1994 * 1995 * @param intent The Intent to broadcast; all receivers matching this 1996 * Intent will receive the broadcast. 1997 * 1998 * @see android.content.BroadcastReceiver 1999 * @see #registerReceiver 2000 * @see #sendBroadcast(Intent, String) 2001 * @see #sendOrderedBroadcast(Intent, String) 2002 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2003 */ 2004 public abstract void sendBroadcast(@RequiresPermission Intent intent); 2005 2006 /** 2007 * Broadcast the given intent to all interested BroadcastReceivers, allowing 2008 * an optional required permission to be enforced. This 2009 * call is asynchronous; it returns immediately, and you will continue 2010 * executing while the receivers are run. No results are propagated from 2011 * receivers and receivers can not abort the broadcast. If you want 2012 * to allow receivers to propagate results or abort the broadcast, you must 2013 * send an ordered broadcast using 2014 * {@link #sendOrderedBroadcast(Intent, String)}. 2015 * 2016 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2017 * 2018 * @param intent The Intent to broadcast; all receivers matching this 2019 * Intent will receive the broadcast. 2020 * @param receiverPermission (optional) String naming a permission that 2021 * a receiver must hold in order to receive your broadcast. 2022 * If null, no permission is required. 2023 * 2024 * @see android.content.BroadcastReceiver 2025 * @see #registerReceiver 2026 * @see #sendBroadcast(Intent) 2027 * @see #sendOrderedBroadcast(Intent, String) 2028 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2029 */ 2030 public abstract void sendBroadcast(@RequiresPermission Intent intent, 2031 @Nullable String receiverPermission); 2032 2033 2034 /** 2035 * Broadcast the given intent to all interested BroadcastReceivers, allowing 2036 * an array of required permissions to be enforced. This call is asynchronous; it returns 2037 * immediately, and you will continue executing while the receivers are run. No results are 2038 * propagated from receivers and receivers can not abort the broadcast. If you want to allow 2039 * receivers to propagate results or abort the broadcast, you must send an ordered broadcast 2040 * using {@link #sendOrderedBroadcast(Intent, String)}. 2041 * 2042 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2043 * 2044 * @param intent The Intent to broadcast; all receivers matching this 2045 * Intent will receive the broadcast. 2046 * @param receiverPermissions Array of names of permissions that a receiver must hold 2047 * in order to receive your broadcast. 2048 * If null or empty, no permissions are required. 2049 * 2050 * @see android.content.BroadcastReceiver 2051 * @see #registerReceiver 2052 * @see #sendBroadcast(Intent) 2053 * @see #sendOrderedBroadcast(Intent, String) 2054 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2055 * @hide 2056 */ 2057 public abstract void sendBroadcastMultiplePermissions(Intent intent, 2058 String[] receiverPermissions); 2059 2060 /** 2061 * Broadcast the given intent to all interested BroadcastReceivers, allowing 2062 * an array of required permissions to be enforced. This call is asynchronous; it returns 2063 * immediately, and you will continue executing while the receivers are run. No results are 2064 * propagated from receivers and receivers can not abort the broadcast. If you want to allow 2065 * receivers to propagate results or abort the broadcast, you must send an ordered broadcast 2066 * using {@link #sendOrderedBroadcast(Intent, String)}. 2067 * 2068 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2069 * 2070 * @param intent The Intent to broadcast; all receivers matching this 2071 * Intent will receive the broadcast. 2072 * @param user The user to send the broadcast to. 2073 * @param receiverPermissions Array of names of permissions that a receiver must hold 2074 * in order to receive your broadcast. 2075 * If null or empty, no permissions are required. 2076 * 2077 * @see android.content.BroadcastReceiver 2078 * @see #registerReceiver 2079 * @see #sendBroadcast(Intent) 2080 * @see #sendOrderedBroadcast(Intent, String) 2081 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2082 * @hide 2083 */ 2084 public abstract void sendBroadcastAsUserMultiplePermissions(Intent intent, UserHandle user, 2085 String[] receiverPermissions); 2086 2087 /** 2088 * Broadcast the given intent to all interested BroadcastReceivers, allowing 2089 * an optional required permission to be enforced. This 2090 * call is asynchronous; it returns immediately, and you will continue 2091 * executing while the receivers are run. No results are propagated from 2092 * receivers and receivers can not abort the broadcast. If you want 2093 * to allow receivers to propagate results or abort the broadcast, you must 2094 * send an ordered broadcast using 2095 * {@link #sendOrderedBroadcast(Intent, String)}. 2096 * 2097 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2098 * 2099 * @param intent The Intent to broadcast; all receivers matching this 2100 * Intent will receive the broadcast. 2101 * @param receiverPermission (optional) String naming a permission that 2102 * a receiver must hold in order to receive your broadcast. 2103 * If null, no permission is required. 2104 * @param options (optional) Additional sending options, generated from a 2105 * {@link android.app.BroadcastOptions}. 2106 * 2107 * @see android.content.BroadcastReceiver 2108 * @see #registerReceiver 2109 * @see #sendBroadcast(Intent) 2110 * @see #sendOrderedBroadcast(Intent, String) 2111 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2112 * @hide 2113 */ 2114 @SystemApi 2115 public abstract void sendBroadcast(Intent intent, 2116 @Nullable String receiverPermission, 2117 @Nullable Bundle options); 2118 2119 /** 2120 * Like {@link #sendBroadcast(Intent, String)}, but also allows specification 2121 * of an associated app op as per {@link android.app.AppOpsManager}. 2122 * @hide 2123 */ 2124 @UnsupportedAppUsage 2125 public abstract void sendBroadcast(Intent intent, 2126 String receiverPermission, int appOp); 2127 2128 /** 2129 * Broadcast the given intent to all interested BroadcastReceivers, delivering 2130 * them one at a time to allow more preferred receivers to consume the 2131 * broadcast before it is delivered to less preferred receivers. This 2132 * call is asynchronous; it returns immediately, and you will continue 2133 * executing while the receivers are run. 2134 * 2135 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2136 * 2137 * @param intent The Intent to broadcast; all receivers matching this 2138 * Intent will receive the broadcast. 2139 * @param receiverPermission (optional) String naming a permissions that 2140 * a receiver must hold in order to receive your broadcast. 2141 * If null, no permission is required. 2142 * 2143 * @see android.content.BroadcastReceiver 2144 * @see #registerReceiver 2145 * @see #sendBroadcast(Intent) 2146 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2147 */ 2148 public abstract void sendOrderedBroadcast(@RequiresPermission Intent intent, 2149 @Nullable String receiverPermission); 2150 2151 /** 2152 * Version of {@link #sendBroadcast(Intent)} that allows you to 2153 * receive data back from the broadcast. This is accomplished by 2154 * supplying your own BroadcastReceiver when calling, which will be 2155 * treated as a final receiver at the end of the broadcast -- its 2156 * {@link BroadcastReceiver#onReceive} method will be called with 2157 * the result values collected from the other receivers. The broadcast will 2158 * be serialized in the same way as calling 2159 * {@link #sendOrderedBroadcast(Intent, String)}. 2160 * 2161 * <p>Like {@link #sendBroadcast(Intent)}, this method is 2162 * asynchronous; it will return before 2163 * resultReceiver.onReceive() is called. 2164 * 2165 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2166 * 2167 * @param intent The Intent to broadcast; all receivers matching this 2168 * Intent will receive the broadcast. 2169 * @param receiverPermission String naming a permissions that 2170 * a receiver must hold in order to receive your broadcast. 2171 * If null, no permission is required. 2172 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2173 * receiver of the broadcast. 2174 * @param scheduler A custom Handler with which to schedule the 2175 * resultReceiver callback; if null it will be 2176 * scheduled in the Context's main thread. 2177 * @param initialCode An initial value for the result code. Often 2178 * Activity.RESULT_OK. 2179 * @param initialData An initial value for the result data. Often 2180 * null. 2181 * @param initialExtras An initial value for the result extras. Often 2182 * null. 2183 * 2184 * @see #sendBroadcast(Intent) 2185 * @see #sendBroadcast(Intent, String) 2186 * @see #sendOrderedBroadcast(Intent, String) 2187 * @see android.content.BroadcastReceiver 2188 * @see #registerReceiver 2189 * @see android.app.Activity#RESULT_OK 2190 */ 2191 public abstract void sendOrderedBroadcast(@RequiresPermission @NonNull Intent intent, 2192 @Nullable String receiverPermission, @Nullable BroadcastReceiver resultReceiver, 2193 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2194 @Nullable Bundle initialExtras); 2195 2196 /** 2197 * Version of {@link #sendBroadcast(Intent)} that allows you to 2198 * receive data back from the broadcast. This is accomplished by 2199 * supplying your own BroadcastReceiver when calling, which will be 2200 * treated as a final receiver at the end of the broadcast -- its 2201 * {@link BroadcastReceiver#onReceive} method will be called with 2202 * the result values collected from the other receivers. The broadcast will 2203 * be serialized in the same way as calling 2204 * {@link #sendOrderedBroadcast(Intent, String)}. 2205 * 2206 * <p>Like {@link #sendBroadcast(Intent)}, this method is 2207 * asynchronous; it will return before 2208 * resultReceiver.onReceive() is called. 2209 * 2210 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2211 * 2212 * 2213 * @param intent The Intent to broadcast; all receivers matching this 2214 * Intent will receive the broadcast. 2215 * @param receiverPermission String naming a permissions that 2216 * a receiver must hold in order to receive your broadcast. 2217 * If null, no permission is required. 2218 * @param options (optional) Additional sending options, generated from a 2219 * {@link android.app.BroadcastOptions}. 2220 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2221 * receiver of the broadcast. 2222 * @param scheduler A custom Handler with which to schedule the 2223 * resultReceiver callback; if null it will be 2224 * scheduled in the Context's main thread. 2225 * @param initialCode An initial value for the result code. Often 2226 * Activity.RESULT_OK. 2227 * @param initialData An initial value for the result data. Often 2228 * null. 2229 * @param initialExtras An initial value for the result extras. Often 2230 * null. 2231 * @see #sendBroadcast(Intent) 2232 * @see #sendBroadcast(Intent, String) 2233 * @see #sendOrderedBroadcast(Intent, String) 2234 * @see android.content.BroadcastReceiver 2235 * @see #registerReceiver 2236 * @see android.app.Activity#RESULT_OK 2237 * @hide 2238 */ 2239 @SystemApi 2240 public abstract void sendOrderedBroadcast(@NonNull Intent intent, 2241 @Nullable String receiverPermission, @Nullable Bundle options, 2242 @Nullable BroadcastReceiver resultReceiver, @Nullable Handler scheduler, 2243 int initialCode, @Nullable String initialData, @Nullable Bundle initialExtras); 2244 2245 /** 2246 * Like {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, 2247 * int, String, android.os.Bundle)}, but also allows specification 2248 * of an associated app op as per {@link android.app.AppOpsManager}. 2249 * @hide 2250 */ 2251 @UnsupportedAppUsage 2252 public abstract void sendOrderedBroadcast(Intent intent, 2253 String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 2254 Handler scheduler, int initialCode, String initialData, 2255 Bundle initialExtras); 2256 2257 /** 2258 * Version of {@link #sendBroadcast(Intent)} that allows you to specify the 2259 * user the broadcast will be sent to. This is not available to applications 2260 * that are not pre-installed on the system image. 2261 * @param intent The intent to broadcast 2262 * @param user UserHandle to send the intent to. 2263 * @see #sendBroadcast(Intent) 2264 */ 2265 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2266 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2267 UserHandle user); 2268 2269 /** 2270 * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the 2271 * user the broadcast will be sent to. This is not available to applications 2272 * that are not pre-installed on the system image. 2273 * 2274 * @param intent The Intent to broadcast; all receivers matching this 2275 * Intent will receive the broadcast. 2276 * @param user UserHandle to send the intent to. 2277 * @param receiverPermission (optional) String naming a permission that 2278 * a receiver must hold in order to receive your broadcast. 2279 * If null, no permission is required. 2280 * 2281 * @see #sendBroadcast(Intent, String) 2282 */ 2283 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2284 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2285 UserHandle user, @Nullable String receiverPermission); 2286 2287 /** 2288 * Version of {@link #sendBroadcast(Intent, String, Bundle)} that allows you to specify the 2289 * user the broadcast will be sent to. This is not available to applications 2290 * that are not pre-installed on the system image. 2291 * 2292 * @param intent The Intent to broadcast; all receivers matching this 2293 * Intent will receive the broadcast. 2294 * @param user UserHandle to send the intent to. 2295 * @param receiverPermission (optional) String naming a permission that 2296 * a receiver must hold in order to receive your broadcast. 2297 * If null, no permission is required. 2298 * @param options (optional) Additional sending options, generated from a 2299 * {@link android.app.BroadcastOptions}. 2300 * 2301 * @see #sendBroadcast(Intent, String, Bundle) 2302 * @hide 2303 */ 2304 @SystemApi 2305 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2306 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2307 UserHandle user, @Nullable String receiverPermission, @Nullable Bundle options); 2308 2309 /** 2310 * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the 2311 * user the broadcast will be sent to. This is not available to applications 2312 * that are not pre-installed on the system image. 2313 * 2314 * @param intent The Intent to broadcast; all receivers matching this 2315 * Intent will receive the broadcast. 2316 * @param user UserHandle to send the intent to. 2317 * @param receiverPermission (optional) String naming a permission that 2318 * a receiver must hold in order to receive your broadcast. 2319 * If null, no permission is required. 2320 * @param appOp The app op associated with the broadcast. 2321 * 2322 * @see #sendBroadcast(Intent, String) 2323 * 2324 * @hide 2325 */ 2326 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2327 @UnsupportedAppUsage 2328 public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, 2329 UserHandle user, @Nullable String receiverPermission, int appOp); 2330 2331 /** 2332 * Version of 2333 * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)} 2334 * that allows you to specify the 2335 * user the broadcast will be sent to. This is not available to applications 2336 * that are not pre-installed on the system image. 2337 * 2338 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2339 * 2340 * @param intent The Intent to broadcast; all receivers matching this 2341 * Intent will receive the broadcast. 2342 * @param user UserHandle to send the intent to. 2343 * @param receiverPermission String naming a permissions that 2344 * a receiver must hold in order to receive your broadcast. 2345 * If null, no permission is required. 2346 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2347 * receiver of the broadcast. 2348 * @param scheduler A custom Handler with which to schedule the 2349 * resultReceiver callback; if null it will be 2350 * scheduled in the Context's main thread. 2351 * @param initialCode An initial value for the result code. Often 2352 * Activity.RESULT_OK. 2353 * @param initialData An initial value for the result data. Often 2354 * null. 2355 * @param initialExtras An initial value for the result extras. Often 2356 * null. 2357 * 2358 * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) 2359 */ 2360 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2361 public abstract void sendOrderedBroadcastAsUser(@RequiresPermission Intent intent, 2362 UserHandle user, @Nullable String receiverPermission, BroadcastReceiver resultReceiver, 2363 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2364 @Nullable Bundle initialExtras); 2365 2366 /** 2367 * Similar to above but takes an appOp as well, to enforce restrictions. 2368 * @see #sendOrderedBroadcastAsUser(Intent, UserHandle, String, 2369 * BroadcastReceiver, Handler, int, String, Bundle) 2370 * @hide 2371 */ 2372 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2373 @UnsupportedAppUsage 2374 public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 2375 @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 2376 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2377 @Nullable Bundle initialExtras); 2378 2379 /** 2380 * Similar to above but takes an appOp as well, to enforce restrictions, and an options Bundle. 2381 * @see #sendOrderedBroadcastAsUser(Intent, UserHandle, String, 2382 * BroadcastReceiver, Handler, int, String, Bundle) 2383 * @hide 2384 */ 2385 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2386 @UnsupportedAppUsage 2387 public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 2388 @Nullable String receiverPermission, int appOp, @Nullable Bundle options, 2389 BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, 2390 @Nullable String initialData, @Nullable Bundle initialExtras); 2391 2392 /** 2393 * <p>Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the 2394 * Intent you are sending stays around after the broadcast is complete, 2395 * so that others can quickly retrieve that data through the return 2396 * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}. In 2397 * all other ways, this behaves the same as 2398 * {@link #sendBroadcast(Intent)}. 2399 * 2400 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2401 * can access them), no protection (anyone can modify them), and many other problems. 2402 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2403 * has changed, with another mechanism for apps to retrieve the current value whenever 2404 * desired. 2405 * 2406 * @param intent The Intent to broadcast; all receivers matching this 2407 * Intent will receive the broadcast, and the Intent will be held to 2408 * be re-broadcast to future receivers. 2409 * 2410 * @see #sendBroadcast(Intent) 2411 * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) 2412 */ 2413 @Deprecated 2414 @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) 2415 public abstract void sendStickyBroadcast(@RequiresPermission Intent intent); 2416 2417 /** 2418 * <p>Version of {@link #sendStickyBroadcast} that allows you to 2419 * receive data back from the broadcast. This is accomplished by 2420 * supplying your own BroadcastReceiver when calling, which will be 2421 * treated as a final receiver at the end of the broadcast -- its 2422 * {@link BroadcastReceiver#onReceive} method will be called with 2423 * the result values collected from the other receivers. The broadcast will 2424 * be serialized in the same way as calling 2425 * {@link #sendOrderedBroadcast(Intent, String)}. 2426 * 2427 * <p>Like {@link #sendBroadcast(Intent)}, this method is 2428 * asynchronous; it will return before 2429 * resultReceiver.onReceive() is called. Note that the sticky data 2430 * stored is only the data you initially supply to the broadcast, not 2431 * the result of any changes made by the receivers. 2432 * 2433 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2434 * 2435 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2436 * can access them), no protection (anyone can modify them), and many other problems. 2437 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2438 * has changed, with another mechanism for apps to retrieve the current value whenever 2439 * desired. 2440 * 2441 * @param intent The Intent to broadcast; all receivers matching this 2442 * Intent will receive the broadcast. 2443 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2444 * receiver of the broadcast. 2445 * @param scheduler A custom Handler with which to schedule the 2446 * resultReceiver callback; if null it will be 2447 * scheduled in the Context's main thread. 2448 * @param initialCode An initial value for the result code. Often 2449 * Activity.RESULT_OK. 2450 * @param initialData An initial value for the result data. Often 2451 * null. 2452 * @param initialExtras An initial value for the result extras. Often 2453 * null. 2454 * 2455 * @see #sendBroadcast(Intent) 2456 * @see #sendBroadcast(Intent, String) 2457 * @see #sendOrderedBroadcast(Intent, String) 2458 * @see #sendStickyBroadcast(Intent) 2459 * @see android.content.BroadcastReceiver 2460 * @see #registerReceiver 2461 * @see android.app.Activity#RESULT_OK 2462 */ 2463 @Deprecated 2464 @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) 2465 public abstract void sendStickyOrderedBroadcast(@RequiresPermission Intent intent, 2466 BroadcastReceiver resultReceiver, 2467 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2468 @Nullable Bundle initialExtras); 2469 2470 /** 2471 * <p>Remove the data previously sent with {@link #sendStickyBroadcast}, 2472 * so that it is as if the sticky broadcast had never happened. 2473 * 2474 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2475 * can access them), no protection (anyone can modify them), and many other problems. 2476 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2477 * has changed, with another mechanism for apps to retrieve the current value whenever 2478 * desired. 2479 * 2480 * @param intent The Intent that was previously broadcast. 2481 * 2482 * @see #sendStickyBroadcast 2483 */ 2484 @Deprecated 2485 @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) 2486 public abstract void removeStickyBroadcast(@RequiresPermission Intent intent); 2487 2488 /** 2489 * <p>Version of {@link #sendStickyBroadcast(Intent)} that allows you to specify the 2490 * user the broadcast will be sent to. This is not available to applications 2491 * that are not pre-installed on the system image. 2492 * 2493 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2494 * can access them), no protection (anyone can modify them), and many other problems. 2495 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2496 * has changed, with another mechanism for apps to retrieve the current value whenever 2497 * desired. 2498 * 2499 * @param intent The Intent to broadcast; all receivers matching this 2500 * Intent will receive the broadcast, and the Intent will be held to 2501 * be re-broadcast to future receivers. 2502 * @param user UserHandle to send the intent to. 2503 * 2504 * @see #sendBroadcast(Intent) 2505 */ 2506 @Deprecated 2507 @RequiresPermission(allOf = { 2508 android.Manifest.permission.INTERACT_ACROSS_USERS, 2509 android.Manifest.permission.BROADCAST_STICKY 2510 }) 2511 public abstract void sendStickyBroadcastAsUser(@RequiresPermission Intent intent, 2512 UserHandle user); 2513 2514 /** 2515 * @hide 2516 * This is just here for sending CONNECTIVITY_ACTION. 2517 */ 2518 @Deprecated 2519 @RequiresPermission(allOf = { 2520 android.Manifest.permission.INTERACT_ACROSS_USERS, 2521 android.Manifest.permission.BROADCAST_STICKY 2522 }) 2523 public abstract void sendStickyBroadcastAsUser(@RequiresPermission Intent intent, 2524 UserHandle user, Bundle options); 2525 2526 /** 2527 * <p>Version of 2528 * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)} 2529 * that allows you to specify the 2530 * user the broadcast will be sent to. This is not available to applications 2531 * that are not pre-installed on the system image. 2532 * 2533 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2534 * 2535 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2536 * can access them), no protection (anyone can modify them), and many other problems. 2537 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2538 * has changed, with another mechanism for apps to retrieve the current value whenever 2539 * desired. 2540 * 2541 * @param intent The Intent to broadcast; all receivers matching this 2542 * Intent will receive the broadcast. 2543 * @param user UserHandle to send the intent to. 2544 * @param resultReceiver Your own BroadcastReceiver to treat as the final 2545 * receiver of the broadcast. 2546 * @param scheduler A custom Handler with which to schedule the 2547 * resultReceiver callback; if null it will be 2548 * scheduled in the Context's main thread. 2549 * @param initialCode An initial value for the result code. Often 2550 * Activity.RESULT_OK. 2551 * @param initialData An initial value for the result data. Often 2552 * null. 2553 * @param initialExtras An initial value for the result extras. Often 2554 * null. 2555 * 2556 * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle) 2557 */ 2558 @Deprecated 2559 @RequiresPermission(allOf = { 2560 android.Manifest.permission.INTERACT_ACROSS_USERS, 2561 android.Manifest.permission.BROADCAST_STICKY 2562 }) 2563 public abstract void sendStickyOrderedBroadcastAsUser(@RequiresPermission Intent intent, 2564 UserHandle user, BroadcastReceiver resultReceiver, 2565 @Nullable Handler scheduler, int initialCode, @Nullable String initialData, 2566 @Nullable Bundle initialExtras); 2567 2568 /** 2569 * <p>Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the 2570 * user the broadcast will be sent to. This is not available to applications 2571 * that are not pre-installed on the system image. 2572 * 2573 * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY} 2574 * permission in order to use this API. If you do not hold that 2575 * permission, {@link SecurityException} will be thrown. 2576 * 2577 * @deprecated Sticky broadcasts should not be used. They provide no security (anyone 2578 * can access them), no protection (anyone can modify them), and many other problems. 2579 * The recommended pattern is to use a non-sticky broadcast to report that <em>something</em> 2580 * has changed, with another mechanism for apps to retrieve the current value whenever 2581 * desired. 2582 * 2583 * @param intent The Intent that was previously broadcast. 2584 * @param user UserHandle to remove the sticky broadcast from. 2585 * 2586 * @see #sendStickyBroadcastAsUser 2587 */ 2588 @Deprecated 2589 @RequiresPermission(allOf = { 2590 android.Manifest.permission.INTERACT_ACROSS_USERS, 2591 android.Manifest.permission.BROADCAST_STICKY 2592 }) 2593 public abstract void removeStickyBroadcastAsUser(@RequiresPermission Intent intent, 2594 UserHandle user); 2595 2596 /** 2597 * Register a BroadcastReceiver to be run in the main activity thread. The 2598 * <var>receiver</var> will be called with any broadcast Intent that 2599 * matches <var>filter</var>, in the main application thread. 2600 * 2601 * <p>The system may broadcast Intents that are "sticky" -- these stay 2602 * around after the broadcast has finished, to be sent to any later 2603 * registrations. If your IntentFilter matches one of these sticky 2604 * Intents, that Intent will be returned by this function 2605 * <strong>and</strong> sent to your <var>receiver</var> as if it had just 2606 * been broadcast. 2607 * 2608 * <p>There may be multiple sticky Intents that match <var>filter</var>, 2609 * in which case each of these will be sent to <var>receiver</var>. In 2610 * this case, only one of these can be returned directly by the function; 2611 * which of these that is returned is arbitrarily decided by the system. 2612 * 2613 * <p>If you know the Intent your are registering for is sticky, you can 2614 * supply null for your <var>receiver</var>. In this case, no receiver is 2615 * registered -- the function simply returns the sticky Intent that 2616 * matches <var>filter</var>. In the case of multiple matches, the same 2617 * rules as described above apply. 2618 * 2619 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2620 * 2621 * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers 2622 * registered with this method will correctly respect the 2623 * {@link Intent#setPackage(String)} specified for an Intent being broadcast. 2624 * Prior to that, it would be ignored and delivered to all matching registered 2625 * receivers. Be careful if using this for security.</p> 2626 * 2627 * <p class="note">Note: this method <em>cannot be called from a 2628 * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver 2629 * that is declared in an application's manifest. It is okay, however, to call 2630 * this method from another BroadcastReceiver that has itself been registered 2631 * at run time with {@link #registerReceiver}, since the lifetime of such a 2632 * registered BroadcastReceiver is tied to the object that registered it.</p> 2633 * 2634 * @param receiver The BroadcastReceiver to handle the broadcast. 2635 * @param filter Selects the Intent broadcasts to be received. 2636 * 2637 * @return The first sticky intent found that matches <var>filter</var>, 2638 * or null if there are none. 2639 * 2640 * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2641 * @see #sendBroadcast 2642 * @see #unregisterReceiver 2643 */ 2644 @Nullable 2645 public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver, 2646 IntentFilter filter); 2647 2648 /** 2649 * Register to receive intent broadcasts, with the receiver optionally being 2650 * exposed to Instant Apps. See 2651 * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more 2652 * information. By default Instant Apps cannot interact with receivers in other 2653 * applications, this allows you to expose a receiver that Instant Apps can 2654 * interact with. 2655 * 2656 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2657 * 2658 * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers 2659 * registered with this method will correctly respect the 2660 * {@link Intent#setPackage(String)} specified for an Intent being broadcast. 2661 * Prior to that, it would be ignored and delivered to all matching registered 2662 * receivers. Be careful if using this for security.</p> 2663 * 2664 * @param receiver The BroadcastReceiver to handle the broadcast. 2665 * @param filter Selects the Intent broadcasts to be received. 2666 * @param flags Additional options for the receiver. May be 0 or 2667 * {@link #RECEIVER_VISIBLE_TO_INSTANT_APPS}. 2668 * 2669 * @return The first sticky intent found that matches <var>filter</var>, 2670 * or null if there are none. 2671 * 2672 * @see #registerReceiver(BroadcastReceiver, IntentFilter) 2673 * @see #sendBroadcast 2674 * @see #unregisterReceiver 2675 */ 2676 @Nullable 2677 public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver, 2678 IntentFilter filter, 2679 @RegisterReceiverFlags int flags); 2680 2681 /** 2682 * Register to receive intent broadcasts, to run in the context of 2683 * <var>scheduler</var>. See 2684 * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more 2685 * information. This allows you to enforce permissions on who can 2686 * broadcast intents to your receiver, or have the receiver run in 2687 * a different thread than the main application thread. 2688 * 2689 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2690 * 2691 * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers 2692 * registered with this method will correctly respect the 2693 * {@link Intent#setPackage(String)} specified for an Intent being broadcast. 2694 * Prior to that, it would be ignored and delivered to all matching registered 2695 * receivers. Be careful if using this for security.</p> 2696 * 2697 * @param receiver The BroadcastReceiver to handle the broadcast. 2698 * @param filter Selects the Intent broadcasts to be received. 2699 * @param broadcastPermission String naming a permissions that a 2700 * broadcaster must hold in order to send an Intent to you. If null, 2701 * no permission is required. 2702 * @param scheduler Handler identifying the thread that will receive 2703 * the Intent. If null, the main thread of the process will be used. 2704 * 2705 * @return The first sticky intent found that matches <var>filter</var>, 2706 * or null if there are none. 2707 * 2708 * @see #registerReceiver(BroadcastReceiver, IntentFilter) 2709 * @see #sendBroadcast 2710 * @see #unregisterReceiver 2711 */ 2712 @Nullable 2713 public abstract Intent registerReceiver(BroadcastReceiver receiver, 2714 IntentFilter filter, @Nullable String broadcastPermission, 2715 @Nullable Handler scheduler); 2716 2717 /** 2718 * Register to receive intent broadcasts, to run in the context of 2719 * <var>scheduler</var>. See 2720 * {@link #registerReceiver(BroadcastReceiver, IntentFilter, int)} and 2721 * {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)} 2722 * for more information. 2723 * 2724 * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts. 2725 * 2726 * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers 2727 * registered with this method will correctly respect the 2728 * {@link Intent#setPackage(String)} specified for an Intent being broadcast. 2729 * Prior to that, it would be ignored and delivered to all matching registered 2730 * receivers. Be careful if using this for security.</p> 2731 * 2732 * @param receiver The BroadcastReceiver to handle the broadcast. 2733 * @param filter Selects the Intent broadcasts to be received. 2734 * @param broadcastPermission String naming a permissions that a 2735 * broadcaster must hold in order to send an Intent to you. If null, 2736 * no permission is required. 2737 * @param scheduler Handler identifying the thread that will receive 2738 * the Intent. If null, the main thread of the process will be used. 2739 * @param flags Additional options for the receiver. May be 0 or 2740 * {@link #RECEIVER_VISIBLE_TO_INSTANT_APPS}. 2741 * 2742 * @return The first sticky intent found that matches <var>filter</var>, 2743 * or null if there are none. 2744 * 2745 * @see #registerReceiver(BroadcastReceiver, IntentFilter, int) 2746 * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2747 * @see #sendBroadcast 2748 * @see #unregisterReceiver 2749 */ 2750 @Nullable 2751 public abstract Intent registerReceiver(BroadcastReceiver receiver, 2752 IntentFilter filter, @Nullable String broadcastPermission, 2753 @Nullable Handler scheduler, @RegisterReceiverFlags int flags); 2754 2755 /** 2756 * @hide 2757 * Same as {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2758 * but for a specific user. This receiver will receiver broadcasts that 2759 * are sent to the requested user. 2760 * 2761 * @param receiver The BroadcastReceiver to handle the broadcast. 2762 * @param user UserHandle to send the intent to. 2763 * @param filter Selects the Intent broadcasts to be received. 2764 * @param broadcastPermission String naming a permissions that a 2765 * broadcaster must hold in order to send an Intent to you. If null, 2766 * no permission is required. 2767 * @param scheduler Handler identifying the thread that will receive 2768 * the Intent. If null, the main thread of the process will be used. 2769 * 2770 * @return The first sticky intent found that matches <var>filter</var>, 2771 * or null if there are none. 2772 * 2773 * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) 2774 * @see #sendBroadcast 2775 * @see #unregisterReceiver 2776 */ 2777 @Nullable 2778 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) 2779 @UnsupportedAppUsage 2780 public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver, 2781 UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, 2782 @Nullable Handler scheduler); 2783 2784 /** 2785 * Unregister a previously registered BroadcastReceiver. <em>All</em> 2786 * filters that have been registered for this BroadcastReceiver will be 2787 * removed. 2788 * 2789 * @param receiver The BroadcastReceiver to unregister. 2790 * 2791 * @see #registerReceiver 2792 */ 2793 public abstract void unregisterReceiver(BroadcastReceiver receiver); 2794 2795 /** 2796 * Request that a given application service be started. The Intent 2797 * should either contain the complete class name of a specific service 2798 * implementation to start, or a specific package name to target. If the 2799 * Intent is less specified, it logs a warning about this. In this case any of the 2800 * multiple matching services may be used. If this service 2801 * is not already running, it will be instantiated and started (creating a 2802 * process for it if needed); if it is running then it remains running. 2803 * 2804 * <p>Every call to this method will result in a corresponding call to 2805 * the target service's {@link android.app.Service#onStartCommand} method, 2806 * with the <var>intent</var> given here. This provides a convenient way 2807 * to submit jobs to a service without having to bind and call on to its 2808 * interface. 2809 * 2810 * <p>Using startService() overrides the default service lifetime that is 2811 * managed by {@link #bindService}: it requires the service to remain 2812 * running until {@link #stopService} is called, regardless of whether 2813 * any clients are connected to it. Note that calls to startService() 2814 * do not nest: no matter how many times you call startService(), 2815 * a single call to {@link #stopService} will stop it. 2816 * 2817 * <p>The system attempts to keep running services around as much as 2818 * possible. The only time they should be stopped is if the current 2819 * foreground application is using so many resources that the service needs 2820 * to be killed. If any errors happen in the service's process, it will 2821 * automatically be restarted. 2822 * 2823 * <p>This function will throw {@link SecurityException} if you do not 2824 * have permission to start the given service. 2825 * 2826 * <p class="note"><strong>Note:</strong> Each call to startService() 2827 * results in significant work done by the system to manage service 2828 * lifecycle surrounding the processing of the intent, which can take 2829 * multiple milliseconds of CPU time. Due to this cost, startService() 2830 * should not be used for frequent intent delivery to a service, and only 2831 * for scheduling significant work. Use {@link #bindService bound services} 2832 * for high frequency calls. 2833 * </p> 2834 * 2835 * @param service Identifies the service to be started. The Intent must be 2836 * fully explicit (supplying a component name). Additional values 2837 * may be included in the Intent extras to supply arguments along with 2838 * this specific start call. 2839 * 2840 * @return If the service is being started or is already running, the 2841 * {@link ComponentName} of the actual service that was started is 2842 * returned; else if the service does not exist null is returned. 2843 * 2844 * @throws SecurityException If the caller does not have permission to access the service 2845 * or the service can not be found. 2846 * @throws IllegalStateException If the application is in a state where the service 2847 * can not be started (such as not in the foreground in a state when services are allowed). 2848 * 2849 * @see #stopService 2850 * @see #bindService 2851 */ 2852 @Nullable 2853 public abstract ComponentName startService(Intent service); 2854 2855 /** 2856 * Similar to {@link #startService(Intent)}, but with an implicit promise that the 2857 * Service will call {@link android.app.Service#startForeground(int, android.app.Notification) 2858 * startForeground(int, android.app.Notification)} once it begins running. The service is given 2859 * an amount of time comparable to the ANR interval to do this, otherwise the system 2860 * will automatically stop the service and declare the app ANR. 2861 * 2862 * <p>Unlike the ordinary {@link #startService(Intent)}, this method can be used 2863 * at any time, regardless of whether the app hosting the service is in a foreground 2864 * state. 2865 * 2866 * @param service Identifies the service to be started. The Intent must be 2867 * fully explicit (supplying a component name). Additional values 2868 * may be included in the Intent extras to supply arguments along with 2869 * this specific start call. 2870 * 2871 * @return If the service is being started or is already running, the 2872 * {@link ComponentName} of the actual service that was started is 2873 * returned; else if the service does not exist null is returned. 2874 * 2875 * @throws SecurityException If the caller does not have permission to access the service 2876 * or the service can not be found. 2877 * 2878 * @see #stopService 2879 * @see android.app.Service#startForeground(int, android.app.Notification) 2880 */ 2881 @Nullable 2882 public abstract ComponentName startForegroundService(Intent service); 2883 2884 /** 2885 * @hide like {@link #startForegroundService(Intent)} but for a specific user. 2886 */ 2887 @Nullable 2888 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2889 public abstract ComponentName startForegroundServiceAsUser(Intent service, UserHandle user); 2890 2891 /** 2892 * Request that a given application service be stopped. If the service is 2893 * not running, nothing happens. Otherwise it is stopped. Note that calls 2894 * to startService() are not counted -- this stops the service no matter 2895 * how many times it was started. 2896 * 2897 * <p>Note that if a stopped service still has {@link ServiceConnection} 2898 * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will 2899 * not be destroyed until all of these bindings are removed. See 2900 * the {@link android.app.Service} documentation for more details on a 2901 * service's lifecycle. 2902 * 2903 * <p>This function will throw {@link SecurityException} if you do not 2904 * have permission to stop the given service. 2905 * 2906 * @param service Description of the service to be stopped. The Intent must be either 2907 * fully explicit (supplying a component name) or specify a specific package 2908 * name it is targeted to. 2909 * 2910 * @return If there is a service matching the given Intent that is already 2911 * running, then it is stopped and {@code true} is returned; else {@code false} is returned. 2912 * 2913 * @throws SecurityException If the caller does not have permission to access the service 2914 * or the service can not be found. 2915 * @throws IllegalStateException If the application is in a state where the service 2916 * can not be started (such as not in the foreground in a state when services are allowed). 2917 * 2918 * @see #startService 2919 */ 2920 public abstract boolean stopService(Intent service); 2921 2922 /** 2923 * @hide like {@link #startService(Intent)} but for a specific user. 2924 */ 2925 @Nullable 2926 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2927 @UnsupportedAppUsage 2928 public abstract ComponentName startServiceAsUser(Intent service, UserHandle user); 2929 2930 /** 2931 * @hide like {@link #stopService(Intent)} but for a specific user. 2932 */ 2933 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 2934 public abstract boolean stopServiceAsUser(Intent service, UserHandle user); 2935 2936 /** 2937 * Connect to an application service, creating it if needed. This defines 2938 * a dependency between your application and the service. The given 2939 * <var>conn</var> will receive the service object when it is created and be 2940 * told if it dies and restarts. The service will be considered required 2941 * by the system only for as long as the calling context exists. For 2942 * example, if this Context is an Activity that is stopped, the service will 2943 * not be required to continue running until the Activity is resumed. 2944 * 2945 * <p>If the service does not support binding, it may return {@code null} from 2946 * its {@link android.app.Service#onBind(Intent) onBind()} method. If it does, then 2947 * the ServiceConnection's 2948 * {@link ServiceConnection#onNullBinding(ComponentName) onNullBinding()} method 2949 * will be invoked instead of 2950 * {@link ServiceConnection#onServiceConnected(ComponentName, IBinder) onServiceConnected()}. 2951 * 2952 * <p>This method will throw {@link SecurityException} if the calling app does not 2953 * have permission to bind to the given service. 2954 * 2955 * <p class="note">Note: this method <em>cannot be called from a 2956 * {@link BroadcastReceiver} component</em>. A pattern you can use to 2957 * communicate from a BroadcastReceiver to a Service is to call 2958 * {@link #startService} with the arguments containing the command to be 2959 * sent, with the service calling its 2960 * {@link android.app.Service#stopSelf(int)} method when done executing 2961 * that command. See the API demo App/Service/Service Start Arguments 2962 * Controller for an illustration of this. It is okay, however, to use 2963 * this method from a BroadcastReceiver that has been registered with 2964 * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver 2965 * is tied to another object (the one that registered it).</p> 2966 * 2967 * @param service Identifies the service to connect to. The Intent must 2968 * specify an explicit component name. 2969 * @param conn Receives information as the service is started and stopped. 2970 * This must be a valid ServiceConnection object; it must not be null. 2971 * @param flags Operation options for the binding. May be 0, 2972 * {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND}, 2973 * {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT}, 2974 * {@link #BIND_ALLOW_OOM_MANAGEMENT}, {@link #BIND_WAIVE_PRIORITY}. 2975 * {@link #BIND_IMPORTANT}, or 2976 * {@link #BIND_ADJUST_WITH_ACTIVITY}. 2977 * @return {@code true} if the system is in the process of bringing up a 2978 * service that your client has permission to bind to; {@code false} 2979 * if the system couldn't find the service or if your client doesn't 2980 * have permission to bind to it. If this value is {@code true}, you 2981 * should later call {@link #unbindService} to release the 2982 * connection. 2983 * 2984 * @throws SecurityException If the caller does not have permission to access the service 2985 * or the service can not be found. 2986 * 2987 * @see #unbindService 2988 * @see #startService 2989 * @see #BIND_AUTO_CREATE 2990 * @see #BIND_DEBUG_UNBIND 2991 * @see #BIND_NOT_FOREGROUND 2992 * @see #BIND_ABOVE_CLIENT 2993 * @see #BIND_ALLOW_OOM_MANAGEMENT 2994 * @see #BIND_WAIVE_PRIORITY 2995 * @see #BIND_IMPORTANT 2996 * @see #BIND_ADJUST_WITH_ACTIVITY 2997 */ 2998 public abstract boolean bindService(@RequiresPermission Intent service, 2999 @NonNull ServiceConnection conn, @BindServiceFlags int flags); 3000 3001 /** 3002 * Same as {@link #bindService(Intent, ServiceConnection, int)} with executor to control 3003 * ServiceConnection callbacks. 3004 * @param executor Callbacks on ServiceConnection will be called on executor. Must use same 3005 * instance for the same instance of ServiceConnection. 3006 */ 3007 public boolean bindService(@RequiresPermission @NonNull Intent service, 3008 @BindServiceFlags int flags, @NonNull @CallbackExecutor Executor executor, 3009 @NonNull ServiceConnection conn) { 3010 throw new RuntimeException("Not implemented. Must override in a subclass."); 3011 } 3012 3013 /** 3014 * Variation of {@link #bindService} that, in the specific case of isolated 3015 * services, allows the caller to generate multiple instances of a service 3016 * from a single component declaration. In other words, you can use this to bind 3017 * to a service that has specified {@link android.R.attr#isolatedProcess} and, in 3018 * addition to the existing behavior of running in an isolated process, you can 3019 * also through the arguments here have the system bring up multiple concurrent 3020 * processes hosting their own instances of that service. The <var>instanceName</var> 3021 * you provide here identifies the different instances, and you can use 3022 * {@link #updateServiceGroup(ServiceConnection, int, int)} to tell the system how it 3023 * should manage each of these instances. 3024 * 3025 * @param service Identifies the service to connect to. The Intent must 3026 * specify an explicit component name. 3027 * @param flags Operation options for the binding as per {@link #bindService}. 3028 * @param instanceName Unique identifier for the service instance. Each unique 3029 * name here will result in a different service instance being created. Identifiers 3030 * must only contain ASCII letters, digits, underscores, and periods. 3031 * @return Returns success of binding as per {@link #bindService}. 3032 * @param executor Callbacks on ServiceConnection will be called on executor. 3033 * Must use same instance for the same instance of ServiceConnection. 3034 * @param conn Receives information as the service is started and stopped. 3035 * This must be a valid ServiceConnection object; it must not be null. 3036 * 3037 * @throws SecurityException If the caller does not have permission to access the service 3038 * @throws IllegalArgumentException If the instanceName is invalid. 3039 * 3040 * @see #bindService 3041 * @see #updateServiceGroup 3042 * @see android.R.attr#isolatedProcess 3043 */ 3044 public boolean bindIsolatedService(@RequiresPermission @NonNull Intent service, 3045 @BindServiceFlags int flags, @NonNull String instanceName, 3046 @NonNull @CallbackExecutor Executor executor, @NonNull ServiceConnection conn) { 3047 throw new RuntimeException("Not implemented. Must override in a subclass."); 3048 } 3049 3050 /** 3051 * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle 3052 * argument for use by system server and other multi-user aware code. 3053 * @hide 3054 */ 3055 @SystemApi 3056 @SuppressWarnings("unused") 3057 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 3058 public boolean bindServiceAsUser(@RequiresPermission Intent service, ServiceConnection conn, 3059 int flags, UserHandle user) { 3060 throw new RuntimeException("Not implemented. Must override in a subclass."); 3061 } 3062 3063 /** 3064 * Same as {@link #bindServiceAsUser(Intent, ServiceConnection, int, UserHandle)}, but with an 3065 * explicit non-null Handler to run the ServiceConnection callbacks on. 3066 * 3067 * @hide 3068 */ 3069 @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) 3070 @UnsupportedAppUsage 3071 public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags, 3072 Handler handler, UserHandle user) { 3073 throw new RuntimeException("Not implemented. Must override in a subclass."); 3074 } 3075 3076 /** 3077 * For a service previously bound with {@link #bindService} or a related method, change 3078 * how the system manages that service's process in relation to other processes. This 3079 * doesn't modify the original bind flags that were passed in when binding, but adjusts 3080 * how the process will be managed in some cases based on those flags. Currently only 3081 * works on isolated processes (will be ignored for non-isolated processes). 3082 * 3083 * <p>Note that this call does not take immediate effect, but will be applied the next 3084 * time the impacted process is adjusted for some other reason. Typically you would 3085 * call this before then calling a new {@link #bindIsolatedService} on the service 3086 * of interest, with that binding causing the process to be shuffled accordingly.</p> 3087 * 3088 * @param conn The connection interface previously supplied to bindService(). This 3089 * parameter must not be null. 3090 * @param group A group to put this connection's process in. Upon calling here, this 3091 * will override any previous group that was set for that process. The group 3092 * tells the system about processes that are logically grouped together, so 3093 * should be managed as one unit of importance (such as when being considered 3094 * a recently used app). All processes in the same app with the same group 3095 * are considered to be related. Supplying 0 reverts to the default behavior 3096 * of not grouping. 3097 * @param importance Additional importance of the processes within a group. Upon calling 3098 * here, this will override any previous importance that was set for that 3099 * process. The most important process is 0, and higher values are 3100 * successively less important. You can view this as describing how 3101 * to order the processes in an array, with the processes at the end of 3102 * the array being the least important. This value has no meaning besides 3103 * indicating how processes should be ordered in that array one after the 3104 * other. This provides a way to fine-tune the system's process killing, 3105 * guiding it to kill processes at the end of the array first. 3106 * 3107 * @see #bindIsolatedService 3108 */ 3109 public void updateServiceGroup(@NonNull ServiceConnection conn, int group, 3110 int importance) { 3111 throw new RuntimeException("Not implemented. Must override in a subclass."); 3112 } 3113 3114 /** 3115 * Disconnect from an application service. You will no longer receive 3116 * calls as the service is restarted, and the service is now allowed to 3117 * stop at any time. 3118 * 3119 * @param conn The connection interface previously supplied to 3120 * bindService(). This parameter must not be null. 3121 * 3122 * @see #bindService 3123 */ 3124 public abstract void unbindService(@NonNull ServiceConnection conn); 3125 3126 /** 3127 * Start executing an {@link android.app.Instrumentation} class. The given 3128 * Instrumentation component will be run by killing its target application 3129 * (if currently running), starting the target process, instantiating the 3130 * instrumentation component, and then letting it drive the application. 3131 * 3132 * <p>This function is not synchronous -- it returns as soon as the 3133 * instrumentation has started and while it is running. 3134 * 3135 * <p>Instrumentation is normally only allowed to run against a package 3136 * that is either unsigned or signed with a signature that the 3137 * the instrumentation package is also signed with (ensuring the target 3138 * trusts the instrumentation). 3139 * 3140 * @param className Name of the Instrumentation component to be run. 3141 * @param profileFile Optional path to write profiling data as the 3142 * instrumentation runs, or null for no profiling. 3143 * @param arguments Additional optional arguments to pass to the 3144 * instrumentation, or null. 3145 * 3146 * @return {@code true} if the instrumentation was successfully started, 3147 * else {@code false} if it could not be found. 3148 */ 3149 public abstract boolean startInstrumentation(@NonNull ComponentName className, 3150 @Nullable String profileFile, @Nullable Bundle arguments); 3151 3152 /** @hide */ 3153 @StringDef(suffix = { "_SERVICE" }, value = { 3154 POWER_SERVICE, 3155 WINDOW_SERVICE, 3156 LAYOUT_INFLATER_SERVICE, 3157 ACCOUNT_SERVICE, 3158 ACTIVITY_SERVICE, 3159 ALARM_SERVICE, 3160 NOTIFICATION_SERVICE, 3161 ACCESSIBILITY_SERVICE, 3162 CAPTIONING_SERVICE, 3163 KEYGUARD_SERVICE, 3164 LOCATION_SERVICE, 3165 //@hide: COUNTRY_DETECTOR, 3166 SEARCH_SERVICE, 3167 SENSOR_SERVICE, 3168 SENSOR_PRIVACY_SERVICE, 3169 STORAGE_SERVICE, 3170 STORAGE_STATS_SERVICE, 3171 WALLPAPER_SERVICE, 3172 TIME_ZONE_RULES_MANAGER_SERVICE, 3173 VIBRATOR_SERVICE, 3174 //@hide: STATUS_BAR_SERVICE, 3175 CONNECTIVITY_SERVICE, 3176 //@hide: IP_MEMORY_STORE_SERVICE, 3177 IPSEC_SERVICE, 3178 TEST_NETWORK_SERVICE, 3179 //@hide: UPDATE_LOCK_SERVICE, 3180 //@hide: NETWORKMANAGEMENT_SERVICE, 3181 NETWORK_STATS_SERVICE, 3182 //@hide: NETWORK_POLICY_SERVICE, 3183 WIFI_SERVICE, 3184 WIFI_AWARE_SERVICE, 3185 WIFI_P2P_SERVICE, 3186 WIFI_SCANNING_SERVICE, 3187 //@hide: LOWPAN_SERVICE, 3188 //@hide: WIFI_RTT_SERVICE, 3189 //@hide: ETHERNET_SERVICE, 3190 WIFI_RTT_RANGING_SERVICE, 3191 NSD_SERVICE, 3192 AUDIO_SERVICE, 3193 FINGERPRINT_SERVICE, 3194 //@hide: FACE_SERVICE, 3195 BIOMETRIC_SERVICE, 3196 MEDIA_ROUTER_SERVICE, 3197 TELEPHONY_SERVICE, 3198 TELEPHONY_SUBSCRIPTION_SERVICE, 3199 CARRIER_CONFIG_SERVICE, 3200 TELECOM_SERVICE, 3201 CLIPBOARD_SERVICE, 3202 INPUT_METHOD_SERVICE, 3203 TEXT_SERVICES_MANAGER_SERVICE, 3204 TEXT_CLASSIFICATION_SERVICE, 3205 APPWIDGET_SERVICE, 3206 //@hide: VOICE_INTERACTION_MANAGER_SERVICE, 3207 //@hide: BACKUP_SERVICE, 3208 ROLLBACK_SERVICE, 3209 DROPBOX_SERVICE, 3210 //@hide: DEVICE_IDLE_CONTROLLER, 3211 DEVICE_POLICY_SERVICE, 3212 UI_MODE_SERVICE, 3213 DOWNLOAD_SERVICE, 3214 NFC_SERVICE, 3215 BLUETOOTH_SERVICE, 3216 //@hide: SIP_SERVICE, 3217 USB_SERVICE, 3218 LAUNCHER_APPS_SERVICE, 3219 //@hide: SERIAL_SERVICE, 3220 //@hide: HDMI_CONTROL_SERVICE, 3221 INPUT_SERVICE, 3222 DISPLAY_SERVICE, 3223 //@hide COLOR_DISPLAY_SERVICE, 3224 USER_SERVICE, 3225 RESTRICTIONS_SERVICE, 3226 APP_OPS_SERVICE, 3227 ROLE_SERVICE, 3228 //@hide ROLE_CONTROLLER_SERVICE, 3229 CAMERA_SERVICE, 3230 PRINT_SERVICE, 3231 CONSUMER_IR_SERVICE, 3232 //@hide: TRUST_SERVICE, 3233 TV_INPUT_SERVICE, 3234 //@hide: NETWORK_SCORE_SERVICE, 3235 USAGE_STATS_SERVICE, 3236 MEDIA_SESSION_SERVICE, 3237 BATTERY_SERVICE, 3238 JOB_SCHEDULER_SERVICE, 3239 //@hide: PERSISTENT_DATA_BLOCK_SERVICE, 3240 //@hide: OEM_LOCK_SERVICE, 3241 MEDIA_PROJECTION_SERVICE, 3242 MIDI_SERVICE, 3243 RADIO_SERVICE, 3244 HARDWARE_PROPERTIES_SERVICE, 3245 //@hide: SOUND_TRIGGER_SERVICE, 3246 SHORTCUT_SERVICE, 3247 //@hide: CONTEXTHUB_SERVICE, 3248 SYSTEM_HEALTH_SERVICE, 3249 //@hide: INCIDENT_SERVICE, 3250 //@hide: INCIDENT_COMPANION_SERVICE, 3251 //@hide: STATS_COMPANION_SERVICE, 3252 COMPANION_DEVICE_SERVICE, 3253 CROSS_PROFILE_APPS_SERVICE, 3254 //@hide: SYSTEM_UPDATE_SERVICE, 3255 //@hide: TIME_DETECTOR_SERVICE, 3256 PERMISSION_SERVICE, 3257 }) 3258 @Retention(RetentionPolicy.SOURCE) 3259 public @interface ServiceName {} 3260 3261 /** 3262 * Return the handle to a system-level service by name. The class of the 3263 * returned object varies by the requested name. Currently available names 3264 * are: 3265 * 3266 * <dl> 3267 * <dt> {@link #WINDOW_SERVICE} ("window") 3268 * <dd> The top-level window manager in which you can place custom 3269 * windows. The returned object is a {@link android.view.WindowManager}. 3270 * <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater") 3271 * <dd> A {@link android.view.LayoutInflater} for inflating layout resources 3272 * in this context. 3273 * <dt> {@link #ACTIVITY_SERVICE} ("activity") 3274 * <dd> A {@link android.app.ActivityManager} for interacting with the 3275 * global activity state of the system. 3276 * <dt> {@link #POWER_SERVICE} ("power") 3277 * <dd> A {@link android.os.PowerManager} for controlling power 3278 * management. 3279 * <dt> {@link #ALARM_SERVICE} ("alarm") 3280 * <dd> A {@link android.app.AlarmManager} for receiving intents at the 3281 * time of your choosing. 3282 * <dt> {@link #NOTIFICATION_SERVICE} ("notification") 3283 * <dd> A {@link android.app.NotificationManager} for informing the user 3284 * of background events. 3285 * <dt> {@link #KEYGUARD_SERVICE} ("keyguard") 3286 * <dd> A {@link android.app.KeyguardManager} for controlling keyguard. 3287 * <dt> {@link #LOCATION_SERVICE} ("location") 3288 * <dd> A {@link android.location.LocationManager} for controlling location 3289 * (e.g., GPS) updates. 3290 * <dt> {@link #SEARCH_SERVICE} ("search") 3291 * <dd> A {@link android.app.SearchManager} for handling search. 3292 * <dt> {@link #VIBRATOR_SERVICE} ("vibrator") 3293 * <dd> A {@link android.os.Vibrator} for interacting with the vibrator 3294 * hardware. 3295 * <dt> {@link #CONNECTIVITY_SERVICE} ("connection") 3296 * <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for 3297 * handling management of network connections. 3298 * <dt> {@link #IPSEC_SERVICE} ("ipsec") 3299 * <dd> A {@link android.net.IpSecManager IpSecManager} for managing IPSec on 3300 * sockets and networks. 3301 * <dt> {@link #WIFI_SERVICE} ("wifi") 3302 * <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of Wi-Fi 3303 * connectivity. On releases before NYC, it should only be obtained from an application 3304 * context, and not from any other derived context to avoid memory leaks within the calling 3305 * process. 3306 * <dt> {@link #WIFI_AWARE_SERVICE} ("wifiaware") 3307 * <dd> A {@link android.net.wifi.aware.WifiAwareManager WifiAwareManager} for management of 3308 * Wi-Fi Aware discovery and connectivity. 3309 * <dt> {@link #WIFI_P2P_SERVICE} ("wifip2p") 3310 * <dd> A {@link android.net.wifi.p2p.WifiP2pManager WifiP2pManager} for management of 3311 * Wi-Fi Direct connectivity. 3312 * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method") 3313 * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager} 3314 * for management of input methods. 3315 * <dt> {@link #UI_MODE_SERVICE} ("uimode") 3316 * <dd> An {@link android.app.UiModeManager} for controlling UI modes. 3317 * <dt> {@link #DOWNLOAD_SERVICE} ("download") 3318 * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads 3319 * <dt> {@link #BATTERY_SERVICE} ("batterymanager") 3320 * <dd> A {@link android.os.BatteryManager} for managing battery state 3321 * <dt> {@link #JOB_SCHEDULER_SERVICE} ("taskmanager") 3322 * <dd> A {@link android.app.job.JobScheduler} for managing scheduled tasks 3323 * <dt> {@link #NETWORK_STATS_SERVICE} ("netstats") 3324 * <dd> A {@link android.app.usage.NetworkStatsManager NetworkStatsManager} for querying network 3325 * usage statistics. 3326 * <dt> {@link #HARDWARE_PROPERTIES_SERVICE} ("hardware_properties") 3327 * <dd> A {@link android.os.HardwarePropertiesManager} for accessing hardware properties. 3328 * </dl> 3329 * 3330 * <p>Note: System services obtained via this API may be closely associated with 3331 * the Context in which they are obtained from. In general, do not share the 3332 * service objects between various different contexts (Activities, Applications, 3333 * Services, Providers, etc.) 3334 * 3335 * <p>Note: Instant apps, for which {@link PackageManager#isInstantApp()} returns true, 3336 * don't have access to the following system services: {@link #DEVICE_POLICY_SERVICE}, 3337 * {@link #FINGERPRINT_SERVICE}, {@link #KEYGUARD_SERVICE}, {@link #SHORTCUT_SERVICE}, 3338 * {@link #USB_SERVICE}, {@link #WALLPAPER_SERVICE}, {@link #WIFI_P2P_SERVICE}, 3339 * {@link #WIFI_SERVICE}, {@link #WIFI_AWARE_SERVICE}. For these services this method will 3340 * return <code>null</code>. Generally, if you are running as an instant app you should always 3341 * check whether the result of this method is {@code null}. 3342 * 3343 * <p>Note: When implementing this method, keep in mind that new services can be added on newer 3344 * Android releases, so if you're looking for just the explicit names mentioned above, make sure 3345 * to return {@code null} when you don't recognize the name — if you throw a 3346 * {@link RuntimeException} exception instead, you're app might break on new Android releases. 3347 * 3348 * @param name The name of the desired service. 3349 * 3350 * @return The service or {@code null} if the name does not exist. 3351 * 3352 * @see #WINDOW_SERVICE 3353 * @see android.view.WindowManager 3354 * @see #LAYOUT_INFLATER_SERVICE 3355 * @see android.view.LayoutInflater 3356 * @see #ACTIVITY_SERVICE 3357 * @see android.app.ActivityManager 3358 * @see #POWER_SERVICE 3359 * @see android.os.PowerManager 3360 * @see #ALARM_SERVICE 3361 * @see android.app.AlarmManager 3362 * @see #NOTIFICATION_SERVICE 3363 * @see android.app.NotificationManager 3364 * @see #KEYGUARD_SERVICE 3365 * @see android.app.KeyguardManager 3366 * @see #LOCATION_SERVICE 3367 * @see android.location.LocationManager 3368 * @see #SEARCH_SERVICE 3369 * @see android.app.SearchManager 3370 * @see #SENSOR_SERVICE 3371 * @see android.hardware.SensorManager 3372 * @see #STORAGE_SERVICE 3373 * @see android.os.storage.StorageManager 3374 * @see #VIBRATOR_SERVICE 3375 * @see android.os.Vibrator 3376 * @see #CONNECTIVITY_SERVICE 3377 * @see android.net.ConnectivityManager 3378 * @see #WIFI_SERVICE 3379 * @see android.net.wifi.WifiManager 3380 * @see #AUDIO_SERVICE 3381 * @see android.media.AudioManager 3382 * @see #MEDIA_ROUTER_SERVICE 3383 * @see android.media.MediaRouter 3384 * @see #TELEPHONY_SERVICE 3385 * @see android.telephony.TelephonyManager 3386 * @see #TELEPHONY_SUBSCRIPTION_SERVICE 3387 * @see android.telephony.SubscriptionManager 3388 * @see #CARRIER_CONFIG_SERVICE 3389 * @see android.telephony.CarrierConfigManager 3390 * @see #INPUT_METHOD_SERVICE 3391 * @see android.view.inputmethod.InputMethodManager 3392 * @see #UI_MODE_SERVICE 3393 * @see android.app.UiModeManager 3394 * @see #DOWNLOAD_SERVICE 3395 * @see android.app.DownloadManager 3396 * @see #BATTERY_SERVICE 3397 * @see android.os.BatteryManager 3398 * @see #JOB_SCHEDULER_SERVICE 3399 * @see android.app.job.JobScheduler 3400 * @see #NETWORK_STATS_SERVICE 3401 * @see android.app.usage.NetworkStatsManager 3402 * @see android.os.HardwarePropertiesManager 3403 * @see #HARDWARE_PROPERTIES_SERVICE 3404 */ 3405 public abstract @Nullable Object getSystemService(@ServiceName @NonNull String name); 3406 3407 /** 3408 * Return the handle to a system-level service by class. 3409 * <p> 3410 * Currently available classes are: 3411 * {@link android.view.WindowManager}, {@link android.view.LayoutInflater}, 3412 * {@link android.app.ActivityManager}, {@link android.os.PowerManager}, 3413 * {@link android.app.AlarmManager}, {@link android.app.NotificationManager}, 3414 * {@link android.app.KeyguardManager}, {@link android.location.LocationManager}, 3415 * {@link android.app.SearchManager}, {@link android.os.Vibrator}, 3416 * {@link android.net.ConnectivityManager}, 3417 * {@link android.net.wifi.WifiManager}, 3418 * {@link android.media.AudioManager}, {@link android.media.MediaRouter}, 3419 * {@link android.telephony.TelephonyManager}, {@link android.telephony.SubscriptionManager}, 3420 * {@link android.view.inputmethod.InputMethodManager}, 3421 * {@link android.app.UiModeManager}, {@link android.app.DownloadManager}, 3422 * {@link android.os.BatteryManager}, {@link android.app.job.JobScheduler}, 3423 * {@link android.app.usage.NetworkStatsManager}. 3424 * </p> 3425 * 3426 * <p> 3427 * Note: System services obtained via this API may be closely associated with 3428 * the Context in which they are obtained from. In general, do not share the 3429 * service objects between various different contexts (Activities, Applications, 3430 * Services, Providers, etc.) 3431 * </p> 3432 * 3433 * <p>Note: Instant apps, for which {@link PackageManager#isInstantApp()} returns true, 3434 * don't have access to the following system services: {@link #DEVICE_POLICY_SERVICE}, 3435 * {@link #FINGERPRINT_SERVICE}, {@link #KEYGUARD_SERVICE}, {@link #SHORTCUT_SERVICE}, 3436 * {@link #USB_SERVICE}, {@link #WALLPAPER_SERVICE}, {@link #WIFI_P2P_SERVICE}, 3437 * {@link #WIFI_SERVICE}, {@link #WIFI_AWARE_SERVICE}. For these services this method will 3438 * return {@code null}. Generally, if you are running as an instant app you should always 3439 * check whether the result of this method is {@code null}. 3440 * </p> 3441 * 3442 * @param serviceClass The class of the desired service. 3443 * @return The service or {@code null} if the class is not a supported system service. Note: 3444 * <b>never</b> throw a {@link RuntimeException} if the name is not supported. 3445 */ 3446 @SuppressWarnings("unchecked") 3447 public final @Nullable <T> T getSystemService(@NonNull Class<T> serviceClass) { 3448 // Because subclasses may override getSystemService(String) we cannot 3449 // perform a lookup by class alone. We must first map the class to its 3450 // service name then invoke the string-based method. 3451 String serviceName = getSystemServiceName(serviceClass); 3452 return serviceName != null ? (T)getSystemService(serviceName) : null; 3453 } 3454 3455 /** 3456 * Gets the name of the system-level service that is represented by the specified class. 3457 * 3458 * @param serviceClass The class of the desired service. 3459 * @return The service name or null if the class is not a supported system service. 3460 */ 3461 public abstract @Nullable String getSystemServiceName(@NonNull Class<?> serviceClass); 3462 3463 /** 3464 * Use with {@link #getSystemService(String)} to retrieve a 3465 * {@link android.os.PowerManager} for controlling power management, 3466 * including "wake locks," which let you keep the device on while 3467 * you're running long tasks. 3468 */ 3469 public static final String POWER_SERVICE = "power"; 3470 3471 /** 3472 * Use with {@link #getSystemService(String)} to retrieve a 3473 * {@link android.os.RecoverySystem} for accessing the recovery system 3474 * service. 3475 * 3476 * @see #getSystemService(String) 3477 * @hide 3478 */ 3479 public static final String RECOVERY_SERVICE = "recovery"; 3480 3481 /** 3482 * Use with {@link #getSystemService(String)} to retrieve a 3483 * {@link android.os.SystemUpdateManager} for accessing the system update 3484 * manager service. 3485 * 3486 * @see #getSystemService(String) 3487 * @hide 3488 */ 3489 @SystemApi 3490 public static final String SYSTEM_UPDATE_SERVICE = "system_update"; 3491 3492 /** 3493 * Use with {@link #getSystemService(String)} to retrieve a 3494 * {@link android.view.WindowManager} for accessing the system's window 3495 * manager. 3496 * 3497 * @see #getSystemService(String) 3498 * @see android.view.WindowManager 3499 */ 3500 public static final String WINDOW_SERVICE = "window"; 3501 3502 /** 3503 * Use with {@link #getSystemService(String)} to retrieve a 3504 * {@link android.view.LayoutInflater} for inflating layout resources in this 3505 * context. 3506 * 3507 * @see #getSystemService(String) 3508 * @see android.view.LayoutInflater 3509 */ 3510 public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater"; 3511 3512 /** 3513 * Use with {@link #getSystemService(String)} to retrieve a 3514 * {@link android.accounts.AccountManager} for receiving intents at a 3515 * time of your choosing. 3516 * 3517 * @see #getSystemService(String) 3518 * @see android.accounts.AccountManager 3519 */ 3520 public static final String ACCOUNT_SERVICE = "account"; 3521 3522 /** 3523 * Use with {@link #getSystemService(String)} to retrieve a 3524 * {@link android.app.ActivityManager} for interacting with the global 3525 * system state. 3526 * 3527 * @see #getSystemService(String) 3528 * @see android.app.ActivityManager 3529 */ 3530 public static final String ACTIVITY_SERVICE = "activity"; 3531 3532 /** 3533 * Use with {@link #getSystemService(String)} to retrieve a 3534 * {@link android.app.ActivityTaskManager} for interacting with the global system state. 3535 * 3536 * @see #getSystemService(String) 3537 * @see android.app.ActivityTaskManager 3538 * @hide 3539 */ 3540 public static final String ACTIVITY_TASK_SERVICE = "activity_task"; 3541 3542 /** 3543 * Use with {@link #getSystemService(String)} to retrieve a 3544 * {@link android.app.UriGrantsManager} for interacting with the global system state. 3545 * 3546 * @see #getSystemService(String) 3547 * @see android.app.UriGrantsManager 3548 * @hide 3549 */ 3550 public static final String URI_GRANTS_SERVICE = "uri_grants"; 3551 3552 /** 3553 * Use with {@link #getSystemService(String)} to retrieve a 3554 * {@link android.app.AlarmManager} for receiving intents at a 3555 * time of your choosing. 3556 * 3557 * @see #getSystemService(String) 3558 * @see android.app.AlarmManager 3559 */ 3560 public static final String ALARM_SERVICE = "alarm"; 3561 3562 /** 3563 * Use with {@link #getSystemService(String)} to retrieve a 3564 * {@link android.app.NotificationManager} for informing the user of 3565 * background events. 3566 * 3567 * @see #getSystemService(String) 3568 * @see android.app.NotificationManager 3569 */ 3570 public static final String NOTIFICATION_SERVICE = "notification"; 3571 3572 /** 3573 * Use with {@link #getSystemService(String)} to retrieve a 3574 * {@link android.view.accessibility.AccessibilityManager} for giving the user 3575 * feedback for UI events through the registered event listeners. 3576 * 3577 * @see #getSystemService(String) 3578 * @see android.view.accessibility.AccessibilityManager 3579 */ 3580 public static final String ACCESSIBILITY_SERVICE = "accessibility"; 3581 3582 /** 3583 * Use with {@link #getSystemService(String)} to retrieve a 3584 * {@link android.view.accessibility.CaptioningManager} for obtaining 3585 * captioning properties and listening for changes in captioning 3586 * preferences. 3587 * 3588 * @see #getSystemService(String) 3589 * @see android.view.accessibility.CaptioningManager 3590 */ 3591 public static final String CAPTIONING_SERVICE = "captioning"; 3592 3593 /** 3594 * Use with {@link #getSystemService(String)} to retrieve a 3595 * {@link android.app.KeyguardManager} for controlling keyguard. 3596 * 3597 * @see #getSystemService(String) 3598 * @see android.app.KeyguardManager 3599 */ 3600 public static final String KEYGUARD_SERVICE = "keyguard"; 3601 3602 /** 3603 * Use with {@link #getSystemService(String)} to retrieve a {@link 3604 * android.location.LocationManager} for controlling location 3605 * updates. 3606 * 3607 * @see #getSystemService(String) 3608 * @see android.location.LocationManager 3609 */ 3610 public static final String LOCATION_SERVICE = "location"; 3611 3612 /** 3613 * Use with {@link #getSystemService(String)} to retrieve a 3614 * {@link android.location.CountryDetector} for detecting the country that 3615 * the user is in. 3616 * 3617 * @hide 3618 */ 3619 @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) 3620 public static final String COUNTRY_DETECTOR = "country_detector"; 3621 3622 /** 3623 * Use with {@link #getSystemService(String)} to retrieve a {@link 3624 * android.app.SearchManager} for handling searches. 3625 * 3626 * <p> 3627 * {@link Configuration#UI_MODE_TYPE_WATCH} does not support 3628 * {@link android.app.SearchManager}. 3629 * 3630 * @see #getSystemService 3631 * @see android.app.SearchManager 3632 */ 3633 public static final String SEARCH_SERVICE = "search"; 3634 3635 /** 3636 * Use with {@link #getSystemService(String)} to retrieve a {@link 3637 * android.hardware.SensorManager} for accessing sensors. 3638 * 3639 * @see #getSystemService(String) 3640 * @see android.hardware.SensorManager 3641 */ 3642 public static final String SENSOR_SERVICE = "sensor"; 3643 3644 /** 3645 * Use with {@link #getSystemService(String)} to retrieve a {@link 3646 * android.hardware.SensorPrivacyManager} for accessing sensor privacy 3647 * functions. 3648 * 3649 * @see #getSystemService(String) 3650 * @see android.hardware.SensorPrivacyManager 3651 * 3652 * @hide 3653 */ 3654 public static final String SENSOR_PRIVACY_SERVICE = "sensor_privacy"; 3655 3656 /** 3657 * Use with {@link #getSystemService(String)} to retrieve a {@link 3658 * android.os.storage.StorageManager} for accessing system storage 3659 * functions. 3660 * 3661 * @see #getSystemService(String) 3662 * @see android.os.storage.StorageManager 3663 */ 3664 public static final String STORAGE_SERVICE = "storage"; 3665 3666 /** 3667 * Use with {@link #getSystemService(String)} to retrieve a {@link 3668 * android.app.usage.StorageStatsManager} for accessing system storage 3669 * statistics. 3670 * 3671 * @see #getSystemService(String) 3672 * @see android.app.usage.StorageStatsManager 3673 */ 3674 public static final String STORAGE_STATS_SERVICE = "storagestats"; 3675 3676 /** 3677 * Use with {@link #getSystemService(String)} to retrieve a 3678 * com.android.server.WallpaperService for accessing wallpapers. 3679 * 3680 * @see #getSystemService(String) 3681 */ 3682 public static final String WALLPAPER_SERVICE = "wallpaper"; 3683 3684 /** 3685 * Use with {@link #getSystemService(String)} to retrieve a {@link 3686 * android.os.Vibrator} for interacting with the vibration hardware. 3687 * 3688 * @see #getSystemService(String) 3689 * @see android.os.Vibrator 3690 */ 3691 public static final String VIBRATOR_SERVICE = "vibrator"; 3692 3693 /** 3694 * Use with {@link #getSystemService(String)} to retrieve a {@link 3695 * android.app.StatusBarManager} for interacting with the status bar. 3696 * 3697 * @see #getSystemService(String) 3698 * @see android.app.StatusBarManager 3699 * 3700 * @hide 3701 */ 3702 @SystemApi 3703 @TestApi 3704 public static final String STATUS_BAR_SERVICE = "statusbar"; 3705 3706 /** 3707 * Use with {@link #getSystemService(String)} to retrieve a {@link 3708 * android.net.ConnectivityManager} for handling management of 3709 * network connections. 3710 * 3711 * @see #getSystemService(String) 3712 * @see android.net.ConnectivityManager 3713 */ 3714 public static final String CONNECTIVITY_SERVICE = "connectivity"; 3715 3716 /** 3717 * Use with {@link #getSystemService(String)} to retrieve a 3718 * {@link android.net.INetd} for communicating with the network stack 3719 * @hide 3720 * @see #getSystemService(String) 3721 * @hide 3722 */ 3723 @SystemApi 3724 public static final String NETD_SERVICE = "netd"; 3725 3726 /** 3727 * Use with {@link android.os.ServiceManager.getService()} to retrieve a 3728 * {@link NetworkStackClient} IBinder for communicating with the network stack 3729 * @hide 3730 * @see NetworkStackClient 3731 */ 3732 public static final String NETWORK_STACK_SERVICE = "network_stack"; 3733 3734 /** 3735 * Use with {@link #getSystemService(String)} to retrieve a 3736 * {@link android.net.IpSecManager} for encrypting Sockets or Networks with 3737 * IPSec. 3738 * 3739 * @see #getSystemService(String) 3740 */ 3741 public static final String IPSEC_SERVICE = "ipsec"; 3742 3743 /** 3744 * Use with {@link #getSystemService(String)} to retrieve a {@link 3745 * android.net.TestNetworkManager} for building TUNs and limited-use Networks 3746 * 3747 * @see #getSystemService(String) 3748 * @hide 3749 */ 3750 @TestApi public static final String TEST_NETWORK_SERVICE = "test_network"; 3751 3752 /** 3753 * Use with {@link #getSystemService(String)} to retrieve a {@link 3754 * android.os.IUpdateLock} for managing runtime sequences that 3755 * must not be interrupted by headless OTA application or similar. 3756 * 3757 * @hide 3758 * @see #getSystemService(String) 3759 * @see android.os.UpdateLock 3760 */ 3761 public static final String UPDATE_LOCK_SERVICE = "updatelock"; 3762 3763 /** 3764 * Constant for the internal network management service, not really a Context service. 3765 * @hide 3766 */ 3767 public static final String NETWORKMANAGEMENT_SERVICE = "network_management"; 3768 3769 /** 3770 * Use with {@link #getSystemService(String)} to retrieve a 3771 * {@link com.android.server.slice.SliceManagerService} for managing slices. 3772 * @hide 3773 * @see #getSystemService(String) 3774 */ 3775 public static final String SLICE_SERVICE = "slice"; 3776 3777 /** 3778 * Use with {@link #getSystemService(String)} to retrieve a {@link 3779 * android.app.usage.NetworkStatsManager} for querying network usage stats. 3780 * 3781 * @see #getSystemService(String) 3782 * @see android.app.usage.NetworkStatsManager 3783 */ 3784 public static final String NETWORK_STATS_SERVICE = "netstats"; 3785 /** {@hide} */ 3786 public static final String NETWORK_POLICY_SERVICE = "netpolicy"; 3787 /** {@hide} */ 3788 public static final String NETWORK_WATCHLIST_SERVICE = "network_watchlist"; 3789 3790 /** 3791 * Use with {@link #getSystemService(String)} to retrieve a {@link 3792 * android.net.wifi.WifiManager} for handling management of 3793 * Wi-Fi access. 3794 * 3795 * @see #getSystemService(String) 3796 * @see android.net.wifi.WifiManager 3797 */ 3798 public static final String WIFI_SERVICE = "wifi"; 3799 3800 /** 3801 * Use with {@link #getSystemService(String)} to retrieve a {@link 3802 * android.net.wifi.p2p.WifiP2pManager} for handling management of 3803 * Wi-Fi peer-to-peer connections. 3804 * 3805 * @see #getSystemService(String) 3806 * @see android.net.wifi.p2p.WifiP2pManager 3807 */ 3808 public static final String WIFI_P2P_SERVICE = "wifip2p"; 3809 3810 /** 3811 * Use with {@link #getSystemService(String)} to retrieve a 3812 * {@link android.net.wifi.aware.WifiAwareManager} for handling management of 3813 * Wi-Fi Aware. 3814 * 3815 * @see #getSystemService(String) 3816 * @see android.net.wifi.aware.WifiAwareManager 3817 */ 3818 public static final String WIFI_AWARE_SERVICE = "wifiaware"; 3819 3820 /** 3821 * Use with {@link #getSystemService(String)} to retrieve a {@link 3822 * android.net.wifi.WifiScanner} for scanning the wifi universe 3823 * 3824 * @see #getSystemService(String) 3825 * @see android.net.wifi.WifiScanner 3826 * @hide 3827 */ 3828 @SystemApi 3829 public static final String WIFI_SCANNING_SERVICE = "wifiscanner"; 3830 3831 /** 3832 * Use with {@link #getSystemService(String)} to retrieve a {@link 3833 * android.net.wifi.RttManager} for ranging devices with wifi 3834 * 3835 * @see #getSystemService(String) 3836 * @see android.net.wifi.RttManager 3837 * @hide 3838 */ 3839 @SystemApi 3840 @Deprecated 3841 public static final String WIFI_RTT_SERVICE = "rttmanager"; 3842 3843 /** 3844 * Use with {@link #getSystemService(String)} to retrieve a {@link 3845 * android.net.wifi.rtt.WifiRttManager} for ranging devices with wifi. 3846 * 3847 * @see #getSystemService(String) 3848 * @see android.net.wifi.rtt.WifiRttManager 3849 */ 3850 public static final String WIFI_RTT_RANGING_SERVICE = "wifirtt"; 3851 3852 /** 3853 * Use with {@link #getSystemService(String)} to retrieve a {@link 3854 * android.net.lowpan.LowpanManager} for handling management of 3855 * LoWPAN access. 3856 * 3857 * @see #getSystemService(String) 3858 * @see android.net.lowpan.LowpanManager 3859 * 3860 * @hide 3861 */ 3862 public static final String LOWPAN_SERVICE = "lowpan"; 3863 3864 /** 3865 * Use with {@link #getSystemService(String)} to retrieve a {@link 3866 * android.net.EthernetManager} for handling management of 3867 * Ethernet access. 3868 * 3869 * @see #getSystemService(String) 3870 * @see android.net.EthernetManager 3871 * 3872 * @hide 3873 */ 3874 @UnsupportedAppUsage 3875 public static final String ETHERNET_SERVICE = "ethernet"; 3876 3877 /** 3878 * Use with {@link #getSystemService(String)} to retrieve a {@link 3879 * android.net.nsd.NsdManager} for handling management of network service 3880 * discovery 3881 * 3882 * @see #getSystemService(String) 3883 * @see android.net.nsd.NsdManager 3884 */ 3885 public static final String NSD_SERVICE = "servicediscovery"; 3886 3887 /** 3888 * Use with {@link #getSystemService(String)} to retrieve a 3889 * {@link android.media.AudioManager} for handling management of volume, 3890 * ringer modes and audio routing. 3891 * 3892 * @see #getSystemService(String) 3893 * @see android.media.AudioManager 3894 */ 3895 public static final String AUDIO_SERVICE = "audio"; 3896 3897 /** 3898 * Use with {@link #getSystemService(String)} to retrieve a 3899 * {@link android.hardware.fingerprint.FingerprintManager} for handling management 3900 * of fingerprints. 3901 * 3902 * @see #getSystemService(String) 3903 * @see android.hardware.fingerprint.FingerprintManager 3904 */ 3905 public static final String FINGERPRINT_SERVICE = "fingerprint"; 3906 3907 /** 3908 * Use with {@link #getSystemService(String)} to retrieve a 3909 * {@link android.hardware.face.FaceManager} for handling management 3910 * of face authentication. 3911 * 3912 * @hide 3913 * @see #getSystemService 3914 * @see android.hardware.face.FaceManager 3915 */ 3916 public static final String FACE_SERVICE = "face"; 3917 3918 /** 3919 * Use with {@link #getSystemService(String)} to retrieve a 3920 * {@link android.hardware.iris.IrisManager} for handling management 3921 * of iris authentication. 3922 * 3923 * @hide 3924 * @see #getSystemService 3925 * @see android.hardware.iris.IrisManager 3926 */ 3927 public static final String IRIS_SERVICE = "iris"; 3928 3929 /** 3930 * Use with {@link #getSystemService(String)} to retrieve a 3931 * {@link android.hardware.biometrics.BiometricManager} for handling management 3932 * of face authentication. 3933 * 3934 * @see #getSystemService 3935 * @see android.hardware.biometrics.BiometricManager 3936 */ 3937 public static final String BIOMETRIC_SERVICE = "biometric"; 3938 3939 /** 3940 * Use with {@link #getSystemService} to retrieve a 3941 * {@link android.media.MediaRouter} for controlling and managing 3942 * routing of media. 3943 * 3944 * @see #getSystemService(String) 3945 * @see android.media.MediaRouter 3946 */ 3947 public static final String MEDIA_ROUTER_SERVICE = "media_router"; 3948 3949 /** 3950 * Use with {@link #getSystemService(String)} to retrieve a 3951 * {@link android.media.session.MediaSessionManager} for managing media Sessions. 3952 * 3953 * @see #getSystemService(String) 3954 * @see android.media.session.MediaSessionManager 3955 */ 3956 public static final String MEDIA_SESSION_SERVICE = "media_session"; 3957 3958 /** 3959 * Use with {@link #getSystemService(String)} to retrieve a 3960 * {@link android.telephony.TelephonyManager} for handling management the 3961 * telephony features of the device. 3962 * 3963 * @see #getSystemService(String) 3964 * @see android.telephony.TelephonyManager 3965 */ 3966 public static final String TELEPHONY_SERVICE = "phone"; 3967 3968 /** 3969 * Use with {@link #getSystemService(String)} to retrieve a 3970 * {@link android.telephony.SubscriptionManager} for handling management the 3971 * telephony subscriptions of the device. 3972 * 3973 * @see #getSystemService(String) 3974 * @see android.telephony.SubscriptionManager 3975 */ 3976 public static final String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service"; 3977 3978 /** 3979 * Use with {@link #getSystemService(String)} to retrieve a 3980 * {@link android.telecom.TelecomManager} to manage telecom-related features 3981 * of the device. 3982 * 3983 * @see #getSystemService(String) 3984 * @see android.telecom.TelecomManager 3985 */ 3986 public static final String TELECOM_SERVICE = "telecom"; 3987 3988 /** 3989 * Use with {@link #getSystemService(String)} to retrieve a 3990 * {@link android.telephony.CarrierConfigManager} for reading carrier configuration values. 3991 * 3992 * @see #getSystemService(String) 3993 * @see android.telephony.CarrierConfigManager 3994 */ 3995 public static final String CARRIER_CONFIG_SERVICE = "carrier_config"; 3996 3997 /** 3998 * Use with {@link #getSystemService(String)} to retrieve a 3999 * {@link android.telephony.euicc.EuiccManager} to manage the device eUICC (embedded SIM). 4000 * 4001 * @see #getSystemService(String) 4002 * @see android.telephony.euicc.EuiccManager 4003 */ 4004 public static final String EUICC_SERVICE = "euicc"; 4005 4006 /** 4007 * Use with {@link #getSystemService(String)} to retrieve a 4008 * {@link android.telephony.euicc.EuiccCardManager} to access the device eUICC (embedded SIM). 4009 * 4010 * @see #getSystemService(String) 4011 * @see android.telephony.euicc.EuiccCardManager 4012 * @hide 4013 */ 4014 @SystemApi 4015 public static final String EUICC_CARD_SERVICE = "euicc_card"; 4016 4017 /** 4018 * Use with {@link #getSystemService(String)} to retrieve a 4019 * {@link android.content.ClipboardManager} for accessing and modifying 4020 * the contents of the global clipboard. 4021 * 4022 * @see #getSystemService(String) 4023 * @see android.content.ClipboardManager 4024 */ 4025 public static final String CLIPBOARD_SERVICE = "clipboard"; 4026 4027 /** 4028 * Use with {@link #getSystemService(String)} to retrieve a 4029 * {@link TextClassificationManager} for text classification services. 4030 * 4031 * @see #getSystemService(String) 4032 * @see TextClassificationManager 4033 */ 4034 public static final String TEXT_CLASSIFICATION_SERVICE = "textclassification"; 4035 4036 /** 4037 * Use with {@link #getSystemService(String)} to retrieve a 4038 * {@link com.android.server.attention.AttentionManagerService} for attention services. 4039 * 4040 * @see #getSystemService(String) 4041 * @see android.server.attention.AttentionManagerService 4042 * @hide 4043 */ 4044 public static final String ATTENTION_SERVICE = "attention"; 4045 4046 /** 4047 * Use with {@link #getSystemService(String)} to retrieve a 4048 * {@link android.view.inputmethod.InputMethodManager} for accessing input 4049 * methods. 4050 * 4051 * @see #getSystemService(String) 4052 */ 4053 public static final String INPUT_METHOD_SERVICE = "input_method"; 4054 4055 /** 4056 * Use with {@link #getSystemService(String)} to retrieve a 4057 * {@link android.view.textservice.TextServicesManager} for accessing 4058 * text services. 4059 * 4060 * @see #getSystemService(String) 4061 */ 4062 public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices"; 4063 4064 /** 4065 * Use with {@link #getSystemService(String)} to retrieve a 4066 * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets. 4067 * 4068 * @see #getSystemService(String) 4069 */ 4070 public static final String APPWIDGET_SERVICE = "appwidget"; 4071 4072 /** 4073 * Official published name of the (internal) voice interaction manager service. 4074 * 4075 * @hide 4076 * @see #getSystemService(String) 4077 */ 4078 public static final String VOICE_INTERACTION_MANAGER_SERVICE = "voiceinteraction"; 4079 4080 /** 4081 * Official published name of the (internal) autofill service. 4082 * 4083 * @hide 4084 * @see #getSystemService(String) 4085 */ 4086 public static final String AUTOFILL_MANAGER_SERVICE = "autofill"; 4087 4088 /** 4089 * Official published name of the content capture service. 4090 * 4091 * @hide 4092 * @see #getSystemService(String) 4093 */ 4094 @TestApi 4095 public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture"; 4096 4097 /** 4098 * Used for getting content selections and classifications for task snapshots. 4099 * 4100 * @hide 4101 * @see #getSystemService(String) 4102 */ 4103 @SystemApi 4104 public static final String CONTENT_SUGGESTIONS_SERVICE = "content_suggestions"; 4105 4106 /** 4107 * Official published name of the app prediction service. 4108 * 4109 * @hide 4110 * @see #getSystemService(String) 4111 */ 4112 @SystemApi 4113 public static final String APP_PREDICTION_SERVICE = "app_prediction"; 4114 4115 /** 4116 * Use with {@link #getSystemService(String)} to access the 4117 * {@link com.android.server.voiceinteraction.SoundTriggerService}. 4118 * 4119 * @hide 4120 * @see #getSystemService(String) 4121 */ 4122 public static final String SOUND_TRIGGER_SERVICE = "soundtrigger"; 4123 4124 /** 4125 * Official published name of the (internal) permission service. 4126 * 4127 * @see #getSystemService(String) 4128 * @hide 4129 */ 4130 @TestApi 4131 @SystemApi 4132 public static final String PERMISSION_SERVICE = "permission"; 4133 4134 /** 4135 * Official published name of the (internal) permission controller service. 4136 * 4137 * @see #getSystemService(String) 4138 * @hide 4139 */ 4140 public static final String PERMISSION_CONTROLLER_SERVICE = "permission_controller"; 4141 4142 /** 4143 * Use with {@link #getSystemService(String)} to retrieve an 4144 * {@link android.app.backup.IBackupManager IBackupManager} for communicating 4145 * with the backup mechanism. 4146 * @hide 4147 * 4148 * @see #getSystemService(String) 4149 */ 4150 @SystemApi 4151 public static final String BACKUP_SERVICE = "backup"; 4152 4153 /** 4154 * Use with {@link #getSystemService(String)} to retrieve an 4155 * {@link android.content.rollback.RollbackManager} for communicating 4156 * with the rollback manager 4157 * 4158 * @see #getSystemService(String) 4159 * @hide 4160 */ 4161 @SystemApi @TestApi 4162 public static final String ROLLBACK_SERVICE = "rollback"; 4163 4164 /** 4165 * Use with {@link #getSystemService(String)} to retrieve a 4166 * {@link android.os.DropBoxManager} instance for recording 4167 * diagnostic logs. 4168 * @see #getSystemService(String) 4169 */ 4170 public static final String DROPBOX_SERVICE = "dropbox"; 4171 4172 /** 4173 * System service name for the DeviceIdleManager. 4174 * @see #getSystemService(String) 4175 * @hide 4176 */ 4177 public static final String DEVICE_IDLE_CONTROLLER = "deviceidle"; 4178 4179 /** 4180 * Use with {@link #getSystemService(String)} to retrieve a 4181 * {@link android.app.admin.DevicePolicyManager} for working with global 4182 * device policy management. 4183 * 4184 * @see #getSystemService(String) 4185 */ 4186 public static final String DEVICE_POLICY_SERVICE = "device_policy"; 4187 4188 /** 4189 * Use with {@link #getSystemService(String)} to retrieve a 4190 * {@link android.app.UiModeManager} for controlling UI modes. 4191 * 4192 * @see #getSystemService(String) 4193 */ 4194 public static final String UI_MODE_SERVICE = "uimode"; 4195 4196 /** 4197 * Use with {@link #getSystemService(String)} to retrieve a 4198 * {@link android.app.DownloadManager} for requesting HTTP downloads. 4199 * 4200 * @see #getSystemService(String) 4201 */ 4202 public static final String DOWNLOAD_SERVICE = "download"; 4203 4204 /** 4205 * Use with {@link #getSystemService(String)} to retrieve a 4206 * {@link android.os.BatteryManager} for managing battery state. 4207 * 4208 * @see #getSystemService(String) 4209 */ 4210 public static final String BATTERY_SERVICE = "batterymanager"; 4211 4212 /** 4213 * Use with {@link #getSystemService(String)} to retrieve a 4214 * {@link android.nfc.NfcManager} for using NFC. 4215 * 4216 * @see #getSystemService(String) 4217 */ 4218 public static final String NFC_SERVICE = "nfc"; 4219 4220 /** 4221 * Use with {@link #getSystemService(String)} to retrieve a 4222 * {@link android.bluetooth.BluetoothManager} for using Bluetooth. 4223 * 4224 * @see #getSystemService(String) 4225 */ 4226 public static final String BLUETOOTH_SERVICE = "bluetooth"; 4227 4228 /** 4229 * Use with {@link #getSystemService(String)} to retrieve a 4230 * {@link android.net.sip.SipManager} for accessing the SIP related service. 4231 * 4232 * @see #getSystemService(String) 4233 */ 4234 /** @hide */ 4235 public static final String SIP_SERVICE = "sip"; 4236 4237 /** 4238 * Use with {@link #getSystemService(String)} to retrieve a {@link 4239 * android.hardware.usb.UsbManager} for access to USB devices (as a USB host) 4240 * and for controlling this device's behavior as a USB device. 4241 * 4242 * @see #getSystemService(String) 4243 * @see android.hardware.usb.UsbManager 4244 */ 4245 public static final String USB_SERVICE = "usb"; 4246 4247 /** 4248 * Use with {@link #getSystemService(String)} to retrieve a {@link 4249 * Use with {@link #getSystemService} to retrieve a {@link 4250 * android.debug.AdbManager} for access to ADB debug functions. 4251 * 4252 * @see #getSystemService(String) 4253 * @see android.debug.AdbManager 4254 * 4255 * @hide 4256 */ 4257 public static final String ADB_SERVICE = "adb"; 4258 4259 /** 4260 * Use with {@link #getSystemService(String)} to retrieve a {@link 4261 * android.hardware.SerialManager} for access to serial ports. 4262 * 4263 * @see #getSystemService(String) 4264 * @see android.hardware.SerialManager 4265 * 4266 * @hide 4267 */ 4268 public static final String SERIAL_SERVICE = "serial"; 4269 4270 /** 4271 * Use with {@link #getSystemService(String)} to retrieve a 4272 * {@link android.hardware.hdmi.HdmiControlManager} for controlling and managing 4273 * HDMI-CEC protocol. 4274 * 4275 * @see #getSystemService(String) 4276 * @see android.hardware.hdmi.HdmiControlManager 4277 * @hide 4278 */ 4279 @SystemApi 4280 public static final String HDMI_CONTROL_SERVICE = "hdmi_control"; 4281 4282 /** 4283 * Use with {@link #getSystemService(String)} to retrieve a 4284 * {@link android.hardware.input.InputManager} for interacting with input devices. 4285 * 4286 * @see #getSystemService(String) 4287 * @see android.hardware.input.InputManager 4288 */ 4289 public static final String INPUT_SERVICE = "input"; 4290 4291 /** 4292 * Use with {@link #getSystemService(String)} to retrieve a 4293 * {@link android.hardware.display.DisplayManager} for interacting with display devices. 4294 * 4295 * @see #getSystemService(String) 4296 * @see android.hardware.display.DisplayManager 4297 */ 4298 public static final String DISPLAY_SERVICE = "display"; 4299 4300 /** 4301 * Use with {@link #getSystemService(String)} to retrieve a 4302 * {@link android.hardware.display.ColorDisplayManager} for controlling color transforms. 4303 * 4304 * @see #getSystemService(String) 4305 * @see android.hardware.display.ColorDisplayManager 4306 * @hide 4307 */ 4308 public static final String COLOR_DISPLAY_SERVICE = "color_display"; 4309 4310 /** 4311 * Use with {@link #getSystemService(String)} to retrieve a 4312 * {@link android.os.UserManager} for managing users on devices that support multiple users. 4313 * 4314 * @see #getSystemService(String) 4315 * @see android.os.UserManager 4316 */ 4317 public static final String USER_SERVICE = "user"; 4318 4319 /** 4320 * Use with {@link #getSystemService(String)} to retrieve a 4321 * {@link android.content.pm.LauncherApps} for querying and monitoring launchable apps across 4322 * profiles of a user. 4323 * 4324 * @see #getSystemService(String) 4325 * @see android.content.pm.LauncherApps 4326 */ 4327 public static final String LAUNCHER_APPS_SERVICE = "launcherapps"; 4328 4329 /** 4330 * Use with {@link #getSystemService(String)} to retrieve a 4331 * {@link android.content.RestrictionsManager} for retrieving application restrictions 4332 * and requesting permissions for restricted operations. 4333 * @see #getSystemService(String) 4334 * @see android.content.RestrictionsManager 4335 */ 4336 public static final String RESTRICTIONS_SERVICE = "restrictions"; 4337 4338 /** 4339 * Use with {@link #getSystemService(String)} to retrieve a 4340 * {@link android.app.AppOpsManager} for tracking application operations 4341 * on the device. 4342 * 4343 * @see #getSystemService(String) 4344 * @see android.app.AppOpsManager 4345 */ 4346 public static final String APP_OPS_SERVICE = "appops"; 4347 4348 /** 4349 * Use with {@link #getSystemService(String)} to retrieve a {@link android.app.role.RoleManager} 4350 * for managing roles. 4351 * 4352 * @see #getSystemService(String) 4353 * @see android.app.role.RoleManager 4354 */ 4355 public static final String ROLE_SERVICE = "role"; 4356 4357 /** 4358 * Official published name of the (internal) role controller service. 4359 * 4360 * @see #getSystemService(String) 4361 * @see android.app.role.RoleControllerService 4362 * 4363 * @hide 4364 */ 4365 public static final String ROLE_CONTROLLER_SERVICE = "role_controller"; 4366 4367 /** 4368 * Use with {@link #getSystemService(String)} to retrieve a 4369 * {@link android.hardware.camera2.CameraManager} for interacting with 4370 * camera devices. 4371 * 4372 * @see #getSystemService(String) 4373 * @see android.hardware.camera2.CameraManager 4374 */ 4375 public static final String CAMERA_SERVICE = "camera"; 4376 4377 /** 4378 * {@link android.print.PrintManager} for printing and managing 4379 * printers and print tasks. 4380 * 4381 * @see #getSystemService(String) 4382 * @see android.print.PrintManager 4383 */ 4384 public static final String PRINT_SERVICE = "print"; 4385 4386 /** 4387 * Use with {@link #getSystemService(String)} to retrieve a 4388 * {@link android.companion.CompanionDeviceManager} for managing companion devices 4389 * 4390 * @see #getSystemService(String) 4391 * @see android.companion.CompanionDeviceManager 4392 */ 4393 public static final String COMPANION_DEVICE_SERVICE = "companiondevice"; 4394 4395 /** 4396 * Use with {@link #getSystemService(String)} to retrieve a 4397 * {@link android.hardware.ConsumerIrManager} for transmitting infrared 4398 * signals from the device. 4399 * 4400 * @see #getSystemService(String) 4401 * @see android.hardware.ConsumerIrManager 4402 */ 4403 public static final String CONSUMER_IR_SERVICE = "consumer_ir"; 4404 4405 /** 4406 * {@link android.app.trust.TrustManager} for managing trust agents. 4407 * @see #getSystemService(String) 4408 * @see android.app.trust.TrustManager 4409 * @hide 4410 */ 4411 public static final String TRUST_SERVICE = "trust"; 4412 4413 /** 4414 * Use with {@link #getSystemService(String)} to retrieve a 4415 * {@link android.media.tv.TvInputManager} for interacting with TV inputs 4416 * on the device. 4417 * 4418 * @see #getSystemService(String) 4419 * @see android.media.tv.TvInputManager 4420 */ 4421 public static final String TV_INPUT_SERVICE = "tv_input"; 4422 4423 /** 4424 * {@link android.net.NetworkScoreManager} for managing network scoring. 4425 * @see #getSystemService(String) 4426 * @see android.net.NetworkScoreManager 4427 * @hide 4428 */ 4429 @SystemApi 4430 public static final String NETWORK_SCORE_SERVICE = "network_score"; 4431 4432 /** 4433 * Use with {@link #getSystemService(String)} to retrieve a {@link 4434 * android.app.usage.UsageStatsManager} for querying device usage stats. 4435 * 4436 * @see #getSystemService(String) 4437 * @see android.app.usage.UsageStatsManager 4438 */ 4439 public static final String USAGE_STATS_SERVICE = "usagestats"; 4440 4441 /** 4442 * Use with {@link #getSystemService(String)} to retrieve a {@link 4443 * android.app.job.JobScheduler} instance for managing occasional 4444 * background tasks. 4445 * @see #getSystemService(String) 4446 * @see android.app.job.JobScheduler 4447 */ 4448 public static final String JOB_SCHEDULER_SERVICE = "jobscheduler"; 4449 4450 /** 4451 * Use with {@link #getSystemService(String)} to retrieve a {@link 4452 * android.service.persistentdata.PersistentDataBlockManager} instance 4453 * for interacting with a storage device that lives across factory resets. 4454 * 4455 * @see #getSystemService(String) 4456 * @see android.service.persistentdata.PersistentDataBlockManager 4457 * @hide 4458 */ 4459 @SystemApi 4460 public static final String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block"; 4461 4462 /** 4463 * Use with {@link #getSystemService(String)} to retrieve a {@link 4464 * android.service.oemlock.OemLockManager} instance for managing the OEM lock. 4465 * 4466 * @see #getSystemService(String) 4467 * @see android.service.oemlock.OemLockManager 4468 * @hide 4469 */ 4470 @SystemApi 4471 public static final String OEM_LOCK_SERVICE = "oem_lock"; 4472 4473 /** 4474 * Use with {@link #getSystemService(String)} to retrieve a {@link 4475 * android.media.projection.MediaProjectionManager} instance for managing 4476 * media projection sessions. 4477 * @see #getSystemService(String) 4478 * @see android.media.projection.MediaProjectionManager 4479 */ 4480 public static final String MEDIA_PROJECTION_SERVICE = "media_projection"; 4481 4482 /** 4483 * Use with {@link #getSystemService(String)} to retrieve a 4484 * {@link android.media.midi.MidiManager} for accessing the MIDI service. 4485 * 4486 * @see #getSystemService(String) 4487 */ 4488 public static final String MIDI_SERVICE = "midi"; 4489 4490 4491 /** 4492 * Use with {@link #getSystemService(String)} to retrieve a 4493 * {@link android.hardware.radio.RadioManager} for accessing the broadcast radio service. 4494 * 4495 * @see #getSystemService(String) 4496 * @hide 4497 */ 4498 public static final String RADIO_SERVICE = "broadcastradio"; 4499 4500 /** 4501 * Use with {@link #getSystemService(String)} to retrieve a 4502 * {@link android.os.HardwarePropertiesManager} for accessing the hardware properties service. 4503 * 4504 * @see #getSystemService(String) 4505 */ 4506 public static final String HARDWARE_PROPERTIES_SERVICE = "hardware_properties"; 4507 4508 /** 4509 * Use with {@link #getSystemService(String)} to retrieve a 4510 * {@link android.os.ThermalService} for accessing the thermal service. 4511 * 4512 * @see #getSystemService(String) 4513 * @hide 4514 */ 4515 public static final String THERMAL_SERVICE = "thermalservice"; 4516 4517 /** 4518 * Use with {@link #getSystemService(String)} to retrieve a 4519 * {@link android.content.pm.ShortcutManager} for accessing the launcher shortcut service. 4520 * 4521 * @see #getSystemService(String) 4522 * @see android.content.pm.ShortcutManager 4523 */ 4524 public static final String SHORTCUT_SERVICE = "shortcut"; 4525 4526 /** 4527 * Use with {@link #getSystemService(String)} to retrieve a {@link 4528 * android.hardware.location.ContextHubManager} for accessing context hubs. 4529 * 4530 * @see #getSystemService(String) 4531 * @see android.hardware.location.ContextHubManager 4532 * 4533 * @hide 4534 */ 4535 @SystemApi 4536 public static final String CONTEXTHUB_SERVICE = "contexthub"; 4537 4538 /** 4539 * Use with {@link #getSystemService(String)} to retrieve a 4540 * {@link android.os.health.SystemHealthManager} for accessing system health (battery, power, 4541 * memory, etc) metrics. 4542 * 4543 * @see #getSystemService(String) 4544 */ 4545 public static final String SYSTEM_HEALTH_SERVICE = "systemhealth"; 4546 4547 /** 4548 * Gatekeeper Service. 4549 * @hide 4550 */ 4551 public static final String GATEKEEPER_SERVICE = "android.service.gatekeeper.IGateKeeperService"; 4552 4553 /** 4554 * Service defining the policy for access to device identifiers. 4555 * @hide 4556 */ 4557 public static final String DEVICE_IDENTIFIERS_SERVICE = "device_identifiers"; 4558 4559 /** 4560 * Service to report a system health "incident" 4561 * @hide 4562 */ 4563 public static final String INCIDENT_SERVICE = "incident"; 4564 4565 /** 4566 * Service to assist incidentd and dumpstated in reporting status to the user 4567 * and in confirming authorization to take an incident report or bugreport 4568 * @hide 4569 */ 4570 public static final String INCIDENT_COMPANION_SERVICE = "incidentcompanion"; 4571 4572 /** 4573 * Service to assist statsd in obtaining general stats. 4574 * @hide 4575 */ 4576 public static final String STATS_COMPANION_SERVICE = "statscompanion"; 4577 4578 /** 4579 * Use with {@link #getSystemService(String)} to retrieve an {@link android.app.StatsManager}. 4580 * @hide 4581 */ 4582 @SystemApi 4583 public static final String STATS_MANAGER = "stats"; 4584 4585 /** 4586 * Service to capture a bugreport. 4587 * @see #getSystemService(String) 4588 * @see android.os.BugreportManager 4589 * @hide 4590 */ 4591 @SystemApi @TestApi 4592 public static final String BUGREPORT_SERVICE = "bugreport"; 4593 4594 /** 4595 * Use with {@link #getSystemService(String)} to retrieve a {@link 4596 * android.content.om.OverlayManager} for managing overlay packages. 4597 * 4598 * @see #getSystemService(String) 4599 * @see android.content.om.OverlayManager 4600 * @hide 4601 */ 4602 public static final String OVERLAY_SERVICE = "overlay"; 4603 4604 /** 4605 * Use with {@link #getSystemService(String)} to retrieve a 4606 * {android.os.IIdmap2} for managing idmap files (used by overlay 4607 * packages). 4608 * 4609 * @see #getSystemService(String) 4610 * @hide 4611 */ 4612 public static final String IDMAP_SERVICE = "idmap"; 4613 4614 /** 4615 * Use with {@link #getSystemService(String)} to retrieve a 4616 * {@link VrManager} for accessing the VR service. 4617 * 4618 * @see #getSystemService(String) 4619 * @hide 4620 */ 4621 @SystemApi 4622 public static final String VR_SERVICE = "vrmanager"; 4623 4624 /** 4625 * Use with {@link #getSystemService(String)} to retrieve an 4626 * {@link android.app.timezone.ITimeZoneRulesManager}. 4627 * @hide 4628 * 4629 * @see #getSystemService(String) 4630 */ 4631 public static final String TIME_ZONE_RULES_MANAGER_SERVICE = "timezone"; 4632 4633 /** 4634 * Use with {@link #getSystemService(String)} to retrieve a 4635 * {@link android.content.pm.CrossProfileApps} for cross profile operations. 4636 * 4637 * @see #getSystemService(String) 4638 */ 4639 public static final String CROSS_PROFILE_APPS_SERVICE = "crossprofileapps"; 4640 4641 /** 4642 * Use with {@link #getSystemService} to retrieve a 4643 * {@link android.se.omapi.ISecureElementService} 4644 * for accessing the SecureElementService. 4645 * 4646 * @hide 4647 */ 4648 @SystemApi 4649 public static final String SECURE_ELEMENT_SERVICE = "secure_element"; 4650 4651 /** 4652 * Use with {@link #getSystemService(String)} to retrieve an 4653 * {@link android.app.timedetector.ITimeDetectorService}. 4654 * @hide 4655 * 4656 * @see #getSystemService(String) 4657 */ 4658 public static final String TIME_DETECTOR_SERVICE = "time_detector"; 4659 4660 /** 4661 * Binder service name for {@link AppBindingService}. 4662 * @hide 4663 */ 4664 public static final String APP_BINDING_SERVICE = "app_binding"; 4665 4666 /** 4667 * Use with {@link #getSystemService(String)} to retrieve an 4668 * {@link android.telephony.ims.RcsManager}. 4669 * @hide 4670 */ 4671 public static final String TELEPHONY_RCS_SERVICE = "ircs"; 4672 4673 /** 4674 * Use with {@link #getSystemService(String)} to retrieve an 4675 * {@link android.os.image.DynamicSystemManager}. 4676 * @hide 4677 */ 4678 public static final String DYNAMIC_SYSTEM_SERVICE = "dynamic_system"; 4679 4680 /** 4681 * Determine whether the given permission is allowed for a particular 4682 * process and user ID running in the system. 4683 * 4684 * @param permission The name of the permission being checked. 4685 * @param pid The process ID being checked against. Must be > 0. 4686 * @param uid The user ID being checked against. A uid of 0 is the root 4687 * user, which will pass every permission check. 4688 * 4689 * @return {@link PackageManager#PERMISSION_GRANTED} if the given 4690 * pid/uid is allowed that permission, or 4691 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4692 * 4693 * @see PackageManager#checkPermission(String, String) 4694 * @see #checkCallingPermission 4695 */ 4696 @CheckResult(suggest="#enforcePermission(String,int,int,String)") 4697 @PackageManager.PermissionResult 4698 public abstract int checkPermission(@NonNull String permission, int pid, int uid); 4699 4700 /** @hide */ 4701 @PackageManager.PermissionResult 4702 @UnsupportedAppUsage 4703 public abstract int checkPermission(@NonNull String permission, int pid, int uid, 4704 IBinder callerToken); 4705 4706 /** 4707 * Determine whether the calling process of an IPC you are handling has been 4708 * granted a particular permission. This is basically the same as calling 4709 * {@link #checkPermission(String, int, int)} with the pid and uid returned 4710 * by {@link android.os.Binder#getCallingPid} and 4711 * {@link android.os.Binder#getCallingUid}. One important difference 4712 * is that if you are not currently processing an IPC, this function 4713 * will always fail. This is done to protect against accidentally 4714 * leaking permissions; you can use {@link #checkCallingOrSelfPermission} 4715 * to avoid this protection. 4716 * 4717 * @param permission The name of the permission being checked. 4718 * 4719 * @return {@link PackageManager#PERMISSION_GRANTED} if the calling 4720 * pid/uid is allowed that permission, or 4721 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4722 * 4723 * @see PackageManager#checkPermission(String, String) 4724 * @see #checkPermission 4725 * @see #checkCallingOrSelfPermission 4726 */ 4727 @CheckResult(suggest="#enforceCallingPermission(String,String)") 4728 @PackageManager.PermissionResult 4729 public abstract int checkCallingPermission(@NonNull String permission); 4730 4731 /** 4732 * Determine whether the calling process of an IPC <em>or you</em> have been 4733 * granted a particular permission. This is the same as 4734 * {@link #checkCallingPermission}, except it grants your own permissions 4735 * if you are not currently processing an IPC. Use with care! 4736 * 4737 * @param permission The name of the permission being checked. 4738 * 4739 * @return {@link PackageManager#PERMISSION_GRANTED} if the calling 4740 * pid/uid is allowed that permission, or 4741 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4742 * 4743 * @see PackageManager#checkPermission(String, String) 4744 * @see #checkPermission 4745 * @see #checkCallingPermission 4746 */ 4747 @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") 4748 @PackageManager.PermissionResult 4749 public abstract int checkCallingOrSelfPermission(@NonNull String permission); 4750 4751 /** 4752 * Determine whether <em>you</em> have been granted a particular permission. 4753 * 4754 * @param permission The name of the permission being checked. 4755 * 4756 * @return {@link PackageManager#PERMISSION_GRANTED} if you have the 4757 * permission, or {@link PackageManager#PERMISSION_DENIED} if not. 4758 * 4759 * @see PackageManager#checkPermission(String, String) 4760 * @see #checkCallingPermission(String) 4761 */ 4762 @PackageManager.PermissionResult 4763 public abstract int checkSelfPermission(@NonNull String permission); 4764 4765 /** 4766 * If the given permission is not allowed for a particular process 4767 * and user ID running in the system, throw a {@link SecurityException}. 4768 * 4769 * @param permission The name of the permission being checked. 4770 * @param pid The process ID being checked against. Must be > 0. 4771 * @param uid The user ID being checked against. A uid of 0 is the root 4772 * user, which will pass every permission check. 4773 * @param message A message to include in the exception if it is thrown. 4774 * 4775 * @see #checkPermission(String, int, int) 4776 */ 4777 public abstract void enforcePermission( 4778 @NonNull String permission, int pid, int uid, @Nullable String message); 4779 4780 /** 4781 * If the calling process of an IPC you are handling has not been 4782 * granted a particular permission, throw a {@link 4783 * SecurityException}. This is basically the same as calling 4784 * {@link #enforcePermission(String, int, int, String)} with the 4785 * pid and uid returned by {@link android.os.Binder#getCallingPid} 4786 * and {@link android.os.Binder#getCallingUid}. One important 4787 * difference is that if you are not currently processing an IPC, 4788 * this function will always throw the SecurityException. This is 4789 * done to protect against accidentally leaking permissions; you 4790 * can use {@link #enforceCallingOrSelfPermission} to avoid this 4791 * protection. 4792 * 4793 * @param permission The name of the permission being checked. 4794 * @param message A message to include in the exception if it is thrown. 4795 * 4796 * @see #checkCallingPermission(String) 4797 */ 4798 public abstract void enforceCallingPermission( 4799 @NonNull String permission, @Nullable String message); 4800 4801 /** 4802 * If neither you nor the calling process of an IPC you are 4803 * handling has been granted a particular permission, throw a 4804 * {@link SecurityException}. This is the same as {@link 4805 * #enforceCallingPermission}, except it grants your own 4806 * permissions if you are not currently processing an IPC. Use 4807 * with care! 4808 * 4809 * @param permission The name of the permission being checked. 4810 * @param message A message to include in the exception if it is thrown. 4811 * 4812 * @see #checkCallingOrSelfPermission(String) 4813 */ 4814 public abstract void enforceCallingOrSelfPermission( 4815 @NonNull String permission, @Nullable String message); 4816 4817 /** 4818 * Grant permission to access a specific Uri to another package, regardless 4819 * of whether that package has general permission to access the Uri's 4820 * content provider. This can be used to grant specific, temporary 4821 * permissions, typically in response to user interaction (such as the 4822 * user opening an attachment that you would like someone else to 4823 * display). 4824 * 4825 * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION 4826 * Intent.FLAG_GRANT_READ_URI_PERMISSION} or 4827 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION 4828 * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to 4829 * start an activity instead of this function directly. If you use this 4830 * function directly, you should be sure to call 4831 * {@link #revokeUriPermission} when the target should no longer be allowed 4832 * to access it. 4833 * 4834 * <p>To succeed, the content provider owning the Uri must have set the 4835 * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions 4836 * grantUriPermissions} attribute in its manifest or included the 4837 * {@link android.R.styleable#AndroidManifestGrantUriPermission 4838 * <grant-uri-permissions>} tag. 4839 * 4840 * @param toPackage The package you would like to allow to access the Uri. 4841 * @param uri The Uri you would like to grant access to. 4842 * @param modeFlags The desired access modes. 4843 * 4844 * @see #revokeUriPermission 4845 */ 4846 public abstract void grantUriPermission(String toPackage, Uri uri, 4847 @Intent.GrantUriMode int modeFlags); 4848 4849 /** 4850 * Remove all permissions to access a particular content provider Uri 4851 * that were previously added with {@link #grantUriPermission} or <em>any other</em> mechanism. 4852 * The given Uri will match all previously granted Uris that are the same or a 4853 * sub-path of the given Uri. That is, revoking "content://foo/target" will 4854 * revoke both "content://foo/target" and "content://foo/target/sub", but not 4855 * "content://foo". It will not remove any prefix grants that exist at a 4856 * higher level. 4857 * 4858 * <p>Prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, if you did not have 4859 * regular permission access to a Uri, but had received access to it through 4860 * a specific Uri permission grant, you could not revoke that grant with this 4861 * function and a {@link SecurityException} would be thrown. As of 4862 * {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this function will not throw a security 4863 * exception, but will remove whatever permission grants to the Uri had been given to the app 4864 * (or none).</p> 4865 * 4866 * <p>Unlike {@link #revokeUriPermission(String, Uri, int)}, this method impacts all permission 4867 * grants matching the given Uri, for any package they had been granted to, through any 4868 * mechanism this had happened (such as indirectly through the clipboard, activity launch, 4869 * service start, etc). That means this can be potentially dangerous to use, as it can 4870 * revoke grants that another app could be strongly expecting to stick around.</p> 4871 * 4872 * @param uri The Uri you would like to revoke access to. 4873 * @param modeFlags The access modes to revoke. 4874 * 4875 * @see #grantUriPermission 4876 */ 4877 public abstract void revokeUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags); 4878 4879 /** 4880 * Remove permissions to access a particular content provider Uri 4881 * that were previously added with {@link #grantUriPermission} for a specific target 4882 * package. The given Uri will match all previously granted Uris that are the same or a 4883 * sub-path of the given Uri. That is, revoking "content://foo/target" will 4884 * revoke both "content://foo/target" and "content://foo/target/sub", but not 4885 * "content://foo". It will not remove any prefix grants that exist at a 4886 * higher level. 4887 * 4888 * <p>Unlike {@link #revokeUriPermission(Uri, int)}, this method will <em>only</em> 4889 * revoke permissions that had been explicitly granted through {@link #grantUriPermission} 4890 * and only for the package specified. Any matching grants that have happened through 4891 * other mechanisms (clipboard, activity launching, service starting, etc) will not be 4892 * removed.</p> 4893 * 4894 * @param toPackage The package you had previously granted access to. 4895 * @param uri The Uri you would like to revoke access to. 4896 * @param modeFlags The access modes to revoke. 4897 * 4898 * @see #grantUriPermission 4899 */ 4900 public abstract void revokeUriPermission(String toPackage, Uri uri, 4901 @Intent.AccessUriMode int modeFlags); 4902 4903 /** 4904 * Determine whether a particular process and user ID has been granted 4905 * permission to access a specific URI. This only checks for permissions 4906 * that have been explicitly granted -- if the given process/uid has 4907 * more general access to the URI's content provider then this check will 4908 * always fail. 4909 * 4910 * @param uri The uri that is being checked. 4911 * @param pid The process ID being checked against. Must be > 0. 4912 * @param uid The user ID being checked against. A uid of 0 is the root 4913 * user, which will pass every permission check. 4914 * @param modeFlags The access modes to check. 4915 * 4916 * @return {@link PackageManager#PERMISSION_GRANTED} if the given 4917 * pid/uid is allowed to access that uri, or 4918 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4919 * 4920 * @see #checkCallingUriPermission 4921 */ 4922 @CheckResult(suggest="#enforceUriPermission(Uri,int,int,String)") 4923 @PackageManager.PermissionResult 4924 public abstract int checkUriPermission(Uri uri, int pid, int uid, 4925 @Intent.AccessUriMode int modeFlags); 4926 4927 /** @hide */ 4928 @PackageManager.PermissionResult 4929 public abstract int checkUriPermission(Uri uri, int pid, int uid, 4930 @Intent.AccessUriMode int modeFlags, IBinder callerToken); 4931 4932 /** 4933 * Determine whether the calling process and user ID has been 4934 * granted permission to access a specific URI. This is basically 4935 * the same as calling {@link #checkUriPermission(Uri, int, int, 4936 * int)} with the pid and uid returned by {@link 4937 * android.os.Binder#getCallingPid} and {@link 4938 * android.os.Binder#getCallingUid}. One important difference is 4939 * that if you are not currently processing an IPC, this function 4940 * will always fail. 4941 * 4942 * @param uri The uri that is being checked. 4943 * @param modeFlags The access modes to check. 4944 * 4945 * @return {@link PackageManager#PERMISSION_GRANTED} if the caller 4946 * is allowed to access that uri, or 4947 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4948 * 4949 * @see #checkUriPermission(Uri, int, int, int) 4950 */ 4951 @CheckResult(suggest="#enforceCallingUriPermission(Uri,int,String)") 4952 @PackageManager.PermissionResult 4953 public abstract int checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags); 4954 4955 /** 4956 * Determine whether the calling process of an IPC <em>or you</em> has been granted 4957 * permission to access a specific URI. This is the same as 4958 * {@link #checkCallingUriPermission}, except it grants your own permissions 4959 * if you are not currently processing an IPC. Use with care! 4960 * 4961 * @param uri The uri that is being checked. 4962 * @param modeFlags The access modes to check. 4963 * 4964 * @return {@link PackageManager#PERMISSION_GRANTED} if the caller 4965 * is allowed to access that uri, or 4966 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4967 * 4968 * @see #checkCallingUriPermission 4969 */ 4970 @CheckResult(suggest="#enforceCallingOrSelfUriPermission(Uri,int,String)") 4971 @PackageManager.PermissionResult 4972 public abstract int checkCallingOrSelfUriPermission(Uri uri, 4973 @Intent.AccessUriMode int modeFlags); 4974 4975 /** 4976 * Check both a Uri and normal permission. This allows you to perform 4977 * both {@link #checkPermission} and {@link #checkUriPermission} in one 4978 * call. 4979 * 4980 * @param uri The Uri whose permission is to be checked, or null to not 4981 * do this check. 4982 * @param readPermission The permission that provides overall read access, 4983 * or null to not do this check. 4984 * @param writePermission The permission that provides overall write 4985 * access, or null to not do this check. 4986 * @param pid The process ID being checked against. Must be > 0. 4987 * @param uid The user ID being checked against. A uid of 0 is the root 4988 * user, which will pass every permission check. 4989 * @param modeFlags The access modes to check. 4990 * 4991 * @return {@link PackageManager#PERMISSION_GRANTED} if the caller 4992 * is allowed to access that uri or holds one of the given permissions, or 4993 * {@link PackageManager#PERMISSION_DENIED} if it is not. 4994 */ 4995 @CheckResult(suggest="#enforceUriPermission(Uri,String,String,int,int,int,String)") 4996 @PackageManager.PermissionResult 4997 public abstract int checkUriPermission(@Nullable Uri uri, @Nullable String readPermission, 4998 @Nullable String writePermission, int pid, int uid, 4999 @Intent.AccessUriMode int modeFlags); 5000 5001 /** 5002 * If a particular process and user ID has not been granted 5003 * permission to access a specific URI, throw {@link 5004 * SecurityException}. This only checks for permissions that have 5005 * been explicitly granted -- if the given process/uid has more 5006 * general access to the URI's content provider then this check 5007 * will always fail. 5008 * 5009 * @param uri The uri that is being checked. 5010 * @param pid The process ID being checked against. Must be > 0. 5011 * @param uid The user ID being checked against. A uid of 0 is the root 5012 * user, which will pass every permission check. 5013 * @param modeFlags The access modes to enforce. 5014 * @param message A message to include in the exception if it is thrown. 5015 * 5016 * @see #checkUriPermission(Uri, int, int, int) 5017 */ 5018 public abstract void enforceUriPermission( 5019 Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message); 5020 5021 /** 5022 * If the calling process and user ID has not been granted 5023 * permission to access a specific URI, throw {@link 5024 * SecurityException}. This is basically the same as calling 5025 * {@link #enforceUriPermission(Uri, int, int, int, String)} with 5026 * the pid and uid returned by {@link 5027 * android.os.Binder#getCallingPid} and {@link 5028 * android.os.Binder#getCallingUid}. One important difference is 5029 * that if you are not currently processing an IPC, this function 5030 * will always throw a SecurityException. 5031 * 5032 * @param uri The uri that is being checked. 5033 * @param modeFlags The access modes to enforce. 5034 * @param message A message to include in the exception if it is thrown. 5035 * 5036 * @see #checkCallingUriPermission(Uri, int) 5037 */ 5038 public abstract void enforceCallingUriPermission( 5039 Uri uri, @Intent.AccessUriMode int modeFlags, String message); 5040 5041 /** 5042 * If the calling process of an IPC <em>or you</em> has not been 5043 * granted permission to access a specific URI, throw {@link 5044 * SecurityException}. This is the same as {@link 5045 * #enforceCallingUriPermission}, except it grants your own 5046 * permissions if you are not currently processing an IPC. Use 5047 * with care! 5048 * 5049 * @param uri The uri that is being checked. 5050 * @param modeFlags The access modes to enforce. 5051 * @param message A message to include in the exception if it is thrown. 5052 * 5053 * @see #checkCallingOrSelfUriPermission(Uri, int) 5054 */ 5055 public abstract void enforceCallingOrSelfUriPermission( 5056 Uri uri, @Intent.AccessUriMode int modeFlags, String message); 5057 5058 /** 5059 * Enforce both a Uri and normal permission. This allows you to perform 5060 * both {@link #enforcePermission} and {@link #enforceUriPermission} in one 5061 * call. 5062 * 5063 * @param uri The Uri whose permission is to be checked, or null to not 5064 * do this check. 5065 * @param readPermission The permission that provides overall read access, 5066 * or null to not do this check. 5067 * @param writePermission The permission that provides overall write 5068 * access, or null to not do this check. 5069 * @param pid The process ID being checked against. Must be > 0. 5070 * @param uid The user ID being checked against. A uid of 0 is the root 5071 * user, which will pass every permission check. 5072 * @param modeFlags The access modes to enforce. 5073 * @param message A message to include in the exception if it is thrown. 5074 * 5075 * @see #checkUriPermission(Uri, String, String, int, int, int) 5076 */ 5077 public abstract void enforceUriPermission( 5078 @Nullable Uri uri, @Nullable String readPermission, 5079 @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags, 5080 @Nullable String message); 5081 5082 /** @hide */ 5083 @IntDef(flag = true, prefix = { "CONTEXT_" }, value = { 5084 CONTEXT_INCLUDE_CODE, 5085 CONTEXT_IGNORE_SECURITY, 5086 CONTEXT_RESTRICTED, 5087 CONTEXT_DEVICE_PROTECTED_STORAGE, 5088 CONTEXT_CREDENTIAL_PROTECTED_STORAGE, 5089 CONTEXT_REGISTER_PACKAGE, 5090 }) 5091 @Retention(RetentionPolicy.SOURCE) 5092 public @interface CreatePackageOptions {} 5093 5094 /** 5095 * Flag for use with {@link #createPackageContext}: include the application 5096 * code with the context. This means loading code into the caller's 5097 * process, so that {@link #getClassLoader()} can be used to instantiate 5098 * the application's classes. Setting this flags imposes security 5099 * restrictions on what application context you can access; if the 5100 * requested application can not be safely loaded into your process, 5101 * java.lang.SecurityException will be thrown. If this flag is not set, 5102 * there will be no restrictions on the packages that can be loaded, 5103 * but {@link #getClassLoader} will always return the default system 5104 * class loader. 5105 */ 5106 public static final int CONTEXT_INCLUDE_CODE = 0x00000001; 5107 5108 /** 5109 * Flag for use with {@link #createPackageContext}: ignore any security 5110 * restrictions on the Context being requested, allowing it to always 5111 * be loaded. For use with {@link #CONTEXT_INCLUDE_CODE} to allow code 5112 * to be loaded into a process even when it isn't safe to do so. Use 5113 * with extreme care! 5114 */ 5115 public static final int CONTEXT_IGNORE_SECURITY = 0x00000002; 5116 5117 /** 5118 * Flag for use with {@link #createPackageContext}: a restricted context may 5119 * disable specific features. For instance, a View associated with a restricted 5120 * context would ignore particular XML attributes. 5121 */ 5122 public static final int CONTEXT_RESTRICTED = 0x00000004; 5123 5124 /** 5125 * Flag for use with {@link #createPackageContext}: point all file APIs at 5126 * device-protected storage. 5127 * 5128 * @hide 5129 */ 5130 public static final int CONTEXT_DEVICE_PROTECTED_STORAGE = 0x00000008; 5131 5132 /** 5133 * Flag for use with {@link #createPackageContext}: point all file APIs at 5134 * credential-protected storage. 5135 * 5136 * @hide 5137 */ 5138 public static final int CONTEXT_CREDENTIAL_PROTECTED_STORAGE = 0x00000010; 5139 5140 /** 5141 * @hide Used to indicate we should tell the activity manager about the process 5142 * loading this code. 5143 */ 5144 public static final int CONTEXT_REGISTER_PACKAGE = 0x40000000; 5145 5146 /** 5147 * Return a new Context object for the given application name. This 5148 * Context is the same as what the named application gets when it is 5149 * launched, containing the same resources and class loader. Each call to 5150 * this method returns a new instance of a Context object; Context objects 5151 * are not shared, however they share common state (Resources, ClassLoader, 5152 * etc) so the Context instance itself is fairly lightweight. 5153 * 5154 * <p>Throws {@link android.content.pm.PackageManager.NameNotFoundException} if there is no 5155 * application with the given package name. 5156 * 5157 * <p>Throws {@link java.lang.SecurityException} if the Context requested 5158 * can not be loaded into the caller's process for security reasons (see 5159 * {@link #CONTEXT_INCLUDE_CODE} for more information}. 5160 * 5161 * @param packageName Name of the application's package. 5162 * @param flags Option flags. 5163 * 5164 * @return A {@link Context} for the application. 5165 * 5166 * @throws SecurityException 5167 * @throws PackageManager.NameNotFoundException if there is no application with 5168 * the given package name. 5169 */ 5170 public abstract Context createPackageContext(String packageName, 5171 @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; 5172 5173 /** 5174 * Similar to {@link #createPackageContext(String, int)}, but with a 5175 * different {@link UserHandle}. For example, {@link #getContentResolver()} 5176 * will open any {@link Uri} as the given user. 5177 * 5178 * @hide 5179 */ 5180 @SystemApi 5181 @TestApi 5182 public Context createPackageContextAsUser( 5183 String packageName, @CreatePackageOptions int flags, UserHandle user) 5184 throws PackageManager.NameNotFoundException { 5185 if (Build.IS_ENG) { 5186 throw new IllegalStateException("createPackageContextAsUser not overridden!"); 5187 } 5188 return this; 5189 } 5190 5191 /** 5192 * Creates a context given an {@link android.content.pm.ApplicationInfo}. 5193 * 5194 * @hide 5195 */ 5196 @UnsupportedAppUsage 5197 public abstract Context createApplicationContext(ApplicationInfo application, 5198 @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; 5199 5200 /** 5201 * Return a new Context object for the given split name. The new Context has a ClassLoader and 5202 * Resources object that can access the split's and all of its dependencies' code/resources. 5203 * Each call to this method returns a new instance of a Context object; 5204 * Context objects are not shared, however common state (ClassLoader, other Resources for 5205 * the same split) may be so the Context itself can be fairly lightweight. 5206 * 5207 * @param splitName The name of the split to include, as declared in the split's 5208 * <code>AndroidManifest.xml</code>. 5209 * @return A {@link Context} with the given split's code and/or resources loaded. 5210 */ 5211 public abstract Context createContextForSplit(String splitName) 5212 throws PackageManager.NameNotFoundException; 5213 5214 /** 5215 * Get the user associated with this context 5216 * @hide 5217 */ 5218 @TestApi 5219 public UserHandle getUser() { 5220 return android.os.Process.myUserHandle(); 5221 } 5222 5223 /** 5224 * Get the user associated with this context 5225 * @hide 5226 */ 5227 @TestApi 5228 public @UserIdInt int getUserId() { 5229 return android.os.UserHandle.myUserId(); 5230 } 5231 5232 /** 5233 * Return a new Context object for the current Context but whose resources 5234 * are adjusted to match the given Configuration. Each call to this method 5235 * returns a new instance of a Context object; Context objects are not 5236 * shared, however common state (ClassLoader, other Resources for the 5237 * same configuration) may be so the Context itself can be fairly lightweight. 5238 * 5239 * @param overrideConfiguration A {@link Configuration} specifying what 5240 * values to modify in the base Configuration of the original Context's 5241 * resources. If the base configuration changes (such as due to an 5242 * orientation change), the resources of this context will also change except 5243 * for those that have been explicitly overridden with a value here. 5244 * 5245 * @return A {@link Context} with the given configuration override. 5246 */ 5247 public abstract Context createConfigurationContext( 5248 @NonNull Configuration overrideConfiguration); 5249 5250 /** 5251 * Return a new Context object for the current Context but whose resources 5252 * are adjusted to match the metrics of the given Display. Each call to this method 5253 * returns a new instance of a Context object; Context objects are not 5254 * shared, however common state (ClassLoader, other Resources for the 5255 * same configuration) may be so the Context itself can be fairly lightweight. 5256 * 5257 * The returned display Context provides a {@link WindowManager} 5258 * (see {@link #getSystemService(String)}) that is configured to show windows 5259 * on the given display. The WindowManager's {@link WindowManager#getDefaultDisplay} 5260 * method can be used to retrieve the Display from the returned Context. 5261 * 5262 * @param display A {@link Display} object specifying the display 5263 * for whose metrics the Context's resources should be tailored and upon which 5264 * new windows should be shown. 5265 * 5266 * @return A {@link Context} for the display. 5267 */ 5268 public abstract Context createDisplayContext(@NonNull Display display); 5269 5270 /** 5271 * Return a new Context object for the current Context but whose storage 5272 * APIs are backed by device-protected storage. 5273 * <p> 5274 * On devices with direct boot, data stored in this location is encrypted 5275 * with a key tied to the physical device, and it can be accessed 5276 * immediately after the device has booted successfully, both 5277 * <em>before and after</em> the user has authenticated with their 5278 * credentials (such as a lock pattern or PIN). 5279 * <p> 5280 * Because device-protected data is available without user authentication, 5281 * you should carefully limit the data you store using this Context. For 5282 * example, storing sensitive authentication tokens or passwords in the 5283 * device-protected area is strongly discouraged. 5284 * <p> 5285 * If the underlying device does not have the ability to store 5286 * device-protected and credential-protected data using different keys, then 5287 * both storage areas will become available at the same time. They remain as 5288 * two distinct storage locations on disk, and only the window of 5289 * availability changes. 5290 * <p> 5291 * Each call to this method returns a new instance of a Context object; 5292 * Context objects are not shared, however common state (ClassLoader, other 5293 * Resources for the same configuration) may be so the Context itself can be 5294 * fairly lightweight. 5295 * 5296 * @see #isDeviceProtectedStorage() 5297 */ 5298 public abstract Context createDeviceProtectedStorageContext(); 5299 5300 /** 5301 * Return a new Context object for the current Context but whose storage 5302 * APIs are backed by credential-protected storage. This is the default 5303 * storage area for apps unless 5304 * {@link android.R.attr#defaultToDeviceProtectedStorage} was requested. 5305 * <p> 5306 * On devices with direct boot, data stored in this location is encrypted 5307 * with a key tied to user credentials, which can be accessed 5308 * <em>only after</em> the user has entered their credentials (such as a 5309 * lock pattern or PIN). 5310 * <p> 5311 * If the underlying device does not have the ability to store 5312 * device-protected and credential-protected data using different keys, then 5313 * both storage areas will become available at the same time. They remain as 5314 * two distinct storage locations on disk, and only the window of 5315 * availability changes. 5316 * <p> 5317 * Each call to this method returns a new instance of a Context object; 5318 * Context objects are not shared, however common state (ClassLoader, other 5319 * Resources for the same configuration) may be so the Context itself can be 5320 * fairly lightweight. 5321 * 5322 * @see #isCredentialProtectedStorage() 5323 * @hide 5324 */ 5325 @SystemApi 5326 public abstract Context createCredentialProtectedStorageContext(); 5327 5328 /** 5329 * Gets the display adjustments holder for this context. This information 5330 * is provided on a per-application or activity basis and is used to simulate lower density 5331 * display metrics for legacy applications and restricted screen sizes. 5332 * 5333 * @param displayId The display id for which to get compatibility info. 5334 * @return The compatibility info holder, or null if not required by the application. 5335 * @hide 5336 */ 5337 public abstract DisplayAdjustments getDisplayAdjustments(int displayId); 5338 5339 /** 5340 * @return Returns the {@link Display} object this context is associated with. 5341 * @hide 5342 */ 5343 @TestApi 5344 public abstract Display getDisplay(); 5345 5346 /** 5347 * Gets the display ID. 5348 * 5349 * @return display ID associated with this {@link Context}. 5350 * @hide 5351 */ 5352 @TestApi 5353 public abstract int getDisplayId(); 5354 5355 /** 5356 * @hide 5357 */ 5358 public abstract void updateDisplay(int displayId); 5359 5360 /** 5361 * Indicates whether this Context is restricted. 5362 * 5363 * @return {@code true} if this Context is restricted, {@code false} otherwise. 5364 * 5365 * @see #CONTEXT_RESTRICTED 5366 */ 5367 public boolean isRestricted() { 5368 return false; 5369 } 5370 5371 /** 5372 * Indicates if the storage APIs of this Context are backed by 5373 * device-protected storage. 5374 * 5375 * @see #createDeviceProtectedStorageContext() 5376 */ 5377 public abstract boolean isDeviceProtectedStorage(); 5378 5379 /** 5380 * Indicates if the storage APIs of this Context are backed by 5381 * credential-protected storage. 5382 * 5383 * @see #createCredentialProtectedStorageContext() 5384 * @hide 5385 */ 5386 @SystemApi 5387 public abstract boolean isCredentialProtectedStorage(); 5388 5389 /** 5390 * Returns true if the context can load unsafe resources, e.g. fonts. 5391 * @hide 5392 */ 5393 public abstract boolean canLoadUnsafeResources(); 5394 5395 /** 5396 * @hide 5397 */ 5398 public IBinder getActivityToken() { 5399 throw new RuntimeException("Not implemented. Must override in a subclass."); 5400 } 5401 5402 /** 5403 * @hide 5404 */ 5405 @Nullable 5406 public IServiceConnection getServiceDispatcher(ServiceConnection conn, Handler handler, 5407 int flags) { 5408 throw new RuntimeException("Not implemented. Must override in a subclass."); 5409 } 5410 5411 /** 5412 * @hide 5413 */ 5414 public IApplicationThread getIApplicationThread() { 5415 throw new RuntimeException("Not implemented. Must override in a subclass."); 5416 } 5417 5418 /** 5419 * @hide 5420 */ 5421 public Handler getMainThreadHandler() { 5422 throw new RuntimeException("Not implemented. Must override in a subclass."); 5423 } 5424 5425 /** 5426 * @hide 5427 */ 5428 public AutofillClient getAutofillClient() { 5429 return null; 5430 } 5431 5432 /** 5433 * @hide 5434 */ 5435 public void setAutofillClient(@SuppressWarnings("unused") AutofillClient client) { 5436 } 5437 5438 /** 5439 * @hide 5440 */ 5441 @Nullable 5442 public ContentCaptureClient getContentCaptureClient() { 5443 return null; 5444 } 5445 5446 /** 5447 * @hide 5448 */ 5449 public final boolean isAutofillCompatibilityEnabled() { 5450 final AutofillOptions options = getAutofillOptions(); 5451 return options != null && options.compatModeEnabled; 5452 } 5453 5454 /** 5455 * @hide 5456 */ 5457 @Nullable 5458 public AutofillOptions getAutofillOptions() { 5459 return null; 5460 } 5461 5462 /** 5463 * @hide 5464 */ 5465 @TestApi 5466 public void setAutofillOptions(@SuppressWarnings("unused") @Nullable AutofillOptions options) { 5467 } 5468 5469 /** 5470 * Gets the Content Capture options for this context, or {@code null} if it's not whitelisted. 5471 * 5472 * @hide 5473 */ 5474 @Nullable 5475 public ContentCaptureOptions getContentCaptureOptions() { 5476 return null; 5477 } 5478 5479 /** 5480 * @hide 5481 */ 5482 @TestApi 5483 public void setContentCaptureOptions( 5484 @SuppressWarnings("unused") @Nullable ContentCaptureOptions options) { 5485 } 5486 5487 /** 5488 * Throws an exception if the Context is using system resources, 5489 * which are non-runtime-overlay-themable and may show inconsistent UI. 5490 * @hide 5491 */ 5492 public void assertRuntimeOverlayThemable() { 5493 // Resources.getSystem() is a singleton and the only Resources not managed by 5494 // ResourcesManager; therefore Resources.getSystem() is not themable. 5495 if (getResources() == Resources.getSystem()) { 5496 throw new IllegalArgumentException("Non-UI context used to display UI; " 5497 + "get a UI context from ActivityThread#getSystemUiContext()"); 5498 } 5499 } 5500 } 5501