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