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