Context.java revision 20e809870d8ac1e5b848f2daf51b2272ef89bdfc
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;
22756220bd1912535840388a6743830d2e59ad4964Dianne Hackbornimport android.content.res.Configuration;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray;
2574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Noriimport android.database.DatabaseErrorHandler;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase.CursorFactory;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
30ac695c608ba620e2362f57126d7be453cf5b7e1bAdam Powellimport android.media.MediaScannerConnection.OnScanCompletedListener;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper;
3579af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackbornimport android.os.UserHandle;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
3798365d7663cbd82979a5700faf0050220b01084dJeff Brownimport android.view.CompatibilityInfoHolder;
38a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display;
39a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.WindowManager;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface to global information about an application environment.  This is
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an abstract class whose implementation is provided by
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Android system.  It
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allows access to application-specific resources and classes, as well as
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * up-calls for application-level operations such as launching activities,
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcasting and receiving intents, etc.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Context {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: the default mode, where the created file can only
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be accessed by the calling application (or all applications sharing the
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * same user ID).
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_PRIVATE = 0x0000;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have read access
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_READABLE = 0x0001;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have write access
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_WRITEABLE = 0x0002;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: for use with {@link #openFileOutput}, if the file
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * already exists then write data to the end of the existing file
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instead of erasing it.
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_APPEND = 0x8000;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
884e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * SharedPreference loading flag: when set, the file on disk will
894e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * be checked for modification even if the shared preferences
904e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * instance is already loaded in this process.  This behavior is
914e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * sometimes desired in cases where the application has multiple
924e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, all writing to the same SharedPreferences file.
934e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * Generally there are better forms of communication between
944e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * processes, though.
954e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
964e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * <p>This was the legacy (but undocumented) behavior in and
974e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * before Gingerbread (Android 2.3) and this flag is implied when
984e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * targetting such releases.  For applications targetting SDK
994e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * versions <em>greater than</em> Android 2.3, this flag must be
1004e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * explicitly set if desired.
1014e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     *
1024e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #getSharedPreferences
1034e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     */
1044e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    public static final int MODE_MULTI_PROCESS = 0x0004;
1054e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick
1064e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick    /**
10747847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * Database open flag: when set, the database is opened with write-ahead
10847847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * logging enabled by default.
10947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *
11047847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #openOrCreateDatabase(String, int, CursorFactory)
11147847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler)
11247847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see SQLiteDatabase#enableWriteAheadLogging
11347847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     */
11447847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown    public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
11547847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown
11647847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown    /**
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: automatically create the service as long
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as the binding exists.  Note that while this will create the service,
1194b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * its {@link android.app.Service#onStartCommand}
1204b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * method will still only be called due to an
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * explicit call to {@link #startService}.  Even without that, though,
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this still provides you with access to the service object while the
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service is created.
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
125c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * <p>Note that prior to {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH},
126c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * not supplying this flag would also impact how important the system
127c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * consider's the target service's process to be.  When set, the only way
128c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * for it to be raised was by binding from a service in which case it will
129c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * only be important when that activity is in the foreground.  Now to
130c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * achieve this behavior you must explicitly supply the new flag
131c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * {@link #BIND_ADJUST_WITH_ACTIVITY}.  For compatibility, old applications
132c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * that don't specify {@link #BIND_AUTO_CREATE} will automatically have
133c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the flags {@link #BIND_WAIVE_PRIORITY} and
134c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * {@link #BIND_ADJUST_WITH_ACTIVITY} set for them in order to achieve
135c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the same result.
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_AUTO_CREATE = 0x0001;
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: include debugging help for mismatched
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls to unbind.  When this flag is set, the callstack of the following
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #unbindService} call is retained, to be printed if a later
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * incorrect unbind call is made.  Note that doing this requires retaining
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information about the binding that was made for the lifetime of the app,
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resulting in a leak -- this should only be used for debugging.
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_DEBUG_UNBIND = 0x0002;
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14909c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    /**
15009c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * Flag for {@link #bindService}: don't allow this binding to raise
15109c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * the target service's process to the foreground scheduling priority.
152130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * It will still be raised to at least the same memory priority
15309c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * as the client (so that its process will not be killable in any
15409c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * situation where the client is not killable), but for CPU scheduling
15509c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * purposes it may be left in the background.  This only has an impact
15609c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * in the situation where the binding client is a foreground process
15709c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     * and the target service is in a background process.
15809c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn     */
15909c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn    public static final int BIND_NOT_FOREGROUND = 0x0004;
16009c916bccbf236ccd0a2c80941e28cc55006e02aDianne Hackborn
161130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn    /**
162c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: indicates that the client application
163c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * binding to this service considers the service to be more important than
164c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the app itself.  When set, the platform will try to have the out of
165c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * memory kill the app before it kills the service it is bound to, though
166c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * this is not guaranteed to be the case.
167c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
168c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_ABOVE_CLIENT = 0x0008;
169c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
170c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
171130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * Flag for {@link #bindService}: allow the process hosting the bound
172130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * service to go through its normal memory management.  It will be
173130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * treated more like a running service, allowing the system to
174130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     * (temporarily) expunge the process if low on memory or for some other
175c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * whim it may have, and being more aggressive about making it a candidate
176c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * to be killed (and restarted) if running for a long time.
177c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
178c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010;
179c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
180c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
181c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: don't impact the scheduling or
182c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * memory management priority of the target service's hosting process.
183c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Allows the service's process to be managed on the background LRU list
184c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * just like a regular application process in the background.
185c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
186c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_WAIVE_PRIORITY = 0x0020;
187c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
188c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
189c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: this service is very important to
190c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * the client, so should be brought to the foreground process level
191c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * when the client is.  Normally a process can only be raised to the
192c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * visibility level by a client, even if that client is in the foreground.
193c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
194c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public static final int BIND_IMPORTANT = 0x0040;
195c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
196c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
197c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Flag for {@link #bindService}: If binding from an activity, allow the
198c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * target service's process importance to be raised based on whether the
199c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * activity is visible to the user, regardless whether another flag is
200c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * used to reduce the amount that the client process's overall importance
201c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * is used to impact it.
202130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn     */
2032c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
2042c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn
2052c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    /**
2062c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * Flag for {@link #bindService}: Don't consider the bound service to be
2072c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * visible, even if the caller is visible.
2082c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     * @hide
2092c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn     */
2102c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn    public static final int BIND_NOT_VISIBLE = 0x40000000;
211130b0d2b2629bdd8fc415e0f3da947f965a3f29dDianne Hackborn
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return an AssetManager instance for your application's package. */
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract AssetManager getAssets();
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a Resources instance for your application's package. */
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources getResources();
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return PackageManager instance to find global package information. */
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract PackageManager getPackageManager();
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a ContentResolver instance for your application's package. */
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ContentResolver getContentResolver();
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Looper for the main thread of the current process.  This is
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the thread used to dispatch calls to application components (activities,
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * services, etc).
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Looper getMainLooper();
2304b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the context of the single, global Application object of the
233e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * current process.  This generally should only be used if you need a
234e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Context whose lifecycle is separate from the current context, that is
235e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * tied to the lifetime of the process rather than the current component.
2364b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
237e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Consider for example how this interacts with
23836af79434fb62c26238132eaeda2ec5e732f3c2fBrad Fitzpatrick     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)}:
239e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
240e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from an Activity context, the receiver is being registered
241e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * within that activity.  This means that you are expected to unregister
242e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * before the activity is done being destroyed; in fact if you do not do
243e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * so, the framework will clean up your leaked registration as it removes
244e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the activity and log an error.  Thus, if you use the Activity context
245e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * to register a receiver that is static (global to the process, not
246e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * associated with an Activity instance) then that registration will be
247e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * removed on you at whatever point the activity you used is destroyed.
248e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li> <p>If used from the Context returned here, the receiver is being
249e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * registered with the global state associated with your application.  Thus
250e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * it will never be unregistered for you.  This is necessary if the receiver
251e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * is associated with static data, not a particular component.  However
252e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * using the ApplicationContext elsewhere can easily lead to serious leaks
253e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * if you forget to unregister, unbind, etc.
254e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context getApplicationContext();
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
259c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Add a new {@link ComponentCallbacks} to the base application of the
260c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Context, which will be called at the same times as the ComponentCallbacks
261c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * methods of activities and other components are called.  Note that you
262c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * <em>must</em> be sure to use {@link #unregisterComponentCallbacks} when
263c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * appropriate in the future; this will not be removed for you.
264905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     *
265905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     * @param callback The interface to call.  This can be either a
266905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn     * {@link ComponentCallbacks} or {@link ComponentCallbacks2} interface.
267c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
268c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public void registerComponentCallbacks(ComponentCallbacks callback) {
269c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn        getApplicationContext().registerComponentCallbacks(callback);
270c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    }
271c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
272c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
273c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * Remove a {@link ComponentCallbacks} objec that was previously registered
274c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     * with {@link #registerComponentCallbacks(ComponentCallbacks)}.
275c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     */
276c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    public void unregisterComponentCallbacks(ComponentCallbacks callback) {
277c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn        getApplicationContext().unregisterComponentCallbacks(callback);
278c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    }
279c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
280c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn    /**
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized, styled CharSequence from the application's package's
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the CharSequence text
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final CharSequence getText(int resId) {
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getText(resId);
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized string from the application's package's
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the string
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId) {
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId);
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized formatted string from the application's package's
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table, substituting the format arguments as defined in
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link java.util.Formatter} and {@link java.lang.String#format}.
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the format string
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param formatArgs The format arguments that will be used for substitution.
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId, Object... formatArgs) {
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId, formatArgs);
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the base theme for this context.  Note that this should be called
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * before any views are instantiated in the Context (for example before
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calling {@link android.app.Activity#setContentView} or
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater#inflate}).
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resid The style resource describing the theme.
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setTheme(int resid);
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
323247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    /** @hide Needed for some internal implementation...  not public because
324247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn     * you can't assume this actually means anything. */
325247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    public int getThemeResId() {
326247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn        return 0;
327247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn    }
328247fe74c934cb3fba85aae7e051a8044f460fb11Dianne Hackborn
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Theme object associated with this Context.
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources.Theme getTheme();
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int[])}
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int[])
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] attrs) {
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(attrs);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int, int[])
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int resid, int[] attrs) throws Resources.NotFoundException {
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(resid, attrs);
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs) {
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            set, attrs, defStyleAttr, defStyleRes);
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a class loader you can use to retrieve classes in this package.
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ClassLoader getClassLoader();
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return the name of this application's package. */
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageName();
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3915c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    /** Return the full application info for this context's package. */
3925c1e00b14d2ef10ec76abf3e951fa8003a67f558Dianne Hackborn    public abstract ApplicationInfo getApplicationInfo();
3934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3953214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
3963214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains the application's
3973214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary resources.
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the resources.
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageResourcePath();
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4073214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * Return the full path to this context's primary Android package.
4083214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * The Android package is a ZIP file which contains application's
4093214839482aebcdfccc7cec0b0849739ef46fa68Kenny Root     * primary code and assets.
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the code and assets.
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageCodePath();
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
41923ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * {@hide}
42023ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * Return the full path to the shared prefs file for the given prefs group name.
42123ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     *
42223ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * <p>Note: this is not generally useful for applications, since they should
42323ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     * not be directly accessing the file system.
42423ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato     */
42523ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    public abstract File getSharedPrefsFile(String name);
42623ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato
42723ecae3bbb60c5af940f3a22170d75eb6ac05b69Joe Onorato    /**
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve and hold the contents of the preferences file 'name', returning
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a SharedPreferences through which you can retrieve and modify its
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Only one instance of the SharedPreferences object is returned
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to any callers for the same name, meaning they will see each other's
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * edits as soon as they are made.
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Desired preferences file. If a preferences file by this name
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * does not exist, it will be created when you retrieve an
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE}
4394e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
4404e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
4414e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
4424e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * is always on in apps targetting Gingerbread (Android 2.3) and below, and
4434e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * off by default in later versions.
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the single SharedPreferences instance that can be used
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         to retrieve and modify the preference values.
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
4514e920f70f38d52d3a74c6a3133388a2e2cb6c175Brad Fitzpatrick     * @see #MODE_MULTI_PROCESS
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SharedPreferences getSharedPreferences(String name,
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode);
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for reading.
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileInputStream Resulting input stream.
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileInputStream#FileInputStream(String)
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileInputStream openFileInput(String name)
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for writing.  Creates the file if it doesn't already exist.
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_APPEND} to append to an existing file,
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions.
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileOutputStream Resulting output stream.
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_APPEND
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileOutputStream#FileOutputStream(String)
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileOutputStream openFileOutput(String name, int mode)
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete the given private file associated with this Context's
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to delete; can not contain path
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the file was successfully deleted; else
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false.
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.File#delete()
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteFile(String name);
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a file created with
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openFileOutput} is stored.
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file for which you would like to get
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given file.
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFilesDir
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFileStreamPath(String name);
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path to the directory on the filesystem where
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * files created with {@link #openFileOutput} are stored.
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application files.
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFilesDir();
5414b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
543e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
544e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
545acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * Environment.getExternalStorageDirectory()}) where the application can
546e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place persistent files it owns.  These files are private to the
547e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * applications, and not typically visible to the user as media.
5484b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
549e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getFilesDir()} in that these
550e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
551e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
5524b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
553e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
554e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
555e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
556e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
557e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
558e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
559e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
5604b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
561e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a file in
562e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage:</p>
5634b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
564e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
565e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_file}
566e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
567acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * <p>If you supply a non-null <var>type</var> to this function, the returned
568e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * file will be a path to a sub-directory of the given type.  Though these files
569e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are not automatically scanned by the media scanner, you can explicitly
570e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * add them to the media database with
571e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[],
572b7c8c76180dc1abbf55c734ab121a7a2469060f6Ray Chen     *      OnScanCompletedListener) MediaScannerConnection.scanFile}.
573e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Note that this is not the same as
574e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
575e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, which provides
576e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories of media shared by all applications.  The
577e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * directories returned here are
578acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * owned by the application, and their contents will be removed when the
579e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * application is uninstalled.  Unlike
580e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#getExternalStoragePublicDirectory
581e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStoragePublicDirectory()}, the directory
582e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * returned here will be automatically created for you.
5834b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
584e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>Here is an example of typical code to manipulate a picture in
585e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * an application's private storage and add it to the media database:</p>
5864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
587e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
588e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * private_picture}
5894b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
590e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @param type The type of files directory to return.  May be null for
591e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the root of the files directory or one of
592e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * the following Environment constants for a subdirectory:
593e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MUSIC},
594e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PODCASTS},
595e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_RINGTONES},
596e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_ALARMS},
597e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_NOTIFICATIONS},
598e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_PICTURES}, or
599e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * {@link android.os.Environment#DIRECTORY_MOVIES}.
6004b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
601e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application files
602e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
603e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
604e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
605e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
606e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getFilesDir
607acaf028fc9efd9754f57ed65476e79a816811b35Dianne Hackborn     * @see android.os.Environment#getExternalStoragePublicDirectory
608e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
609e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalFilesDir(String type);
6104b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
611e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
612805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * Return the directory where this application's OBB files (if there
613805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * are any) can be found.  Note if the application does not have any OBB
614805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * files, this directory may not exist.
615805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     */
616805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    public abstract File getObbDir();
617805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn
618805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn    /**
6194b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Returns the absolute path to the application specific cache directory
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the filesystem. These files will be ones that get deleted first when the
621e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * device runs low on storage.
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * There is no guarantee when these files will be deleted.
6234b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
624e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <strong>Note: you should not <em>rely</em> on the system deleting these
625e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files for you; you should always have a reasonable maximum, such as 1 MB,
626e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * for the amount of space you consume with cache files, and prune those
627e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files when exceeding that space.</strong>
6284b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application cache files.
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getCacheDir();
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
638e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Returns the absolute path to the directory on the external filesystem
639e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * (that is somewhere on {@link android.os.Environment#getExternalStorageDirectory()
640e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * Environment.getExternalStorageDirectory()} where the application can
641e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * place cache files it owns.
6424b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
643e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <p>This is like {@link #getCacheDir()} in that these
644e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * files will be deleted when the application is uninstalled, however there
645e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * are some important differences:
6464b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
647e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <ul>
648e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>The platform does not monitor the space available in external storage,
649e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * and thus will not automatically delete these files.  Note that you should
650e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * be managing the maximum space you will use for these anyway, just like
651e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * with {@link #getCacheDir()}.
652e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>External files are not always available: they will disappear if the
653e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * user mounts the external storage on a computer or removes it.  See the
654e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * APIs on {@link android.os.Environment} for information in the storage state.
655e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * <li>There is no security enforced with these files.  All applications
656e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * can read and write files placed here.
657e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * </ul>
658e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
659e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @return Returns the path of the directory holding application cache files
660e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * on external storage.  Returns null if external storage is not currently
661e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * mounted so it could not ensure the path exists; you will need to call
662e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * this method again when it is available.
663e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     *
664e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     * @see #getCacheDir
665e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn     */
666e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    public abstract File getExternalCacheDir();
6674b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
668e83cefcef07f9ac025642c1ffec76b4c7ab39cf2Dianne Hackborn    /**
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private files associated with
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private files.
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] fileList();
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve, creating if needed, a new directory in which the application
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can place its own custom data files.  You can use the returned File
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * object to create and access files in this directory.  Note that files
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * created through a File object will only be accessible by your own
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application; you can only set the mode of the entire directory, not
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of individual files.
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Name of the directory to retrieve.  This is a directory
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is created as part of your application data.
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE} and
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_WRITEABLE} to control permissions.
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a File object for the requested directory.  The directory
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will have been created if it does not already exist.
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput(String, int)
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDir(String name, int mode);
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a new private SQLiteDatabase associated with this Context's
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.  Create the database file if it doesn't exist.
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the database.
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     default operation, {@link #MODE_WORLD_READABLE}
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
70947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param factory An optional factory class that is called to instantiate a
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     cursor when query is called.
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The contents of a newly created database with the given name.
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
71947847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SQLiteDatabase openOrCreateDatabase(String name,
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode, CursorFactory factory);
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
72674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * Open a new private SQLiteDatabase associated with this Context's
72774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * application package.  Creates the database file if it doesn't exist.
72874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
72974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
73074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * used to handle corruption when sqlite reports database corruption.</p>
73174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
73274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param name The name (unique in the application package) of the database.
73374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
73474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     default operation, {@link #MODE_WORLD_READABLE}
73574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
73647847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
73774f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param factory An optional factory class that is called to instantiate a
73874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *     cursor when query is called.
73974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
74003acd51bae7d3fe746d21aa89f5b6de539d92bc8Vasu Nori     * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
74174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @return The contents of a newly created database with the given name.
74274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
74374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     *
74474f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_PRIVATE
74574f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_READABLE
74674f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #MODE_WORLD_WRITEABLE
74747847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
74874f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     * @see #deleteDatabase
74974f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori     */
75074f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    public abstract SQLiteDatabase openOrCreateDatabase(String name,
75174f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori            int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
75274f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori
75374f170f9468d3cf6d7d0ef453320141a3e63571bVasu Nori    /**
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete an existing private SQLiteDatabase associated with this Context's
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             database.
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the database was successfully deleted; else false.
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteDatabase(String name);
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a database created with
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openOrCreateDatabase} is stored.
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the database for which you would like to get
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given database.
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDatabasePath(String name);
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private databases associated with
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private databases.
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] databaseList();
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7914c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDrawable
7928cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.get()} instead.
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7944a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable getWallpaper();
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7984c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
7998cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.peek()} instead.
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8014a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable peekWallpaper();
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8058cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
8068cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumWidth()} instead.
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8084a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumWidth();
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8128cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
8138cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.getDesiredMinimumHeight()} instead.
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8154a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumHeight();
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8194c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
8208cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
8219530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8229530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8244a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(Bitmap bitmap) throws IOException;
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8284c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3Dianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
8298cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.set()} instead.
8309530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8319530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8334a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(InputStream data) throws IOException;
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8378cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * @deprecated Use {@link android.app.WallpaperManager#clear
8388cc6a5026aeb5cf9cc36529426fe0cc66714f5fbDianne Hackborn     * WallpaperManager.clear()} instead.
8399530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * <p>This method requires the caller to hold the permission
8409530e3a22d5ffa2019d1a5177b6a441d4d6d048bNicolas Falliere     * {@link android.Manifest.permission#SET_WALLPAPER}.
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8424a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    @Deprecated
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void clearWallpaper() throws IOException;
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
846a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startActivity(Intent, Bundle)} with no options
847a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * specified.
848a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
849a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intent The description of the activity to start.
850a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
851a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @throws ActivityNotFoundException
852a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
853a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivity(Intent, Bundle)}
854a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see PackageManager#resolveActivity
855a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
856a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivity(Intent intent);
857a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
858a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
8598264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * Same as {@link #startActivity(Intent)}, but for a specific user. It requires holding
8608264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission.
8618264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param intent The description of the activity to start.
86279af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user The UserHandle of the user to start this activity for.
8638264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @throws ActivityNotFoundException
8648264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @hide
8658264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     */
86679af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public void startActivityAsUser(Intent intent, UserHandle user) {
8678264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
8688264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    }
8698264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani
8708264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    /**
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Launch a new activity.  You will not receive any information about when
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the activity exits.
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if this method is being called from outside of an
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Activity} Context, then the Intent must include
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * without being started from an existing Activity, there is no existing
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * task in which to place the new activity and thus it needs to be placed
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in its own separate task.
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This method throws {@link ActivityNotFoundException}
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if there was no Activity found to run the given Intent.
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The description of the activity to start.
885a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
8867a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * May be null if there are no options.  See {@link android.app.ActivityOptions}
8877a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * for how to build the Bundle supplied here; there are no supported definitions
8887a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * for building it manually.
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws ActivityNotFoundException
8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
89260dd520d37a6d3163747eb9a4266d0a08b207c98Scott Main     * @see #startActivity(Intent)
8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#resolveActivity
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
895a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivity(Intent intent, Bundle options);
896a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
897a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
898258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * Same as {@link #startActivity(Intent, Bundle)}, but for a specific user. It requires holding
899258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission.
900258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @param intent The description of the activity to start.
901258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @param options Additional options for how the Activity should be started.
902258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * May be null if there are no options.  See {@link android.app.ActivityOptions}
903258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * for how to build the Bundle supplied here; there are no supported definitions
904258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * for building it manually.
90579af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user The UserHandle of the user to start this activity for.
906258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @throws ActivityNotFoundException
907258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @hide
908258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
90979af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public void startActivityAsUser(Intent intent, Bundle options, UserHandle userId) {
910258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
911258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    }
912258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
913258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
914a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startActivities(Intent[], Bundle)} with no options
915a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * specified.
916a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
917a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intents An array of Intents to be started.
918a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
919a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @throws ActivityNotFoundException
920a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
921a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivities(Intent[], Bundle)}
922a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see PackageManager#resolveActivity
923a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
924a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivities(Intent[] intents);
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
927621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Launch multiple new activities.  This is generally the same as calling
928621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link #startActivity(Intent)} for the first Intent in the array,
929621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * that activity during its creation calling {@link #startActivity(Intent)}
930621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * for the second entry, etc.  Note that unlike that approach, generally
931621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * none of the activities except the last in the array will be created
932621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * at this point, but rather will be created when the user first visits
933621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * them (due to pressing back from the activity on top).
934621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
935621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * <p>This method throws {@link ActivityNotFoundException}
936621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * if there was no Activity found for <em>any</em> given Intent.  In this
937621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * case the state of the activity stack is undefined (some Intents in the
938621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * list may be on it, some not), so you probably want to avoid such situations.
939621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
940621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param intents An array of Intents to be started.
941a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
9427a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * See {@link android.content.Context#startActivity(Intent, Bundle)
9437a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * Context.startActivity(Intent, Bundle)} for more details.
944621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
945621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @throws ActivityNotFoundException
946621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
947a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see {@link #startActivities(Intent[])}
948621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @see PackageManager#resolveActivity
949621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
950a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startActivities(Intent[] intents, Bundle options);
951a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
952a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
953a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)}
954a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * with no options specified.
955a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
956a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param intent The IntentSender to launch.
957a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
958a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
959a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
960a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * would like to change.
961a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param flagsValues Desired values for any bits set in
962a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * <var>flagsMask</var>
963a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param extraFlags Always set to 0.
964a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
965a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startActivity(Intent)
966a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle)
967a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
968a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
969a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
970a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            throws IntentSender.SendIntentException;
971621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
972621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
973a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender
974fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * to start.  If the IntentSender is for an activity, that activity will be started
975ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn     * as if you had called the regular {@link #startActivity(Intent)}
976fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * here; otherwise, its associated action will be executed (such as
977fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * sending a broadcast) as if you had called
978fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
9794b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
980fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param intent The IntentSender to launch.
981fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param fillInIntent If non-null, this will be provided as the
982fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * intent parameter to {@link IntentSender#sendIntent}.
983fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsMask Intent flags in the original IntentSender that you
984fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * would like to change.
985fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param flagsValues Desired values for any bits set in
986fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * <var>flagsMask</var>
987fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     * @param extraFlags Always set to 0.
988a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @param options Additional options for how the Activity should be started.
9897a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * See {@link android.content.Context#startActivity(Intent, Bundle)
9907a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * Context.startActivity(Intent, Bundle)} for more details.  If options
9917a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * have also been supplied by the IntentSender, options given here will
9927a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn     * override any that conflict with those given by the IntentSender.
993a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     *
994a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startActivity(Intent, Bundle)
995a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @see #startIntentSender(IntentSender, Intent, int, int, int)
996fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn     */
997fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    public abstract void startIntentSender(IntentSender intent,
998a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
999a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn            Bundle options) throws IntentSender.SendIntentException;
1000fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn
1001fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn    /**
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers.  This
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent);
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, allowing
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an optional required permission to be enforced.  This
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
103726b71be600a44341a34079a007ce1492a6f26c1fBrad Fitzpatrick     * @param receiverPermission (optional) String naming a permission that
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent,
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, delivering
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * them one at a time to allow more preferred receivers to consume the
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast before it is delivered to less preferred receivers.  This
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission (optional) String naming a permissions that
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Version of {@link #sendBroadcast(Intent)} that allows you to
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receive data back from the broadcast.  This is accomplished by
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supplying your own BroadcastReceiver when calling, which will be
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * treated as a final receiver at the end of the broadcast -- its
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver#onReceive} method will be called with
1079efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be serialized in the same way as calling
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Like {@link #sendBroadcast(Intent)}, this method is
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * asynchronous; it will return before
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resultReceiver.onReceive() is called.
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission String naming a permissions that
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resultReceiver Your own BroadcastReceiver to treat as the final
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                       receiver of the broadcast.
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler A custom Handler with which to schedule the
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  resultReceiver callback; if null it will be
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  scheduled in the Context's main thread.
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialCode An initial value for the result code.  Often
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    Activity.RESULT_OK.
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialData An initial value for the result data.  Often
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    null.
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialExtras An initial value for the result extras.  Often
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                      null.
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast(Intent)
1110efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.Activity#RESULT_OK
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission, BroadcastReceiver resultReceiver,
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Handler scheduler, int initialCode, String initialData,
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bundle initialExtras);
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11217d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * Same as {@link #sendBroadcast(Intent)}, but for a specific user.  This broadcast
11227d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * can only be sent to receivers that are part of the calling application.  It
11237d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
11247d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * permission.
11257d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param intent The intent to broadcast
112679af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user UserHandle to send the intent to.
11277d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @see #sendBroadcast(Intent)
11287d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     */
112979af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user);
11307d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
11317d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /**
11325ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Same as {@link #sendBroadcast(Intent, String)}, but for a specific user.  This broadcast
11335ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * can only be sent to receivers that are part of the calling application.  It
11345ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
11355ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission.
11365ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
11375ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
11385ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               Intent will receive the broadcast.
11395ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
11405ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param receiverPermission (optional) String naming a permission that
11415ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               a receiver must hold in order to receive your broadcast.
11425ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               If null, no permission is required.
11435ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
11445ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendBroadcast(Intent, String)
11455ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
11465ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user,
11475ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            String receiverPermission);
11485ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
11495ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
11507d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * Same as
11517d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)},
11527d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * but for a specific user.  This broadcast
11537d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * can only be sent to receivers that are part of the calling application.  It
11547d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
11557d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * permission.
11567d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
11577d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
11587d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
11597d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
11607d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *               Intent will receive the broadcast.
116179af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn     * @param user UserHandle to send the intent to.
11625ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param receiverPermission String naming a permissions that
11635ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               a receiver must hold in order to receive your broadcast.
11645ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               If null, no permission is required.
11657d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
11667d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                       receiver of the broadcast.
11677d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
11687d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                  resultReceiver callback; if null it will be
11697d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                  scheduled in the Context's main thread.
11707d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialCode An initial value for the result code.  Often
11717d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                    Activity.RESULT_OK.
11727d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialData An initial value for the result data.  Often
11737d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                    null.
11747d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
11757d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *                      null.
11767d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     *
11777d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
11787d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     */
117979af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn    public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
11805ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
11817d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            int initialCode, String initialData, Bundle initialExtras);
11827d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
11837d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /**
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent you are sending stays around after the broadcast is complete,
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that others can quickly retrieve that data through the return
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all other ways, this behaves the same as
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendBroadcast(Intent)}.
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent will receive the broadcast, and the Intent will be held to
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be re-broadcast to future receivers.
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
1200efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendStickyBroadcast(Intent intent);
12034b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1204efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    /**
1205efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * Version of {@link #sendStickyBroadcast} that allows you to
1206efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * receive data back from the broadcast.  This is accomplished by
1207efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * supplying your own BroadcastReceiver when calling, which will be
1208efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * treated as a final receiver at the end of the broadcast -- its
1209efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link BroadcastReceiver#onReceive} method will be called with
1210efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result values collected from the other receivers.  The broadcast will
1211efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * be serialized in the same way as calling
1212efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * {@link #sendOrderedBroadcast(Intent, String)}.
1213efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1214efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>Like {@link #sendBroadcast(Intent)}, this method is
1215efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * asynchronous; it will return before
1216efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * resultReceiver.onReceive() is called.  Note that the sticky data
1217efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * stored is only the data you initially supply to the broadcast, not
1218efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * the result of any changes made by the receivers.
1219efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1220efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
1221efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1222efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
1223efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *               Intent will receive the broadcast.
1224efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
1225efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                       receiver of the broadcast.
1226efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param scheduler A custom Handler with which to schedule the
1227efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  resultReceiver callback; if null it will be
1228efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                  scheduled in the Context's main thread.
1229efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialCode An initial value for the result code.  Often
1230efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    Activity.RESULT_OK.
1231efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialData An initial value for the result data.  Often
1232efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                    null.
1233efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
1234efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *                      null.
1235efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     *
1236efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent)
1237efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendBroadcast(Intent, String)
1238efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendOrderedBroadcast(Intent, String)
1239efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #sendStickyBroadcast(Intent)
1240efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.content.BroadcastReceiver
1241efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see #registerReceiver
1242efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     * @see android.app.Activity#RESULT_OK
1243efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn     */
1244efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn    public abstract void sendStickyOrderedBroadcast(Intent intent,
1245efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            BroadcastReceiver resultReceiver,
1246efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Handler scheduler, int initialCode, String initialData,
1247efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn            Bundle initialExtras);
1248efa199f016985b0a9d0471e42c803ee9f7941f0eDianne Hackborn
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove the data previously sent with {@link #sendStickyBroadcast},
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that it is as if the sticky broadcast had never happened.
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent that was previously broadcast.
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void removeStickyBroadcast(Intent intent);
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12645ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Same as {@link #sendStickyBroadcast(Intent)},
12655ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * but for a specific user.  This broadcast
12665ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * can only be sent to receivers that are part of the calling application.  It
12675ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
12685ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission.
12695ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12705ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
12715ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Intent will receive the broadcast, and the Intent will be held to
12725ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * be re-broadcast to future receivers.
12735ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
12745ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12755ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendBroadcast(Intent)
12765ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
12775ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendStickyBroadcastAsUser(Intent intent, UserHandle user);
12785ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
12795ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
12805ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Same as
12815ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
12825ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * but for a specific user.  This broadcast
12835ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * can only be sent to receivers that are part of the calling application.  It
12845ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
12855ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission.
12865ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12875ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
12885ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
12895ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent to broadcast; all receivers matching this
12905ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *               Intent will receive the broadcast.
12915ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to send the intent to.
12925ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param resultReceiver Your own BroadcastReceiver to treat as the final
12935ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                       receiver of the broadcast.
12945ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param scheduler A custom Handler with which to schedule the
12955ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                  resultReceiver callback; if null it will be
12965ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                  scheduled in the Context's main thread.
12975ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialCode An initial value for the result code.  Often
12985ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                    Activity.RESULT_OK.
12995ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialData An initial value for the result data.  Often
13005ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                    null.
13015ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param initialExtras An initial value for the result extras.  Often
13025ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *                      null.
13035ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13045ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
13055ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
13065ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void sendStickyOrderedBroadcastAsUser(Intent intent,
13075ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            UserHandle user, BroadcastReceiver resultReceiver,
13085ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            Handler scheduler, int initialCode, String initialData,
13095ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn            Bundle initialExtras);
13105ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
13115ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
13125ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * Same as
13135ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
13145ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * but for a specific user.  This broadcast
13155ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * can only be sent to receivers that are part of the calling application.  It
13165ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
13175ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission.
13185ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13195ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
13205ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission in order to use this API.  If you do not hold that
13215ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * permission, {@link SecurityException} will be thrown.
13225ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13235ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param intent The Intent that was previously broadcast.
13245ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @param user UserHandle to remove the sticky broadcast from.
13255ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     *
13265ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     * @see #sendStickyBroadcastAsUser
13275ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn     */
13285ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    public abstract void removeStickyBroadcastAsUser(Intent intent, UserHandle user);
13295ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn
13305ac72a29593ab9a20337a2225df52bdf4754be02Dianne Hackborn    /**
1331a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * Register a BroadcastReceiver to be run in the main activity thread.  The
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>receiver</var> will be called with any broadcast Intent that
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>, in the main application thread.
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system may broadcast Intents that are "sticky" -- these stay
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around after the broadcast as finished, to be sent to any later
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registrations. If your IntentFilter matches one of these sticky
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intents, that Intent will be returned by this function
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <strong>and</strong> sent to your <var>receiver</var> as if it had just
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been broadcast.
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>There may be multiple sticky Intents that match <var>filter</var>,
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in which case each of these will be sent to <var>receiver</var>.  In
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this case, only one of these can be returned directly by the function;
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which of these that is returned is arbitrarily decided by the system.
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you know the Intent your are registering for is sticky, you can
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supply null for your <var>receiver</var>.  In this case, no receiver is
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registered -- the function simply returns the sticky Intent that
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>.  In the case of multiple matches, the same
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * rules as described above apply.
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13556c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
13566c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * registered with this method will correctly respect the
13576c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
13586c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * Prior to that, it would be ignored and delivered to all matching registered
13596c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * receivers.  Be careful if using this for security.</p>
13606c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     *
1361a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * <p class="note">Note: this method <em>cannot be called from a
1362a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
1363a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * that is declared in an application's manifest.  It is okay, however, to call
1364a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * this method from another BroadcastReceiver that has itself been registered
1365a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * at run time with {@link #registerReceiver}, since the lifetime of such a
1366a34df8a2ba450b2c2ad83ccbbac30b80e2706bb2Chris Tate     * registered BroadcastReceiver is tied to the object that registered it.</p>
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter);
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Register to receive intent broadcasts, to run in the context of
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>scheduler</var>.  See
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information.  This allows you to enforce permissions on who can
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast intents to your receiver, or have the receiver run in
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a different thread than the main application thread.
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13916c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * <p>As of {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, receivers
13926c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * registered with this method will correctly respect the
13936c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * {@link Intent#setPackage(String)} specified for an Intent being broadcast.
13946c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * Prior to that, it would be ignored and delivered to all matching registered
13956c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     * receivers.  Be careful if using this for security.</p>
13966c418d585e0a91054b168fde3130188afd006c98Dianne Hackborn     *
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param broadcastPermission String naming a permissions that a
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      broadcaster must hold in order to send an Intent to you.  If null,
14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      no permission is required.
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler Handler identifying the thread that will receive
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      the Intent.  If null, the main thread of the process will be used.
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter)
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
141320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            IntentFilter filter, String broadcastPermission, Handler scheduler);
141420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn
141520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn    /**
141620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @hide
141720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * Same as {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
141820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * but for a specific user.  This receiver will receiver broadcasts that
141920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * are sent to the requested user.  It
142020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}
142120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * permission.
142220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
142320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param receiver The BroadcastReceiver to handle the broadcast.
142420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param user UserHandle to send the intent to.
142520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param filter Selects the Intent broadcasts to be received.
142620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param broadcastPermission String naming a permissions that a
142720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      broadcaster must hold in order to send an Intent to you.  If null,
142820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      no permission is required.
142920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @param scheduler Handler identifying the thread that will receive
143020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *      the Intent.  If null, the main thread of the process will be used.
143120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
143220e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @return The first sticky intent found that matches <var>filter</var>,
143320e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *         or null if there are none.
143420e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     *
143520e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler
143620e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #sendBroadcast
143720e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     * @see #unregisterReceiver
143820e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn     */
143920e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn    public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
144020e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            UserHandle user, IntentFilter filter, String broadcastPermission,
144120e809870d8ac1e5b848f2daf51b2272ef89bdfcDianne Hackborn            Handler scheduler);
14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Unregister a previously registered BroadcastReceiver.  <em>All</em>
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * filters that have been registered for this BroadcastReceiver will be
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed.
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to unregister.
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unregisterReceiver(BroadcastReceiver receiver);
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be started.  The Intent
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can either contain the complete class name of a specific service
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation to start, or an abstract definition through the
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * action and other fields of the kind of service to start.  If this service
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is not already running, it will be instantiated and started (creating a
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process for it if needed); if it is running then it remains running.
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Every call to this method will result in a corresponding call to
14634b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * the target service's {@link android.app.Service#onStartCommand} method,
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the <var>intent</var> given here.  This provides a convenient way
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to submit jobs to a service without having to bind and call on to its
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * interface.
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Using startService() overrides the default service lifetime that is
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * managed by {@link #bindService}: it requires the service to remain
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running until {@link #stopService} is called, regardless of whether
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * any clients are connected to it.  Note that calls to startService()
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not nesting: no matter how many times you call startService(),
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a single call to {@link #stopService} will stop it.
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system attempts to keep running services around as much as
14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * possible.  The only time they should be stopped is if the current
14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground application is using so many resources that the service needs
14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be killed.  If any errors happen in the service's process, it will
14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * automatically be restarted.
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to start the given service.
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to be started.  The Intent may
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.  Additional values
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      may be included in the Intent extras to supply arguments along with
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      this specific start call.
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If the service is being started or is already running, the
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ComponentName} of the actual service that was started is
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned; else if the service does not exist null is returned.
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #stopService
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ComponentName startService(Intent service);
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be stopped.  If the service is
15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not running, nothing happens.  Otherwise it is stopped.  Note that calls
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to startService() are not counted -- this stops the service no matter
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * how many times it was started.
15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if a stopped service still has {@link ServiceConnection}
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be destroyed until all of these bindings are removed.  See
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link android.app.Service} documentation for more details on a
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service's lifecycle.
15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to stop the given service.
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Description of the service to be stopped.  The Intent may
15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If there is a service matching the given Intent that is already
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running, then it is stopped and true is returned; else false is returned.
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean stopService(Intent service);
15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15327767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     * @hide like {@link #startService(Intent)} but for a specific user.
15337767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     */
15347767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public abstract ComponentName startServiceAsUser(Intent service, UserHandle user);
15357767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
15367767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    /**
15377767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     * @hide like {@link #stopService(Intent)} but for a specific user.
15387767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn     */
15397767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public abstract boolean stopServiceAsUser(Intent service, UserHandle user);
15407767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
15417767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    /**
15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Connect to an application service, creating it if needed.  This defines
15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a dependency between your application and the service.  The given
1544f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * <var>conn</var> will receive the service object when it is created and be
15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * told if it dies and restarts.  The service will be considered required
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system only for as long as the calling context exists.  For
15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * example, if this Context is an Activity that is stopped, the service will
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be required to continue running until the Activity is resumed.
15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to bind to the given service.
15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1553f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * <p class="note">Note: this method <em>can not be called from a
15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver} component</em>.  A pattern you can use to
1555f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * communicate from a BroadcastReceiver to a Service is to call
15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #startService} with the arguments containing the command to be
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sent, with the service calling its
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Service#stopSelf(int)} method when done executing
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that command.  See the API demo App/Service/Service Start Arguments
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Controller for an illustration of this.  It is okay, however, to use
1561f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa     * this method from a BroadcastReceiver that has been registered with
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is tied to another object (the one that registered it).</p>
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to connect to.  The Intent may
15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name, or a logical
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn Receives information as the service is started and stopped.
157079b3317b775810bac088b0998c48eb6506e2578cChristopher Tate     *      This must be a valid ServiceConnection object; it must not be null.
15714b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @param flags Operation options for the binding.  May be 0,
1572c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_AUTO_CREATE}, {@link #BIND_DEBUG_UNBIND},
1573c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_NOT_FOREGROUND}, {@link #BIND_ABOVE_CLIENT},
1574c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_ALLOW_OOM_MANAGEMENT}, or
1575c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn     *          {@link #BIND_WAIVE_PRIORITY}.
15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If you have successfully bound to the service, true is returned;
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false is returned if the connection is not made so you will not
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         receive the service object.
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unbindService
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #BIND_AUTO_CREATE
15854b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_DEBUG_UNBIND
15864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * @see #BIND_NOT_FOREGROUND
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean bindService(Intent service, ServiceConnection conn,
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags);
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15927d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn     * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle
159337ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     * argument for use by system server and other multi-user aware code.
159437ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     * @hide
159537ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani     */
15967d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    public boolean bindService(Intent service, ServiceConnection conn, int flags, int userHandle) {
159737ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani        throw new RuntimeException("Not implemented. Must override in a subclass.");
159837ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani    }
159937ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani
160037ce3a8af6faab675319d0803b288ab1dddc76beAmith Yamasani    /**
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Disconnect from an application service.  You will no longer receive
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls as the service is restarted, and the service is now allowed to
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * stop at any time.
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The connection interface previously supplied to
160679b3317b775810bac088b0998c48eb6506e2578cChristopher Tate     *             bindService().  This parameter must not be null.
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unbindService(ServiceConnection conn);
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Start executing an {@link android.app.Instrumentation} class.  The given
16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instrumentation component will be run by killing its target application
16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (if currently running), starting the target process, instantiating the
16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation component, and then letting it drive the application.
16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function is not synchronous -- it returns as soon as the
16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation has started and while it is running.
16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Instrumentation is normally only allowed to run against a package
16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is either unsigned or signed with a signature that the
16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the instrumentation package is also signed with (ensuring the target
16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * trusts the instrumentation).
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param className Name of the Instrumentation component to be run.
16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param profileFile Optional path to write profiling data as the
16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation runs, or null for no profiling.
16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param arguments Additional optional arguments to pass to the
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation, or null.
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true if the instrumentation was successfully started,
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * else false if it could not be found.
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean startInstrumentation(ComponentName className,
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String profileFile, Bundle arguments);
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the handle to a system-level service by name. The class of the
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned object varies by the requested name. Currently available names
16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are:
16424b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dl>
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WINDOW_SERVICE} ("window")
16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> The top-level window manager in which you can place custom
16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  windows.  The returned object is a {@link android.view.WindowManager}.
16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  in this context.
16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.ActivityManager} for interacting with the
16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  global activity state of the system.
16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #POWER_SERVICE} ("power")
16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.PowerManager} for controlling power
16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  management.
16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ALARM_SERVICE} ("alarm")
16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  time of your choosing.
16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.NotificationManager} for informing the user
16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   of background events.
16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LOCATION_SERVICE} ("location")
16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.location.LocationManager} for controlling location
16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   (e.g., GPS) updates.
16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #SEARCH_SERVICE} ("search")
16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.SearchManager} for handling search.
16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  hardware.
16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
16749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  handling management of network connections.
16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WIFI_SERVICE} ("wifi")
16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi connectivity.
16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for management of input methods.
168153332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dt> {@link #UI_MODE_SERVICE} ("uimode")
168253332883543868fb83e111a07306368b7772b340Tobias Haamel     * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
16837083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * <dt> {@link #DOWNLOAD_SERVICE} ("download")
1684d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </dl>
16864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note:  System services obtained via this API may be closely associated with
16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the Context in which they are obtained from.  In general, do not share the
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service objects between various different contexts (Activities, Applications,
16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Services, Providers, etc.)
16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the desired service.
16934b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The service or null if the name does not exist.
16954b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WINDOW_SERVICE
16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LAYOUT_INFLATER_SERVICE
16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ACTIVITY_SERVICE
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #POWER_SERVICE
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.PowerManager
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ALARM_SERVICE
17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #NOTIFICATION_SERVICE
17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #KEYGUARD_SERVICE
17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LOCATION_SERVICE
17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SEARCH_SERVICE
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SENSOR_SERVICE
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
1716c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #STORAGE_SERVICE
1717b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #VIBRATOR_SERVICE
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #CONNECTIVITY_SERVICE
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WIFI_SERVICE
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #AUDIO_SERVICE
17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
1726b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see #MEDIA_ROUTER_SERVICE
1727b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see android.media.MediaRouter
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #TELEPHONY_SERVICE
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #INPUT_METHOD_SERVICE
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.inputmethod.InputMethodManager
173253332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #UI_MODE_SERVICE
173353332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see android.app.UiModeManager
17347083c42fff819b2c4949984a461bd54e9fa822a3Steve Howard     * @see #DOWNLOAD_SERVICE
1735d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * @see android.app.DownloadManager
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Object getSystemService(String name);
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.PowerManager} for controlling power management,
17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * including "wake locks," which let you keep the device on while
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * you're running long tasks.
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String POWER_SERVICE = "power";
17464b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.WindowManager} for accessing the system's window
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * manager.
17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WINDOW_SERVICE = "window";
17564b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater} for inflating layout resources in this
17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * context.
17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
17664b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1769603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * {@link android.accounts.AccountManager} for receiving intents at a
1770603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * time of your choosing.
1771603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     *
1772603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see #getSystemService
1773603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * @see android.accounts.AccountManager
1774603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     */
1775603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public static final String ACCOUNT_SERVICE = "account";
17764b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
1777603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    /**
1778603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana     * Use with {@link #getSystemService} to retrieve a
17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.ActivityManager} for interacting with the global
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * system state.
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ACTIVITY_SERVICE = "activity";
17864b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.AlarmManager} for receiving intents at a
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * time of your choosing.
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ALARM_SERVICE = "alarm";
17964b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for informing the user of
18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * background events.
18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String NOTIFICATION_SERVICE = "notification";
18064b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
180975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * {@link android.view.accessibility.AccessibilityManager} for giving the user
181075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * feedback for UI events through the registered event listeners.
181175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     *
181275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see #getSystemService
181375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * @see android.view.accessibility.AccessibilityManager
181475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     */
181575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    public static final String ACCESSIBILITY_SERVICE = "accessibility";
18164b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
181775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov    /**
181875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov     * Use with {@link #getSystemService} to retrieve a
18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for controlling keyguard.
18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String KEYGUARD_SERVICE = "keyguard";
18254b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.location.LocationManager} for controlling location
18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * updates.
18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LOCATION_SERVICE = "location";
1835a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
1836a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    /**
1837a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * Use with {@link #getSystemService} to retrieve a
1838a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * {@link android.location.CountryDetector} for detecting the country that
1839a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * the user is in.
1840a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     *
1841a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     * @hide
1842a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao     */
1843a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao    public static final String COUNTRY_DETECTOR = "country_detector";
1844a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao
18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.SearchManager} for handling searches.
18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SEARCH_SERVICE = "search";
18534b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.hardware.SensorManager} for accessing sensors.
18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SENSOR_SERVICE = "sensor";
18624b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1864c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
186502c8730c1bf19daf48bec8c6995df676a00a73b1Kenny Root     * android.os.storage.StorageManager} for accessing system storage
1866c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * functions.
1867c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     *
1868c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     * @see #getSystemService
1869b104340496e3a531e26c8f428c808eca0e039f50San Mehat     * @see android.os.storage.StorageManager
1870c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat     */
1871c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    public static final String STORAGE_SERVICE = "storage";
1872c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat
1873c9d8175f40691228e25f0dd924cc2453a6f08e10San Mehat    /**
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * com.android.server.WallpaperService for accessing wallpapers.
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WALLPAPER_SERVICE = "wallpaper";
18804b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Vibrator} for interacting with the vibration hardware.
18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String VIBRATOR_SERVICE = "vibrator";
18899e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.StatusBarManager} for interacting with the status bar.
18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.StatusBarManager
18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String STATUS_BAR_SERVICE = "statusbar";
18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.ConnectivityManager} for handling management of
19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * network connections.
19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CONNECTIVITY_SERVICE = "connectivity";
19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
19129e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * android.net.ThrottleManager} for handling management of
19139e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * throttling.
19149e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     *
19159e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @hide
19169e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @see #getSystemService
19179e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * @see android.net.ThrottleManager
19189e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     */
19199e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt    public static final String THROTTLE_SERVICE = "throttle";
19209e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt
19219e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt    /**
19229e696c29f06d45d2891e1d38fd8d9033a9e21bb9Robert Greenwalt     * Use with {@link #getSystemService} to retrieve a {@link
19238662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * android.os.IUpdateLock} for managing runtime sequences that
19248662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * must not be interrupted by headless OTA application or similar.
19258662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     *
19268662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @hide
19278662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @see #getSystemService
19288662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * @see android.os.UpdateLock
19298662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     */
19308662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate    public static final String UPDATE_LOCK_SERVICE = "updatelock";
19318662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate
19328662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate    /**
19338662cab5c6a01ea5c426512e6f6d2cf3e158aea0Christopher Tate     * Use with {@link #getSystemService} to retrieve a {@link
1934d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * android.net.NetworkManagementService} for handling management of
1935d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * system network services
1936d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     *
1937d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @hide
1938d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see #getSystemService
1939d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * @see android.net.NetworkManagementService
1940d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     */
1941d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    public static final String NETWORKMANAGEMENT_SERVICE = "network_management";
1942d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat
1943eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    /** {@hide} */
194475279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    public static final String NETWORK_STATS_SERVICE = "netstats";
194575279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey    /** {@hide} */
1946eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public static final String NETWORK_POLICY_SERVICE = "netpolicy";
1947eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1948d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat    /**
1949d1df8ac6d076ef15ba8857211da2e447b6505fb3San Mehat     * Use with {@link #getSystemService} to retrieve a {@link
19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.wifi.WifiManager} for handling management of
19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi access.
19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WIFI_SERVICE = "wifi";
19574b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
195955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * Use with {@link #getSystemService} to retrieve a {@link
196055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * android.net.wifi.p2p.WifiP2pManager} for handling management of
1961651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff     * Wi-Fi peer-to-peer connections.
196255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     *
196355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see #getSystemService
196455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     * @see android.net.wifi.p2p.WifiP2pManager
196555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync     */
196655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final String WIFI_P2P_SERVICE = "wifip2p";
196755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
196855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    /**
19697d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * Use with {@link #getSystemService} to retrieve a {@link
197060309fc7bb95c9b3fc3e0ed60aa1eeb35bd13a68Irfan Sheriff     * android.net.nsd.NsdManager} for handling management of network service
19717d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * discovery
19727d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     *
19737d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     * @see #getSystemService
197460309fc7bb95c9b3fc3e0ed60aa1eeb35bd13a68Irfan Sheriff     * @see android.net.nsd.NsdManager
19757d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff     */
19767d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff    public static final String NSD_SERVICE = "servicediscovery";
19777d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff
19787d024d372431effc87168afdc7cbe387680c4935Irfan Sheriff    /**
19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.media.AudioManager} for handling management of volume,
19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * ringer modes and audio routing.
19824b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String AUDIO_SERVICE = "audio";
19874b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1990b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * {@link android.media.MediaRouter} for controlling and managing
1991b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * routing of media.
1992b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     *
1993b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see #getSystemService
1994b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * @see android.media.MediaRouter
1995b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     */
1996b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn    public static final String MEDIA_ROUTER_SERVICE = "media_router";
1997b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn
1998b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn    /**
1999b58b8f832d06b0ffa8886eba5a4916578a3b8743Dianne Hackborn     * Use with {@link #getSystemService} to retrieve a
20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.telephony.TelephonyManager} for handling management the
20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * telephony features of the device.
20024b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String TELEPHONY_SERVICE = "phone";
20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.text.ClipboardManager} for accessing and modifying
20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the contents of the global clipboard.
20124b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.text.ClipboardManager
20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CLIPBOARD_SERVICE = "clipboard";
20179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20194b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
20209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.inputmethod.InputMethodManager} for accessing input
20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * methods.
20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String INPUT_METHOD_SERVICE = "input_method";
20269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
2029988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * {@link android.view.textservice.TextServicesManager} for accessing
2030988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * text services.
2031988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     *
2032988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @see #getSystemService
2033988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
2034988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
2035988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
2036988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
2037988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Use with {@link #getSystemService} to retrieve a
2038e38d58bf890c03eb034afd18c62c730c7d735f1cDan Egnor     * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2043c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public static final String APPWIDGET_SERVICE = "appwidget";
2044952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
20459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2046487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * Use with {@link #getSystemService} to retrieve an
20474528186e0d65fc68ef0dd1941aa2ac8aefcd55a3Christopher Tate     * {@link android.app.backup.IBackupManager IBackupManager} for communicating
2048487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * with the backup mechanism.
20497f2054392e9957d3ba8579ef08c29cfb27df564eDianne Hackborn     * @hide
20504b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2051487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     * @see #getSystemService
2052487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate     */
2053487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    public static final String BACKUP_SERVICE = "backup";
2054952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
2055952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    /**
2056952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * Use with {@link #getSystemService} to retrieve a
20571337b012f8e18c725b1ec17b456dc57a084d594dDan Egnor     * {@link android.os.DropBoxManager} instance for recording
2058952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * diagnostic logs.
2059952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     * @see #getSystemService
2060952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor     */
2061952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor    public static final String DROPBOX_SERVICE = "dropbox";
2062952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor
2063487529a70cd1479ae8d6bbfb356be7e72542c185Christopher Tate    /**
20644b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     * Use with {@link #getSystemService} to retrieve a
206587bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn     * {@link android.app.admin.DevicePolicyManager} for working with global
2066d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * device policy management.
2067d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     *
2068d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     * @see #getSystemService
2069d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn     */
2070d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    public static final String DEVICE_POLICY_SERVICE = "device_policy";
2071d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn
2072d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn    /**
207353332883543868fb83e111a07306368b7772b340Tobias Haamel     * Use with {@link #getSystemService} to retrieve a
207453332883543868fb83e111a07306368b7772b340Tobias Haamel     * {@link android.app.UiModeManager} for controlling UI modes.
207553332883543868fb83e111a07306368b7772b340Tobias Haamel     *
207653332883543868fb83e111a07306368b7772b340Tobias Haamel     * @see #getSystemService
207753332883543868fb83e111a07306368b7772b340Tobias Haamel     */
207853332883543868fb83e111a07306368b7772b340Tobias Haamel    public static final String UI_MODE_SERVICE = "uimode";
207953332883543868fb83e111a07306368b7772b340Tobias Haamel
208053332883543868fb83e111a07306368b7772b340Tobias Haamel    /**
2081a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * Use with {@link #getSystemService} to retrieve a
2082d58429f9acdb33f05bdb233b7bba495de80cb336Steve Howard     * {@link android.app.DownloadManager} for requesting HTTP downloads.
2083a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     *
2084a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     * @see #getSystemService
2085a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard     */
2086a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    public static final String DOWNLOAD_SERVICE = "download";
2087a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard
2088a2709360665f77ed8bebccb2df86f08e8c83a701Steve Howard    /**
20892d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * Use with {@link #getSystemService} to retrieve a
209050b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * {@link android.nfc.NfcManager} for using NFC.
209150b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     *
209250b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * @see #getSystemService
209350b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     */
209450b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    public static final String NFC_SERVICE = "nfc";
209550b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly
209650b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly    /**
209750b4d8f643f31b37e9872f562fb869059cf79c8aNick Pelly     * Use with {@link #getSystemService} to retrieve a
20981abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * {@link android.bluetooth.BluetoothAdapter} for using Bluetooth.
20991abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     *
21001abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * @see #getSystemService
21011abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * @hide
21021abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     */
21031abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh    public static final String BLUETOOTH_SERVICE = "bluetooth";
21041abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh
21051abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh    /**
21061abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh     * Use with {@link #getSystemService} to retrieve a
21072d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * {@link android.net.sip.SipManager} for accessing the SIP related service.
21082d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     *
21092d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     * @see #getSystemService
21102d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang     */
21112d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /** @hide */
21122d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    public static final String SIP_SERVICE = "sip";
21132d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang
21142d94231ef91c732f649ff7af9520ee9eac441b16Chung-yih Wang    /**
2115e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
2116c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * android.hardware.usb.UsbManager} for access to USB devices (as a USB host)
2117e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * and for controlling this device's behavior as a USB device.
2118e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
2119e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @see #getSystemService
2120c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * @see android.harware.usb.UsbManager
2121e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
2122e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public static final String USB_SERVICE = "usb";
2123e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
2124e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
2125b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * Use with {@link #getSystemService} to retrieve a {@link
2126b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * android.hardware.SerialManager} for access to serial ports.
2127b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     *
2128b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @see #getSystemService
2129b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @see android.harware.SerialManager
2130b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     *
2131b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     * @hide
2132b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood     */
2133b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood    public static final String SERIAL_SERVICE = "serial";
2134b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood
2135b01e8bf57b7492b77e3445db51471edcbadda75eMike Lockwood    /**
21369df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * Use with {@link #getSystemService} to retrieve a
21379df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * {@link android.hardware.input.InputManager} for interacting with input devices.
21389df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     *
21399df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * @see #getSystemService
21409df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     * @see android.hardware.input.InputManager
21419df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown     */
21429df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown    public static final String INPUT_SERVICE = "input";
21439df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown
21449df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown    /**
214507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * Use with {@link #getSystemService} to retrieve a
2146fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * {@link android.hardware.display.DisplayManager} for interacting with display devices.
2147fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     *
2148fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * @see #getSystemService
2149fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * @see android.hardware.display.DisplayManager
2150fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     */
2151fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    public static final String DISPLAY_SERVICE = "display";
2152fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown
2153fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    /**
2154fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown     * Use with {@link #getSystemService} to retrieve a
215507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * {@link android.os.SchedulingPolicyService} for managing scheduling policy.
215607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     *
215707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @see #getSystemService
215807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @see android.os.SchedulingPolicyService
215907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     *
216007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     * @hide
216107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten     */
216207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten    public static final String SCHEDULING_POLICY_SERVICE = "scheduling_policy";
216307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten
216407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten    /**
2165258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * Use with {@link #getSystemService} to retrieve a
2166258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * {@link android.os.UserManager} for managing users on devices that support multiple users.
2167258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     *
2168258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @see #getSystemService
2169258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * @see android.os.UserManager
2170258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
2171258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    public static final String USER_SERVICE = "user";
2172258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
2173258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the given permission is allowed for a particular
21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process and user ID running in the system.
21769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be > 0.
21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
21839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
21849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
21859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkPermission(String permission, int pid, int uid);
21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC you are handling has been
21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is basically the same as calling
21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkPermission(String, int, int)} with the pid and uid returned
21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by {@link android.os.Binder#getCallingPid} and
21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.Binder#getCallingUid}.  One important difference
21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is that if you are not currently processing an IPC, this function
21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.  This is done to protect against accidentally
21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to avoid this protection.
22019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
22059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
22099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
22109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission
22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingPermission(String permission);
22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> have been
22169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is the same as
22179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingPermission}, except it grants your own permissions
22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
22249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
22259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
22279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
22289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
22299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfPermission(String permission);
22319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the given permission is not allowed for a particular process
22349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and user ID running in the system, throw a {@link SecurityException}.
22359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
22389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
22399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
22409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
22419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission(String, int, int)
22439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforcePermission(
22459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, int pid, int uid, String message);
22469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC you are handling has not been
22499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission, throw a {@link
22509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
22519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforcePermission(String, int, int, String)} with the
22529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid and uid returned by {@link android.os.Binder#getCallingPid}
22539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link android.os.Binder#getCallingUid}.  One important
22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * difference is that if you are not currently processing an IPC,
22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function will always throw the SecurityException.  This is
22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * done to protect against accidentally leaking permissions; you
22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can use {@link #enforceCallingOrSelfPermission} to avoid this
22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * protection.
22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission(String)
22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingPermission(
22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If neither you nor the calling process of an IPC you are
22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * handling has been granted a particular permission, throw a
22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link SecurityException}.  This is the same as {@link
22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingPermission}, except it grants your own
22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
22749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission(String)
22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfPermission(
22829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
22839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Grant permission to access a specific Uri to another package, regardless
22869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of whether that package has general permission to access the Uri's
22879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * content provider.  This can be used to grant specific, temporary
22889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions, typically in response to user interaction (such as the
22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user opening an attachment that you would like someone else to
22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * display).
22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
22969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start an activity instead of this function directly.  If you use this
22979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * function directly, you should be sure to call
22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #revokeUriPermission} when the target should no longer be allowed
22999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to access it.
23009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>To succeed, the content provider owning the Uri must have set the
23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * grantUriPermissions} attribute in its manifest or included the
23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestGrantUriPermission
23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;grant-uri-permissions&gt;} tag.
23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param toPackage The package you would like to allow to access the Uri.
23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to grant access to.
23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #revokeUriPermission
23169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void grantUriPermission(String toPackage, Uri uri,
23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int modeFlags);
23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove all permissions to access a particular content provider Uri
23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that were previously added with {@link #grantUriPermission}.  The given
23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Uri will match all previously granted Uris that are the same or a
23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sub-path of the given Uri.  That is, revoking "content://foo/one" will
23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * revoke both "content://foo/target" and "content://foo/target/sub", but not
23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "content://foo".
23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to revoke access to.
23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #grantUriPermission
23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void revokeUriPermission(Uri uri, int modeFlags);
23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether a particular process and user ID has been granted
23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This only checks for permissions
23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have been explicitly granted -- if the given process/uid has
23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * more general access to the URI's content provider then this check will
23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always fail.
23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed to access that uri, or
23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process and user ID has been
23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI.  This is basically
23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the same as calling {@link #checkUriPermission(Uri, int, int,
23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * int)} with the pid and uid returned by {@link
23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> has been granted
23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This is the same as
23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingUriPermission}, except it grants your own permissions
23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Check both a Uri and normal permission.  This allows you to perform
24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #checkPermission} and {@link #checkUriPermission} in one
24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri or holds one of the given permissions, or
24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, String readPermission,
24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String writePermission, int pid, int uid, int modeFlags);
24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If a particular process and user ID has not been granted
24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This only checks for permissions that have
24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been explicitly granted -- if the given process/uid has more
24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * general access to the URI's content provider then this check
24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int pid, int uid, int modeFlags, String message);
24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process and user ID has not been granted
24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforceUriPermission(Uri, int, int, int, String)} with
24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the pid and uid returned by {@link
24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always throw a SecurityException.
24619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission(Uri, int)
24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingUriPermission(
24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC <em>or you</em> has not been
24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI, throw {@link
24769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is the same as {@link
24779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingUriPermission}, except it grants your own
24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
24804b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfUriPermission(Uri, int)
24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfUriPermission(
24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enforce both a Uri and normal permission.  This allows you to perform
24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
24964b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
24979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
24999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, String, String, int, int, int)
25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, String readPermission, String writePermission,
25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int pid, int uid, int modeFlags, String message);
25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: include the application
25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * code with the context.  This means loading code into the caller's
25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process, so that {@link #getClassLoader()} can be used to instantiate
25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application's classes.  Setting this flags imposes security
25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on what application context you can access; if the
25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requested application can not be safely loaded into your process,
25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * java.lang.SecurityException will be thrown.  If this flag is not set,
25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there will be no restrictions on the packages that can be loaded,
25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but {@link #getClassLoader} will always return the default system
25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class loader.
25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: ignore any security
25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on the Context being requested, allowing it to always
25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be loaded into a process even when it isn't safe to do so.  Use
25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with extreme care!
25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
25394b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main
2540870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
2541870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Flag for use with {@link #createPackageContext}: a restricted context may
2542870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * disable specific features. For instance, a View associated with a restricted
2543870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * context would ignore particular XML attributes.
2544870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2545870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public static final int CONTEXT_RESTRICTED = 0x00000004;
25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a new Context object for the given application name.  This
25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Context is the same as what the named application gets when it is
25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * launched, containing the same resources and class loader.  Each call to
25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method returns a new instance of a Context object; Context objects
25529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not shared, however they share common state (Resources, ClassLoader,
25539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * etc) so the Context instance itself is fairly lightweight.
25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
25569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application with the given package name.
25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link java.lang.SecurityException} if the Context requested
25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can not be loaded into the caller's process for security reasons (see
25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #CONTEXT_INCLUDE_CODE} for more information}.
25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName Name of the application's package.
25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
25649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *              or {@link #CONTEXT_IGNORE_SECURITY}.
25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A Context for the application.
25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws java.lang.SecurityException
25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws PackageManager.NameNotFoundException if there is no application with
25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given package name
25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context createPackageContext(String packageName,
25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags) throws PackageManager.NameNotFoundException;
2574870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy
2575870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    /**
2576756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * Return a new Context object for the current Context but whose resources
2577756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * are adjusted to match the given Configuration.  Each call to this method
2578a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * returns a new instance of a Context object; Context objects are not
2579756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * shared, however common state (ClassLoader, other Resources for the
2580756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * same configuration) may be so the Context itself can be fairly lightweight.
2581756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     *
2582756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * @param overrideConfiguration A {@link Configuration} specifying what
2583756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * values to modify in the base Configuration of the original Context's
2584756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * resources.  If the base configuration changes (such as due to an
2585756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * orientation change), the resources of this context will also change except
2586756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     * for those that have been explicitly overridden with a value here.
2587756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     *
2588a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @return A Context with the given configuration override.
2589756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn     */
2590756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    public abstract Context createConfigurationContext(Configuration overrideConfiguration);
2591756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn
2592756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn    /**
2593a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * Return a new Context object for the current Context but whose resources
2594a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * are adjusted to match the metrics of the given Display.  Each call to this method
2595a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * returns a new instance of a Context object; Context objects are not
2596a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * shared, however common state (ClassLoader, other Resources for the
2597a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * same configuration) may be so the Context itself can be fairly lightweight.
2598a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2599a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * The returned display Context provides a {@link WindowManager}
2600a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * (see {@link #getSystemService(String)}) that is configured to show windows
2601a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * on the given display.  The WindowManager's {@link WindowManager#getDefaultDisplay}
2602a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * method can be used to retrieve the Display from the returned Context.
2603a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2604a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @param display A {@link Display} object specifying the display
2605a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * for whose metrics the Context's resources should be tailored and upon which
2606a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * new windows should be shown.
2607a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     *
2608a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @return A Context for the display.
2609a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     */
2610a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public abstract Context createDisplayContext(Display display);
2611a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown
2612a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    /**
261398365d7663cbd82979a5700faf0050220b01084dJeff Brown     * Gets the compatibility info holder for this context.  This information
261498365d7663cbd82979a5700faf0050220b01084dJeff Brown     * is provided on a per-application basis and is used to simulate lower density
261598365d7663cbd82979a5700faf0050220b01084dJeff Brown     * display metrics for legacy applications.
261698365d7663cbd82979a5700faf0050220b01084dJeff Brown     *
2617a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown     * @param displayId The display id for which to get compatibility info.
261898365d7663cbd82979a5700faf0050220b01084dJeff Brown     * @return The compatibility info holder, or null if not required by the application.
261998365d7663cbd82979a5700faf0050220b01084dJeff Brown     * @hide
262098365d7663cbd82979a5700faf0050220b01084dJeff Brown     */
2621a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public abstract CompatibilityInfoHolder getCompatibilityInfo(int displayId);
262298365d7663cbd82979a5700faf0050220b01084dJeff Brown
262398365d7663cbd82979a5700faf0050220b01084dJeff Brown    /**
2624870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * Indicates whether this Context is restricted.
26254b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2626870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @return True if this Context is restricted, false otherwise.
26274b5da6829aa5e324f5e9414c25d132ba0a9ebeb3Scott Main     *
2628870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     * @see #CONTEXT_RESTRICTED
2629870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy     */
2630870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    public boolean isRestricted() {
2631870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy        return false;
2632870e09fcd2dfdc12ac318962efd28b0420c562bbRomain Guy    }
26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2634