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