Context.java revision 75279904202357565cf5a1cb11148d01f42b4569
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
195c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackbornimport android.content.pm.ApplicationInfo;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetManager;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray;
2474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Noriimport android.database.DatabaseErrorHandler;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase.CursorFactory;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
29ac695c608ba620e2362f57126d7be453cf5b7e1bAdam Powellimport android.media.MediaScannerConnection.OnScanCompletedListener;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface to global information about an application environment.  This is
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an abstract class whose implementation is provided by
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Android system.  It
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allows access to application-specific resources and classes, as well as
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * up-calls for application-level operations such as launching activities,
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcasting and receiving intents, etc.
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Context {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: the default mode, where the created file can only
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be accessed by the calling application (or all applications sharing the
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * same user ID).
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_PRIVATE = 0x0000;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have read access
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_READABLE = 0x0001;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have write access
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_WRITEABLE = 0x0002;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: for use with {@link #openFileOutput}, if the file
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * already exists then write data to the end of the existing file
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instead of erasing it.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_APPEND = 0x8000;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
834e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * SharedPreference loading flag: when set, the file on disk will
844e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * be checked for modification even if the shared preferences
854e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * instance is already loaded in this process.  This behavior is
864e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * sometimes desired in cases where the application has multiple
874e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, all writing to the same SharedPreferences file.
884e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * Generally there are better forms of communication between
894e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, though.
904e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
914e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * <p>This was the legacy (but undocumented) behavior in and
924e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * before Gingerbread (Android 2.3) and this flag is implied when
934e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * targetting such releases.  For applications targetting SDK
944e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * versions <em>greater than</em> Android 2.3, this flag must be
954e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * explicitly set if desired.
964e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
974e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #getSharedPreferences
984e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     */
994e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    public static final int MODE_MULTI_PROCESS = 0x0004;
1004e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick
1014e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    /**
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: automatically create the service as long
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as the binding exists.  Note that while this will create the service,
1044b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * its {@link android.app.Service#onStartCommand}
1054b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * method will still only be called due to an
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * explicit call to {@link #startService}.  Even without that, though,
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this still provides you with access to the service object while the
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service is created.
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Specifying this flag also tells the system to treat the service
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as being as important as your own process -- that is, when deciding
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which process should be killed to free memory, the service will only
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be considered a candidate as long as the processes of any such bindings
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is also a candidate to be killed.  This is to avoid situations where
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the service is being continually created and killed due to low memory.
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_AUTO_CREATE = 0x0001;
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: include debugging help for mismatched
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls to unbind.  When this flag is set, the callstack of the following
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #unbindService} call is retained, to be printed if a later
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * incorrect unbind call is made.  Note that doing this requires retaining
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information about the binding that was made for the lifetime of the app,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resulting in a leak -- this should only be used for debugging.
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_DEBUG_UNBIND = 0x0002;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12909c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    /**
13009c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * Flag for {@link #bindService}: don't allow this binding to raise
13109c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * the target service's process to the foreground scheduling priority.
13209c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * It will still be raised to the at least the same memory priority
13309c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * as the client (so that its process will not be killable in any
13409c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * situation where the client is not killable), but for CPU scheduling
13509c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * purposes it may be left in the background.  This only has an impact
13609c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * in the situation where the binding client is a foreground process
13709c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * and the target service is in a background process.
13809c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     */
13909c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    public static final int BIND_NOT_FOREGROUND = 0x0004;
14009c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return an AssetManager instance for your application's package. */
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract AssetManager getAssets();
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a Resources instance for your application's package. */
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources getResources();
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return PackageManager instance to find global package information. */
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract PackageManager getPackageManager();
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a ContentResolver instance for your application's package. */
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ContentResolver getContentResolver();
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Looper for the main thread of the current process.  This is
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the thread used to dispatch calls to application components (activities,
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * services, etc).
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Looper getMainLooper();
1594b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the context of the single, global Application object of the
162e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * current process.  This generally should only be used if you need a
163e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Context whose lifecycle is separate from the current context, that is
164e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * tied to the lifetime of the process rather than the current component.
1654b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
166e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Consider for example how this interacts with
16736af79434fb62c26238132eaeda2ec5e732f3c2fBrad Fitzpatrick     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}:
168e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
169e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from an Activity context, the receiver is being registered
170e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * within that activity.  This means that you are expected to unregister
171e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * before the activity is done being destroyed; in fact if you do not do
172e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * so, the framework will clean up your leaked registration as it removes
173e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the activity and log an error.  Thus, if you use the Activity context
174e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * to register a receiver that is static (global to the process, not
175e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * associated with an Activity instance) then that registration will be
176e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * removed on you at whatever point the activity you used is destroyed.
177e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from the Context returned here, the receiver is being
178e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * registered with the global state associated with your application.  Thus
179e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * it will never be unregistered for you.  This is necessary if the receiver
180e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * is associated with static data, not a particular component.  However
181e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * using the ApplicationContext elsewhere can easily lead to serious leaks
182e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * if you forget to unregister, unbind, etc.
183e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context getApplicationContext();
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized, styled CharSequence from the application's package's
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the CharSequence text
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final CharSequence getText(int resId) {
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getText(resId);
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized string from the application's package's
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the string
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId) {
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId);
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized formatted string from the application's package's
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table, substituting the format arguments as defined in
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link java.util.Formatter} and {@link java.lang.String#format}.
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the format string
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param formatArgs The format arguments that will be used for substitution.
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId, Object... formatArgs) {
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId, formatArgs);
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the base theme for this context.  Note that this should be called
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * before any views are instantiated in the Context (for example before
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calling {@link android.app.Activity#setContentView} or
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater#inflate}).
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resid The style resource describing the theme.
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setTheme(int resid);
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
230247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    /** @hide Needed for some internal implementation...  not public because
231247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn     * you can't assume this actually means anything. */
232247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    public int getThemeResId() {
233247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn        return 0;
234247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    }
235247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Theme object associated with this Context.
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources.Theme getTheme();
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int[])}
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int[])
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] attrs) {
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(attrs);
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int, int[])
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int resid, int[] attrs) throws Resources.NotFoundException {
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(resid, attrs);
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs) {
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            set, attrs, defStyleAttr, defStyleRes);
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a class loader you can use to retrieve classes in this package.
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ClassLoader getClassLoader();
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return the name of this application's package. */
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageName();
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2985c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    /** Return the full application info for this context's package. */
2995c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    public abstract ApplicationInfo getApplicationInfo();
3004b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3023214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
3033214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains the application's
3043214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary resources.
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the resources.
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageResourcePath();
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3143214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
3153214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains application's
3163214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary code and assets.
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the code and assets.
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageCodePath();
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
32623ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * {@hide}
32723ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * Return the full path to the shared prefs file for the given prefs group name.
32823ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     *
32923ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * <p>Note: this is not generally useful for applications, since they should
33023ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * not be directly accessing the file system.
33123ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     */
33223ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    public abstract File getSharedPrefsFile(String name);
33323ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato
33423ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    /**
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve and hold the contents of the preferences file 'name', returning
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a SharedPreferences through which you can retrieve and modify its
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Only one instance of the SharedPreferences object is returned
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to any callers for the same name, meaning they will see each other's
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * edits as soon as they are made.
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Desired preferences file. If a preferences file by this name
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * does not exist, it will be created when you retrieve an
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE}
3464e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
3474e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
3484e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
3494e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * is always on in apps targetting Gingerbread (Android 2.3) and below, and
3504e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * off by default in later versions.
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the single SharedPreferences instance that can be used
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         to retrieve and modify the preference values.
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
3584e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #MODE_MULTI_PROCESS
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SharedPreferences getSharedPreferences(String name,
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode);
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for reading.
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileInputStream Resulting input stream.
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileInputStream#FileInputStream(String)
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileInputStream openFileInput(String name)
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for writing.  Creates the file if it doesn't already exist.
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_APPEND} to append to an existing file,
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions.
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileOutputStream Resulting output stream.
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_APPEND
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileOutputStream#FileOutputStream(String)
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileOutputStream openFileOutput(String name, int mode)
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete the given private file associated with this Context's
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to delete; can not contain path
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the file was successfully deleted; else
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false.
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.File#delete()
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteFile(String name);
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a file created with
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openFileOutput} is stored.
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file for which you would like to get
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given file.
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFilesDir
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFileStreamPath(String name);
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path to the directory on the filesystem where
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * files created with {@link #openFileOutput} are stored.
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application files.
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFilesDir();
4484b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
450e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
451e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
452acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * Environment.getExternalStorageDirectory()}) where the application can
453e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place persistent files it owns.  These files are private to the
454e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * applications, and not typically visible to the user as media.
4554b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
456e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getFilesDir()} in that these
457e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
458e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
4594b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
460e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
461e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
462e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
463e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
464e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
465e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
466e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
4674b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
468e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a file in
469e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage:</p>
4704b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
471e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
472e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_file}
473e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
474acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * <p>If you supply a non-null <var>type</var> to this function, the returned
475e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * file will be a path to a sub-directory of the given type.  Though these files
476e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are not automatically scanned by the media scanner, you can explicitly
477e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * add them to the media database with
478e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[],
479b7c8c76180dc1abbf55c734ab121a7a2469060f6Ray Chen     *      OnScanCompletedListener) MediaScannerConnection.scanFile}.
480e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Note that this is not the same as
481e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
482e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, which provides
483e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories of media shared by all applications.  The
484e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories returned here are
485acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * owned by the application, and their contents will be removed when the
486e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * application is uninstalled.  Unlike
487e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
488e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, the directory
489e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * returned here will be automatically created for you.
4904b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
491e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a picture in
492e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage and add it to the media database:</p>
4934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
494e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
495e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_picture}
4964b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
497e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @param type The type of files directory to return.  May be null for
498e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the root of the files directory or one of
499e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the following Environment constants for a subdirectory:
500e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MUSIC},
501e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PODCASTS},
502e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_RINGTONES},
503e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_ALARMS},
504e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
505e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PICTURES}, or
506e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MOVIES}.
5074b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
508e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application files
509e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
510e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
511e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
512e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
513e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getFilesDir
514acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * @see android.os.Environment#getExternalStoragePublicDirectory
515e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
516e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalFilesDir(String type);
5174b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
518e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
519805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * Return the directory where this application's OBB files (if there
520805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * are any) can be found.  Note if the application does not have any OBB
521805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * files, this directory may not exist.
522805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     */
523805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    public abstract File getObbDir();
524805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn
525805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    /**
5264b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Returns the absolute path to the application specific cache directory
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the filesystem. These files will be ones that get deleted first when the
528e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * device runs low on storage.
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * There is no guarantee when these files will be deleted.
5304b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
531e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <strong>Note: you should not <em>rely</em> on the system deleting these
532e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files for you; you should always have a reasonable maximum, such as 1 MB,
533e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * for the amount of space you consume with cache files, and prune those
534e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files when exceeding that space.</strong>
5354b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application cache files.
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getCacheDir();
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
545e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
546e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
547e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStorageDirectory()} where the application can
548e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place cache files it owns.
5494b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
550e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getCacheDir()} in that these
551e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
552e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
5534b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
554e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
555e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>The platform does not monitor the space available in external storage,
556e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * and thus will not automatically delete these files.  Note that you should
557e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * be managing the maximum space you will use for these anyway, just like
558e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * with {@link #getCacheDir()}.
559e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
560e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
561e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
562e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
563e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
564e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
565e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
566e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application cache files
567e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
568e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
569e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
570e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
571e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getCacheDir
572e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
573e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalCacheDir();
5744b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
575e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private files associated with
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private files.
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] fileList();
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve, creating if needed, a new directory in which the application
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can place its own custom data files.  You can use the returned File
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * object to create and access files in this directory.  Note that files
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * created through a File object will only be accessible by your own
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application; you can only set the mode of the entire directory, not
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of individual files.
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Name of the directory to retrieve.  This is a directory
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is created as part of your application data.
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE} and
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_WRITEABLE} to control permissions.
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a File object for the requested directory.  The directory
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will have been created if it does not already exist.
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput(String, int)
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDir(String name, int mode);
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a new private SQLiteDatabase associated with this Context's
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.  Create the database file if it doesn't exist.
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the database.
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     default operation, {@link #MODE_WORLD_READABLE}
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param factory An optional factory class that is called to instantiate a
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     cursor when query is called.
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The contents of a newly created database with the given name.
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SQLiteDatabase openOrCreateDatabase(String name,
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode, CursorFactory factory);
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
63174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * Open a new private SQLiteDatabase associated with this Context's
63274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * application package.  Creates the database file if it doesn't exist.
63374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
63474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
63574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * used to handle corruption when sqlite reports database corruption.</p>
63674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
63774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param name The name (unique in the application package) of the database.
63874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
63974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     default operation, {@link #MODE_WORLD_READABLE}
64074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
64174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param factory An optional factory class that is called to instantiate a
64274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     cursor when query is called.
64374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
64403acd51bae7d3fe746d21aa89f5b6de539d92bc8Vasu Nori     * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
64574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @return The contents of a newly created database with the given name.
64674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
64774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
64874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_PRIVATE
64974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_READABLE
65074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_WRITEABLE
65174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #deleteDatabase
65274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     */
65374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    public abstract SQLiteDatabase openOrCreateDatabase(String name,
65474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori            int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
65574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori
65674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    /**
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete an existing private SQLiteDatabase associated with this Context's
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             database.
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the database was successfully deleted; else false.
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteDatabase(String name);
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a database created with
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openOrCreateDatabase} is stored.
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the database for which you would like to get
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given database.
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDatabasePath(String name);
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private databases associated with
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private databases.
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] databaseList();
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6944c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDrawable
6958cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.get()} instead.
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6974a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable getWallpaper();
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7014c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
7028cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.peek()} instead.
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7044a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable peekWallpaper();
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7088cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
7098cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumWidth()} instead.
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7114a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumWidth();
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7158cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
7168cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumHeight()} instead.
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7184a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumHeight();
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7224c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
7238cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7254a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(Bitmap bitmap) throws IOException;
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7294c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
7308cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7324a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(InputStream data) throws IOException;
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7368cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#clear
7378cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.clear()} instead.
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7394a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void clearWallpaper() throws IOException;
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Launch a new activity.  You will not receive any information about when
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the activity exits.
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if this method is being called from outside of an
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Activity} Context, then the Intent must include
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * without being started from an existing Activity, there is no existing
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * task in which to place the new activity and thus it needs to be placed
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in its own separate task.
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This method throws {@link ActivityNotFoundException}
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if there was no Activity found to run the given Intent.
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The description of the activity to start.
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws ActivityNotFoundException
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#resolveActivity
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void startActivity(Intent intent);
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
765621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Launch multiple new activities.  This is generally the same as calling
766621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link #startActivity(Intent)} for the first Intent in the array,
767621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * that activity during its creation calling {@link #startActivity(Intent)}
768621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * for the second entry, etc.  Note that unlike that approach, generally
769621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * none of the activities except the last in the array will be created
770621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * at this point, but rather will be created when the user first visits
771621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * them (due to pressing back from the activity on top).
772621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
773621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * <p>This method throws {@link ActivityNotFoundException}
774621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * if there was no Activity found for <em>any</em> given Intent.  In this
775621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * case the state of the activity stack is undefined (some Intents in the
776621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * list may be on it, some not), so you probably want to avoid such situations.
777621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
778621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param intents An array of Intents to be started.
779621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
780621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @throws ActivityNotFoundException
781621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
782621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @see PackageManager#resolveActivity
783621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
784621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    public abstract void startActivities(Intent[] intents);
785621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
786621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
787fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * Like {@link #startActivity(Intent)}, but taking a IntentSender
788fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * to start.  If the IntentSender is for an activity, that activity will be started
789ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn     * as if you had called the regular {@link #startActivity(Intent)}
790fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * here; otherwise, its associated action will be executed (such as
791fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * sending a broadcast) as if you had called
792fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
7934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
794fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param intent The IntentSender to launch.
795fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
796fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
797fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
798fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * would like to change.
799fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsValues Desired values for any bits set in
800fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * <var>flagsMask</var>
801fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param extraFlags Always set to 0.
802fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     */
803fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
804fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
805fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn            throws IntentSender.SendIntentException;
806fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn
807fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    /**
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers.  This
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent);
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, allowing
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an optional required permission to be enforced.  This
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
84326b71be600a44341a34079a007ce1492a6f26c1fBrad Fitzpatrick     * @param receiverPermission (optional) String naming a permission that
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent,
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, delivering
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * them one at a time to allow more preferred receivers to consume the
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast before it is delivered to less preferred receivers.  This
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission (optional) String naming a permissions that
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Version of {@link #sendBroadcast(Intent)} that allows you to
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receive data back from the broadcast.  This is accomplished by
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supplying your own BroadcastReceiver when calling, which will be
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * treated as a final receiver at the end of the broadcast -- its
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver#onReceive} method will be called with
885efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be serialized in the same way as calling
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Like {@link #sendBroadcast(Intent)}, this method is
8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * asynchronous; it will return before
8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resultReceiver.onReceive() is called.
8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission String naming a permissions that
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resultReceiver Your own BroadcastReceiver to treat as the final
9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                       receiver of the broadcast.
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler A custom Handler with which to schedule the
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  resultReceiver callback; if null it will be
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  scheduled in the Context's main thread.
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialCode An initial value for the result code.  Often
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    Activity.RESULT_OK.
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialData An initial value for the result data.  Often
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    null.
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialExtras An initial value for the result extras.  Often
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                      null.
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast(Intent)
916efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.Activity#RESULT_OK
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission, BroadcastReceiver resultReceiver,
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Handler scheduler, int initialCode, String initialData,
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bundle initialExtras);
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent you are sending stays around after the broadcast is complete,
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that others can quickly retrieve that data through the return
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all other ways, this behaves the same as
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendBroadcast(Intent)}.
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent will receive the broadcast, and the Intent will be held to
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be re-broadcast to future receivers.
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
943efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendStickyBroadcast(Intent intent);
9464b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
947efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    /**
948efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * Version of {@link #sendStickyBroadcast} that allows you to
949efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * receive data back from the broadcast.  This is accomplished by
950efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * supplying your own BroadcastReceiver when calling, which will be
951efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * treated as a final receiver at the end of the broadcast -- its
952efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link BroadcastReceiver#onReceive} method will be called with
953efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
954efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * be serialized in the same way as calling
955efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String)}.
956efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
957efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>Like {@link #sendBroadcast(Intent)}, this method is
958efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * asynchronous; it will return before
959efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * resultReceiver.onReceive() is called.  Note that the sticky data
960efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * stored is only the data you initially supply to the broadcast, not
961efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result of any changes made by the receivers.
962efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
963efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
964efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
965efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
966efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *               Intent will receive the broadcast.
967efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
968efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                       receiver of the broadcast.
969efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
970efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  resultReceiver callback; if null it will be
971efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  scheduled in the Context's main thread.
972efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialCode An initial value for the result code.  Often
973efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    Activity.RESULT_OK.
974efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialData An initial value for the result data.  Often
975efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    null.
976efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
977efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                      null.
978efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
979efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent)
980efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent, String)
981efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String)
982efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyBroadcast(Intent)
983efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.content.BroadcastReceiver
984efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #registerReceiver
985efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.app.Activity#RESULT_OK
986efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     */
987efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    public abstract void sendStickyOrderedBroadcast(Intent intent,
988efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            BroadcastReceiver resultReceiver,
989efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Handler scheduler, int initialCode, String initialData,
990efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Bundle initialExtras);
991efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove the data previously sent with {@link #sendStickyBroadcast},
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that it is as if the sticky broadcast had never happened.
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent that was previously broadcast.
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void removeStickyBroadcast(Intent intent);
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1008a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * Register a BroadcastReceiver to be run in the main activity thread.  The
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>receiver</var> will be called with any broadcast Intent that
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>, in the main application thread.
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system may broadcast Intents that are "sticky" -- these stay
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around after the broadcast as finished, to be sent to any later
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registrations. If your IntentFilter matches one of these sticky
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intents, that Intent will be returned by this function
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <strong>and</strong> sent to your <var>receiver</var> as if it had just
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been broadcast.
10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>There may be multiple sticky Intents that match <var>filter</var>,
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in which case each of these will be sent to <var>receiver</var>.  In
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this case, only one of these can be returned directly by the function;
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which of these that is returned is arbitrarily decided by the system.
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you know the Intent your are registering for is sticky, you can
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supply null for your <var>receiver</var>.  In this case, no receiver is
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registered -- the function simply returns the sticky Intent that
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>.  In the case of multiple matches, the same
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * rules as described above apply.
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1032a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * <p class="note">Note: this method <em>cannot be called from a
1033a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
1034a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * that is declared in an application's manifest.  It is okay, however, to call
1035a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * this method from another BroadcastReceiver that has itself been registered
1036a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * at run time with {@link #registerReceiver}, since the lifetime of such a
1037a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * registered BroadcastReceiver is tied to the object that registered it.</p>
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter);
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Register to receive intent broadcasts, to run in the context of
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>scheduler</var>.  See
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information.  This allows you to enforce permissions on who can
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast intents to your receiver, or have the receiver run in
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a different thread than the main application thread.
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param broadcastPermission String naming a permissions that a
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      broadcaster must hold in order to send an Intent to you.  If null,
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      no permission is required.
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler Handler identifying the thread that will receive
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      the Intent.  If null, the main thread of the process will be used.
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter)
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter,
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            String broadcastPermission,
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            Handler scheduler);
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Unregister a previously registered BroadcastReceiver.  <em>All</em>
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * filters that have been registered for this BroadcastReceiver will be
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed.
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to unregister.
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unregisterReceiver(BroadcastReceiver receiver);
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be started.  The Intent
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can either contain the complete class name of a specific service
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation to start, or an abstract definition through the
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * action and other fields of the kind of service to start.  If this service
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is not already running, it will be instantiated and started (creating a
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process for it if needed); if it is running then it remains running.
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Every call to this method will result in a corresponding call to
11024b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * the target service's {@link android.app.Service#onStartCommand} method,
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the <var>intent</var> given here.  This provides a convenient way
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to submit jobs to a service without having to bind and call on to its
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * interface.
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Using startService() overrides the default service lifetime that is
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * managed by {@link #bindService}: it requires the service to remain
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running until {@link #stopService} is called, regardless of whether
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * any clients are connected to it.  Note that calls to startService()
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not nesting: no matter how many times you call startService(),
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a single call to {@link #stopService} will stop it.
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system attempts to keep running services around as much as
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * possible.  The only time they should be stopped is if the current
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground application is using so many resources that the service needs
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be killed.  If any errors happen in the service's process, it will
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * automatically be restarted.
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to start the given service.
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to be started.  The Intent may
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.  Additional values
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      may be included in the Intent extras to supply arguments along with
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      this specific start call.
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If the service is being started or is already running, the
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ComponentName} of the actual service that was started is
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned; else if the service does not exist null is returned.
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #stopService
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ComponentName startService(Intent service);
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be stopped.  If the service is
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not running, nothing happens.  Otherwise it is stopped.  Note that calls
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to startService() are not counted -- this stops the service no matter
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * how many times it was started.
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if a stopped service still has {@link ServiceConnection}
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be destroyed until all of these bindings are removed.  See
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link android.app.Service} documentation for more details on a
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service's lifecycle.
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to stop the given service.
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Description of the service to be stopped.  The Intent may
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If there is a service matching the given Intent that is already
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running, then it is stopped and true is returned; else false is returned.
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean stopService(Intent service);
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Connect to an application service, creating it if needed.  This defines
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a dependency between your application and the service.  The given
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>conn</var> will receive the service object when its created and be
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * told if it dies and restarts.  The service will be considered required
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system only for as long as the calling context exists.  For
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * example, if this Context is an Activity that is stopped, the service will
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be required to continue running until the Activity is resumed.
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to bind to the given service.
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p class="note">Note: this method <em>can not be called from an
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver} component</em>.  A pattern you can use to
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * communicate from an BroadcastReceiver to a Service is to call
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #startService} with the arguments containing the command to be
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sent, with the service calling its
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Service#stopSelf(int)} method when done executing
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that command.  See the API demo App/Service/Service Start Arguments
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Controller for an illustration of this.  It is okay, however, to use
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method from an BroadcastReceiver that has been registered with
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is tied to another object (the one that registered it).</p>
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to connect to.  The Intent may
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name, or a logical
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn Receives information as the service is started and stopped.
11994b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @param flags Operation options for the binding.  May be 0,
12004b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *          {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND}, or
12014b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *          {@link #BIND_NOT_FOREGROUND}.
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If you have successfully bound to the service, true is returned;
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false is returned if the connection is not made so you will not
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         receive the service object.
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unbindService
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #BIND_AUTO_CREATE
12114b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_DEBUG_UNBIND
12124b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_NOT_FOREGROUND
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean bindService(Intent service, ServiceConnection conn,
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags);
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Disconnect from an application service.  You will no longer receive
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls as the service is restarted, and the service is now allowed to
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * stop at any time.
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The connection interface previously supplied to
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             bindService().
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unbindService(ServiceConnection conn);
12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Start executing an {@link android.app.Instrumentation} class.  The given
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instrumentation component will be run by killing its target application
12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (if currently running), starting the target process, instantiating the
12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation component, and then letting it drive the application.
12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function is not synchronous -- it returns as soon as the
12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation has started and while it is running.
12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Instrumentation is normally only allowed to run against a package
12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is either unsigned or signed with a signature that the
12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the instrumentation package is also signed with (ensuring the target
12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * trusts the instrumentation).
12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param className Name of the Instrumentation component to be run.
12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param profileFile Optional path to write profiling data as the
12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation runs, or null for no profiling.
12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param arguments Additional optional arguments to pass to the
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation, or null.
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true if the instrumentation was successfully started,
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * else false if it could not be found.
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean startInstrumentation(ComponentName className,
12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String profileFile, Bundle arguments);
12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the handle to a system-level service by name. The class of the
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned object varies by the requested name. Currently available names
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are:
12594b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dl>
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WINDOW_SERVICE} ("window")
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> The top-level window manager in which you can place custom
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  windows.  The returned object is a {@link android.view.WindowManager}.
12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  in this context.
12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.ActivityManager} for interacting with the
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  global activity state of the system.
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #POWER_SERVICE} ("power")
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.PowerManager} for controlling power
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  management.
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ALARM_SERVICE} ("alarm")
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  time of your choosing.
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.NotificationManager} for informing the user
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   of background events.
12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LOCATION_SERVICE} ("location")
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.location.LocationManager} for controlling location
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   (e.g., GPS) updates.
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #SEARCH_SERVICE} ("search")
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.SearchManager} for handling search.
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  hardware.
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  handling management of network connections.
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WIFI_SERVICE} ("wifi")
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi connectivity.
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for management of input methods.
129853332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dt> {@link #UI_MODE_SERVICE} ("uimode")
129953332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
13007083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * <dt> {@link #DOWNLOAD_SERVICE} ("download")
1301d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </dl>
13034b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note:  System services obtained via this API may be closely associated with
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the Context in which they are obtained from.  In general, do not share the
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service objects between various different contexts (Activities, Applications,
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Services, Providers, etc.)
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the desired service.
13104b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The service or null if the name does not exist.
13124b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WINDOW_SERVICE
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LAYOUT_INFLATER_SERVICE
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ACTIVITY_SERVICE
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #POWER_SERVICE
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.PowerManager
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ALARM_SERVICE
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #NOTIFICATION_SERVICE
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #KEYGUARD_SERVICE
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LOCATION_SERVICE
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SEARCH_SERVICE
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SENSOR_SERVICE
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
1333c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #STORAGE_SERVICE
1334b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #VIBRATOR_SERVICE
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #CONNECTIVITY_SERVICE
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WIFI_SERVICE
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #AUDIO_SERVICE
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #TELEPHONY_SERVICE
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #INPUT_METHOD_SERVICE
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.inputmethod.InputMethodManager
134753332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #UI_MODE_SERVICE
134853332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see android.app.UiModeManager
13497083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * @see #DOWNLOAD_SERVICE
1350d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * @see android.app.DownloadManager
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Object getSystemService(String name);
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.PowerManager} for controlling power management,
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * including "wake locks," which let you keep the device on while
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * you're running long tasks.
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String POWER_SERVICE = "power";
13614b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.WindowManager} for accessing the system's window
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * manager.
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WINDOW_SERVICE = "window";
13714b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater} for inflating layout resources in this
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * context.
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
13814b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1384603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * {@link android.accounts.AccountManager} for receiving intents at a
1385603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * time of your choosing.
1386603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     *
1387603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see #getSystemService
1388603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see android.accounts.AccountManager
1389603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     */
1390603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public static final String ACCOUNT_SERVICE = "account";
13914b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1392603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    /**
1393603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * Use with {@link #getSystemService} to retrieve a
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.ActivityManager} for interacting with the global
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * system state.
13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ACTIVITY_SERVICE = "activity";
14014b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.AlarmManager} for receiving intents at a
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * time of your choosing.
14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ALARM_SERVICE = "alarm";
14114b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for informing the user of
14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * background events.
14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String NOTIFICATION_SERVICE = "notification";
14214b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
142475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * {@link android.view.accessibility.AccessibilityManager} for giving the user
142575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * feedback for UI events through the registered event listeners.
142675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     *
142775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see #getSystemService
142875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see android.view.accessibility.AccessibilityManager
142975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     */
143075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    public static final String ACCESSIBILITY_SERVICE = "accessibility";
14314b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
143275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    /**
143375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * Use with {@link #getSystemService} to retrieve a
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for controlling keyguard.
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String KEYGUARD_SERVICE = "keyguard";
14404b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.location.LocationManager} for controlling location
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * updates.
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LOCATION_SERVICE = "location";
1450a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
1451a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    /**
1452a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * Use with {@link #getSystemService} to retrieve a
1453a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * {@link android.location.CountryDetector} for detecting the country that
1454a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * the user is in.
1455a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     *
1456a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * @hide
1457a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     */
1458a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    public static final String COUNTRY_DETECTOR = "country_detector";
1459a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.SearchManager} for handling searches.
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SEARCH_SERVICE = "search";
14684b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.hardware.SensorManager} for accessing sensors.
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SENSOR_SERVICE = "sensor";
14774b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1479c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
148002c8730c1bf19daf48bec8c6995df676a00a73b1Kenny Root     * android.os.storage.StorageManager} for accessing system storage
1481c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * functions.
1482c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     *
1483c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #getSystemService
1484b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
1485c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     */
1486c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    public static final String STORAGE_SERVICE = "storage";
1487c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat
1488c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    /**
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * com.android.server.WallpaperService for accessing wallpapers.
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WALLPAPER_SERVICE = "wallpaper";
14954b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Vibrator} for interacting with the vibration hardware.
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String VIBRATOR_SERVICE = "vibrator";
15049e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.StatusBarManager} for interacting with the status bar.
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.StatusBarManager
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String STATUS_BAR_SERVICE = "statusbar";
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.ConnectivityManager} for handling management of
15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * network connections.
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CONNECTIVITY_SERVICE = "connectivity";
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
15279e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * android.net.ThrottleManager} for handling management of
15289e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * throttling.
15299e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     *
15309e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @hide
15319e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @see #getSystemService
15329e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @see android.net.ThrottleManager
15339e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     */
15349e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt    public static final String THROTTLE_SERVICE = "throttle";
15359e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
15369e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt    /**
15379e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * Use with {@link #getSystemService} to retrieve a {@link
1538d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * android.net.NetworkManagementService} for handling management of
1539d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * system network services
1540d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     *
1541d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @hide
1542d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see #getSystemService
1543d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see android.net.NetworkManagementService
1544d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     */
1545d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    public static final String NETWORKMANAGEMENT_SERVICE = "network_management";
1546d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat
1547eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    /** {@hide} */
154875279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    public static final String NETWORK_STATS_SERVICE = "netstats";
154975279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    /** {@hide} */
1550eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public static final String NETWORK_POLICY_SERVICE = "netpolicy";
1551eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1552d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    /**
1553d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.wifi.WifiManager} for handling management of
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi access.
15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WIFI_SERVICE = "wifi";
15614b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.media.AudioManager} for handling management of volume,
15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * ringer modes and audio routing.
15664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String AUDIO_SERVICE = "audio";
15714b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.telephony.TelephonyManager} for handling management the
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * telephony features of the device.
15764b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String TELEPHONY_SERVICE = "phone";
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.text.ClipboardManager} for accessing and modifying
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the contents of the global clipboard.
15864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.text.ClipboardManager
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CLIPBOARD_SERVICE = "clipboard";
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.inputmethod.InputMethodManager} for accessing input
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * methods.
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String INPUT_METHOD_SERVICE = "input_method";
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1603e38d58bf890c03eb034afd18c62c730c7d735f1cDan Egnor     * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1608c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public static final String APPWIDGET_SERVICE = "appwidget";
1609952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1611487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * Use with {@link #getSystemService} to retrieve an
16124528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tate     * {@link android.app.backup.IBackupManager IBackupManager} for communicating
1613487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * with the backup mechanism.
16147f2054392e9957d3ba8579ef08c29cfb27df564eDianne Hackborn     * @hide
16154b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
1616487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * @see #getSystemService
1617487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     */
1618487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    public static final String BACKUP_SERVICE = "backup";
1619952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
1620952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    /**
1621952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * Use with {@link #getSystemService} to retrieve a
16221337b012f8e18c725b1ec17b456dc57a084d594dDan Egnor     * {@link android.os.DropBoxManager} instance for recording
1623952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * diagnostic logs.
1624952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * @see #getSystemService
1625952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     */
1626952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    public static final String DROPBOX_SERVICE = "dropbox";
1627952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
1628487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    /**
16294b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
163087bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn     * {@link android.app.admin.DevicePolicyManager} for working with global
1631d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * device policy management.
1632d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     *
1633d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * @see #getSystemService
1634d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     */
1635d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    public static final String DEVICE_POLICY_SERVICE = "device_policy";
1636d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn
1637d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    /**
163853332883543868fb83e111a07306368b7772b340Tobias Haamel     * Use with {@link #getSystemService} to retrieve a
163953332883543868fb83e111a07306368b7772b340Tobias Haamel     * {@link android.app.UiModeManager} for controlling UI modes.
164053332883543868fb83e111a07306368b7772b340Tobias Haamel     *
164153332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #getSystemService
164253332883543868fb83e111a07306368b7772b340Tobias Haamel     */
164353332883543868fb83e111a07306368b7772b340Tobias Haamel    public static final String UI_MODE_SERVICE = "uimode";
164453332883543868fb83e111a07306368b7772b340Tobias Haamel
164553332883543868fb83e111a07306368b7772b340Tobias Haamel    /**
1646a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * Use with {@link #getSystemService} to retrieve a
1647d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * {@link android.app.DownloadManager} for requesting HTTP downloads.
1648a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     *
1649a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * @see #getSystemService
1650a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     */
1651a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    public static final String DOWNLOAD_SERVICE = "download";
1652a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard
1653a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    /**
16542d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * Use with {@link #getSystemService} to retrieve a
165550b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * {@link android.nfc.NfcManager} for using NFC.
165650b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     *
165750b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * @see #getSystemService
165850b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     */
165950b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    public static final String NFC_SERVICE = "nfc";
166050b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly
166150b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    /**
166250b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * Use with {@link #getSystemService} to retrieve a
16632d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * {@link android.net.sip.SipManager} for accessing the SIP related service.
16642d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     *
16652d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * @see #getSystemService
16662d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     */
16672d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /** @hide */
16682d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    public static final String SIP_SERVICE = "sip";
16692d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang
16702d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /**
1671e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
1672c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * android.hardware.usb.UsbManager} for access to USB devices (as a USB host)
1673e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * and for controlling this device's behavior as a USB device.
1674e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
1675e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @see #getSystemService
1676c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * @see android.harware.usb.UsbManager
1677e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
1678e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public static final String USB_SERVICE = "usb";
1679e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
1680e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the given permission is allowed for a particular
16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process and user ID running in the system.
16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be > 0.
16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkPermission(String permission, int pid, int uid);
16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC you are handling has been
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is basically the same as calling
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkPermission(String, int, int)} with the pid and uid returned
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by {@link android.os.Binder#getCallingPid} and
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.Binder#getCallingUid}.  One important difference
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is that if you are not currently processing an IPC, this function
17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.  This is done to protect against accidentally
17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to avoid this protection.
17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingPermission(String permission);
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> have been
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is the same as
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingPermission}, except it grants your own permissions
17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfPermission(String permission);
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the given permission is not allowed for a particular process
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and user ID running in the system, throw a {@link SecurityException}.
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission(String, int, int)
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforcePermission(
17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, int pid, int uid, String message);
17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC you are handling has not been
17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission, throw a {@link
17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforcePermission(String, int, int, String)} with the
17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid and uid returned by {@link android.os.Binder#getCallingPid}
17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link android.os.Binder#getCallingUid}.  One important
17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * difference is that if you are not currently processing an IPC,
17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function will always throw the SecurityException.  This is
17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * done to protect against accidentally leaking permissions; you
17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can use {@link #enforceCallingOrSelfPermission} to avoid this
17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * protection.
17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission(String)
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingPermission(
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If neither you nor the calling process of an IPC you are
17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * handling has been granted a particular permission, throw a
17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link SecurityException}.  This is the same as {@link
17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingPermission}, except it grants your own
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission(String)
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfPermission(
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Grant permission to access a specific Uri to another package, regardless
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of whether that package has general permission to access the Uri's
17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * content provider.  This can be used to grant specific, temporary
17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions, typically in response to user interaction (such as the
17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user opening an attachment that you would like someone else to
17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * display).
17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start an activity instead of this function directly.  If you use this
18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * function directly, you should be sure to call
18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #revokeUriPermission} when the target should no longer be allowed
18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to access it.
18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>To succeed, the content provider owning the Uri must have set the
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * grantUriPermissions} attribute in its manifest or included the
18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestGrantUriPermission
18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;grant-uri-permissions&gt;} tag.
18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param toPackage The package you would like to allow to access the Uri.
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to grant access to.
18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #revokeUriPermission
18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void grantUriPermission(String toPackage, Uri uri,
18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int modeFlags);
18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove all permissions to access a particular content provider Uri
18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that were previously added with {@link #grantUriPermission}.  The given
18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Uri will match all previously granted Uris that are the same or a
18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sub-path of the given Uri.  That is, revoking "content://foo/one" will
18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * revoke both "content://foo/target" and "content://foo/target/sub", but not
18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "content://foo".
18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to revoke access to.
18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #grantUriPermission
18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void revokeUriPermission(Uri uri, int modeFlags);
18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether a particular process and user ID has been granted
18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This only checks for permissions
18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have been explicitly granted -- if the given process/uid has
18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * more general access to the URI's content provider then this check will
18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always fail.
18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed to access that uri, or
18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process and user ID has been
18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI.  This is basically
18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the same as calling {@link #checkUriPermission(Uri, int, int,
18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * int)} with the pid and uid returned by {@link
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> has been granted
18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This is the same as
18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingUriPermission}, except it grants your own permissions
18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Check both a Uri and normal permission.  This allows you to perform
19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #checkPermission} and {@link #checkUriPermission} in one
19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
19219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
19229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
19239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
19249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
19259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
19269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
19279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
19289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri or holds one of the given permissions, or
19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, String readPermission,
19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String writePermission, int pid, int uid, int modeFlags);
19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If a particular process and user ID has not been granted
19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This only checks for permissions that have
19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been explicitly granted -- if the given process/uid has more
19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * general access to the URI's content provider then this check
19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
19489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int pid, int uid, int modeFlags, String message);
19579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process and user ID has not been granted
19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforceUriPermission(Uri, int, int, int, String)} with
19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the pid and uid returned by {@link
19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always throw a SecurityException.
19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission(Uri, int)
19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingUriPermission(
19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC <em>or you</em> has not been
19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI, throw {@link
19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is the same as {@link
19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingUriPermission}, except it grants your own
19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
19874b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfUriPermission(Uri, int)
19959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfUriPermission(
19979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
19989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enforce both a Uri and normal permission.  This allows you to perform
20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
20029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
20034b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
20169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
20179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, String, String, int, int, int)
20199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, String readPermission, String writePermission,
20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int pid, int uid, int modeFlags, String message);
20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: include the application
20269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * code with the context.  This means loading code into the caller's
20279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process, so that {@link #getClassLoader()} can be used to instantiate
20289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application's classes.  Setting this flags imposes security
20299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on what application context you can access; if the
20309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requested application can not be safely loaded into your process,
20319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * java.lang.SecurityException will be thrown.  If this flag is not set,
20329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there will be no restrictions on the packages that can be loaded,
20339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but {@link #getClassLoader} will always return the default system
20349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class loader.
20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: ignore any security
20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on the Context being requested, allowing it to always
20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be loaded into a process even when it isn't safe to do so.  Use
20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with extreme care!
20449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
20464b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2047870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
2048870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Flag for use with {@link #createPackageContext}: a restricted context may
2049870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * disable specific features. For instance, a View associated with a restricted
2050870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * context would ignore particular XML attributes.
2051870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2052870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public static final int CONTEXT_RESTRICTED = 0x00000004;
20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a new Context object for the given application name.  This
20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Context is the same as what the named application gets when it is
20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * launched, containing the same resources and class loader.  Each call to
20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method returns a new instance of a Context object; Context objects
20599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not shared, however they share common state (Resources, ClassLoader,
20609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * etc) so the Context instance itself is fairly lightweight.
20619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application with the given package name.
20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link java.lang.SecurityException} if the Context requested
20669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can not be loaded into the caller's process for security reasons (see
20679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #CONTEXT_INCLUDE_CODE} for more information}.
20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName Name of the application's package.
20709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
20719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *              or {@link #CONTEXT_IGNORE_SECURITY}.
20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A Context for the application.
20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws java.lang.SecurityException
20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws PackageManager.NameNotFoundException if there is no application with
20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given package name
20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context createPackageContext(String packageName,
20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags) throws PackageManager.NameNotFoundException;
2081870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy
2082870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
2083870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Indicates whether this Context is restricted.
20844b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2085870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @return True if this Context is restricted, false otherwise.
20864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2087870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @see #CONTEXT_RESTRICTED
2088870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2089870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public boolean isRestricted() {
2090870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy        return false;
2091870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    }
20929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2093