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