Context.java revision c39a6e0c51e182338deb8b63d07933b585134929
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
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetManager;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase.CursorFactory;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interface to global information about an application environment.  This is
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an abstract class whose implementation is provided by
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Android system.  It
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allows access to application-specific resources and classes, as well as
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * up-calls for application-level operations such as launching activities,
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcasting and receiving intents, etc.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Context {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: the default mode, where the created file can only
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be accessed by the calling application (or all applications sharing the
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * same user ID).
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_PRIVATE = 0x0000;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have read access
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_READABLE = 0x0001;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: allow all other applications to have write access
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to the created file.
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_WORLD_WRITEABLE = 0x0002;
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * File creation mode: for use with {@link #openFileOutput}, if the file
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * already exists then write data to the end of the existing file
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instead of erasing it.
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int MODE_APPEND = 0x8000;
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: automatically create the service as long
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as the binding exists.  Note that while this will create the service,
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * its {@link android.app.Service#onStart} method will still only be called due to an
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * explicit call to {@link #startService}.  Even without that, though,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this still provides you with access to the service object while the
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service is created.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Specifying this flag also tells the system to treat the service
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as being as important as your own process -- that is, when deciding
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which process should be killed to free memory, the service will only
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be considered a candidate as long as the processes of any such bindings
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is also a candidate to be killed.  This is to avoid situations where
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the service is being continually created and killed due to low memory.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_AUTO_CREATE = 0x0001;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for {@link #bindService}: include debugging help for mismatched
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls to unbind.  When this flag is set, the callstack of the following
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #unbindService} call is retained, to be printed if a later
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * incorrect unbind call is made.  Note that doing this requires retaining
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information about the binding that was made for the lifetime of the app,
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resulting in a leak -- this should only be used for debugging.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BIND_DEBUG_UNBIND = 0x0002;
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return an AssetManager instance for your application's package. */
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract AssetManager getAssets();
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a Resources instance for your application's package. */
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources getResources();
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return PackageManager instance to find global package information. */
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract PackageManager getPackageManager();
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return a ContentResolver instance for your application's package. */
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ContentResolver getContentResolver();
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Looper for the main thread of the current process.  This is
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the thread used to dispatch calls to application components (activities,
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * services, etc).
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Looper getMainLooper();
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the context of the single, global Application object of the
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * current process.
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context getApplicationContext();
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized, styled CharSequence from the application's package's
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the CharSequence text
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final CharSequence getText(int resId) {
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getText(resId);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized string from the application's package's
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table.
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the string
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId) {
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId);
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a localized formatted string from the application's package's
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default string table, substituting the format arguments as defined in
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link java.util.Formatter} and {@link java.lang.String#format}.
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resId Resource id for the format string
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param formatArgs The format arguments that will be used for substitution.
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final String getString(int resId, Object... formatArgs) {
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getResources().getString(resId, formatArgs);
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     /**
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the base theme for this context.  Note that this should be called
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * before any views are instantiated in the Context (for example before
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calling {@link android.app.Activity#setContentView} or
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater#inflate}).
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resid The style resource describing the theme.
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setTheme(int resid);
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the Theme object associated with this Context.
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Resources.Theme getTheme();
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int[])}
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int[])
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int[] attrs) {
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(attrs);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(int, int[])
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int resid, int[] attrs) throws Resources.NotFoundException {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(resid, attrs);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs) {
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve styled attribute information in this Context's theme.  See
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for more information.
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final TypedArray obtainStyledAttributes(
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTheme().obtainStyledAttributes(
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            set, attrs, defStyleAttr, defStyleRes);
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a class loader you can use to retrieve classes in this package.
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ClassLoader getClassLoader();
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Return the name of this application's package. */
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageName();
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@hide}
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the full path to this context's resource files.  This is the ZIP files
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * containing the application's resources.
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the resources.
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageResourcePath();
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@hide}
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the full path to this context's code and asset files.  This is the ZIP files
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * containing the application's code and assets.
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note: this is not generally useful for applications, since they should
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be directly accessing the file system.
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return String Path to the code and assets.
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String getPackageCodePath();
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve and hold the contents of the preferences file 'name', returning
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a SharedPreferences through which you can retrieve and modify its
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Only one instance of the SharedPreferences object is returned
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to any callers for the same name, meaning they will see each other's
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * edits as soon as they are made.
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Desired preferences file. If a preferences file by this name
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * does not exist, it will be created when you retrieve an
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE}
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link #MODE_WORLD_WRITEABLE} to control permissions.
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the single SharedPreferences instance that can be used
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         to retrieve and modify the preference values.
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SharedPreferences getSharedPreferences(String name,
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode);
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for reading.
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileInputStream Resulting input stream.
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileInputStream#FileInputStream(String)
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileInputStream openFileInput(String name)
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a private file associated with this Context's application package
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for writing.  Creates the file if it doesn't already exist.
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to open; can not contain path
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_APPEND} to append to an existing file,
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions.
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return FileOutputStream Resulting output stream.
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_APPEND
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.FileOutputStream#FileOutputStream(String)
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FileOutputStream openFileOutput(String name, int mode)
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throws FileNotFoundException;
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete the given private file associated with this Context's
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file to delete; can not contain path
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             separators.
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the file was successfully deleted; else
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false.
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #fileList
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.io.File#delete()
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteFile(String name);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a file created with
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openFileOutput} is stored.
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the file for which you would like to get
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given file.
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFilesDir
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFileStreamPath(String name);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path to the directory on the filesystem where
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * files created with {@link #openFileOutput} are stored.
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application files.
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getFilesDir();
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path to the application specific cache directory
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the filesystem. These files will be ones that get deleted first when the
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * device runs low on storage
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * There is no guarantee when these files will be deleted.
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the path of the directory holding application cache files.
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getFileStreamPath
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDir
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getCacheDir();
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private files associated with
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private files.
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileInput
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteFile
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] fileList();
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve, creating if needed, a new directory in which the application
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can place its own custom data files.  You can use the returned File
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * object to create and access files in this directory.  Note that files
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * created through a File object will only be accessible by your own
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application; you can only set the mode of the entire directory, not
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of individual files.
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name Name of the directory to retrieve.  This is a directory
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is created as part of your application data.
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default operation, {@link #MODE_WORLD_READABLE} and
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #MODE_WORLD_WRITEABLE} to control permissions.
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a File object for the requested directory.  The directory
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will have been created if it does not already exist.
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openFileOutput(String, int)
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDir(String name, int mode);
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a new private SQLiteDatabase associated with this Context's
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.  Create the database file if it doesn't exist.
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the database.
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     default operation, {@link #MODE_WORLD_READABLE}
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param factory An optional factory class that is called to instantiate a
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *     cursor when query is called.
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The contents of a newly created database with the given name.
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_PRIVATE
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_READABLE
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #MODE_WORLD_WRITEABLE
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract SQLiteDatabase openOrCreateDatabase(String name,
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int mode, CursorFactory factory);
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Delete an existing private SQLiteDatabase associated with this Context's
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application package.
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name (unique in the application package) of the
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             database.
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if the database was successfully deleted; else false.
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean deleteDatabase(String name);
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the absolute path on the filesystem where a database created with
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #openOrCreateDatabase} is stored.
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the database for which you would like to get
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          its path.
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns an absolute path to the given database.
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract File getDatabasePath(String name);
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns an array of strings naming the private databases associated with
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this Context's application package.
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Array of strings naming the private databases.
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #openOrCreateDatabase
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #deleteDatabase
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract String[] databaseList();
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Like {@link #peekWallpaper}, but always returns a valid Drawable.  If
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * no wallpaper is set, the system default wallpaper is returned.
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a Drawable object that will draw the wallpaper.
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable getWallpaper();
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retrieve the current system wallpaper.  This is returned as an
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * abstract Drawable that you can install in a View to display whatever
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * wallpaper the user has currently set.  If there is no wallpaper set,
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a null pointer is returned.
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a Drawable object that will draw the wallpaper or a
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * null pointer if these is none.
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Drawable peekWallpaper();
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the desired minimum width for the wallpaper. Callers of
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #setWallpaper(android.graphics.Bitmap)} or
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #setWallpaper(java.io.InputStream)} should check this value
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * beforehand to make sure the supplied wallpaper respects the desired
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * minimum width.
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the returned value is <= 0, the caller should use the width of
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the default display instead.
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The desired minimum width for the wallpaper. This value should
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be honored by applications that set the wallpaper but it is not
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * mandatory.
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumWidth();
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the desired minimum height for the wallpaper. Callers of
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #setWallpaper(android.graphics.Bitmap)} or
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #setWallpaper(java.io.InputStream)} should check this value
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * beforehand to make sure the supplied wallpaper respects the desired
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * minimum height.
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the returned value is <= 0, the caller should use the height of
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the default display instead.
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The desired minimum height for the wallpaper. This value should
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be honored by applications that set the wallpaper but it is not
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * mandatory.
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getWallpaperDesiredMinimumHeight();
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Change the current system wallpaper to a bitmap.  The given bitmap is
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * converted to a PNG and stored as the wallpaper.  On success, the intent
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#ACTION_WALLPAPER_CHANGED} is broadcast.
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param bitmap The bitmap to save.
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IOException If an error occurs reverting to the default
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * wallpaper.
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(Bitmap bitmap) throws IOException;
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Change the current system wallpaper to a specific byte stream.  The
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * give InputStream is copied into persistent storage and will now be
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * used as the wallpaper.  Currently it must be either a JPEG or PNG
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * image.  On success, the intent {@link Intent#ACTION_WALLPAPER_CHANGED}
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is broadcast.
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param data A stream containing the raw data to install as a wallpaper.
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IOException If an error occurs reverting to the default
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * wallpaper.
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setWallpaper(InputStream data) throws IOException;
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove any currently set wallpaper, reverting to the system's default
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * wallpaper. On success, the intent {@link Intent#ACTION_WALLPAPER_CHANGED}
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is broadcast.
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws IOException If an error occurs reverting to the default
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * wallpaper.
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void clearWallpaper() throws IOException;
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Launch a new activity.  You will not receive any information about when
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the activity exits.
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if this method is being called from outside of an
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Activity} Context, then the Intent must include
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * without being started from an existing Activity, there is no existing
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * task in which to place the new activity and thus it needs to be placed
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in its own separate task.
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This method throws {@link ActivityNotFoundException}
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if there was no Activity found to run the given Intent.
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The description of the activity to start.
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws ActivityNotFoundException
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#resolveActivity
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void startActivity(Intent intent);
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers.  This
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent);
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, allowing
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an optional required permission to be enforced.  This
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.  No results are propagated from
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receivers and receivers can not abort the broadcast. If you want
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to allow receivers to propagate results or abort the broadcast, you must
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * send an ordered broadcast using
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission (optional) String naming a permissions that
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendBroadcast(Intent intent,
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Broadcast the given intent to all interested BroadcastReceivers, delivering
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * them one at a time to allow more preferred receivers to consume the
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast before it is delivered to less preferred receivers.  This
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call is asynchronous; it returns immediately, and you will continue
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * executing while the receivers are run.
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission (optional) String naming a permissions that
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission);
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Version of {@link #sendBroadcast(Intent)} that allows you to
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * receive data back from the broadcast.  This is accomplished by
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supplying your own BroadcastReceiver when calling, which will be
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * treated as a final receiver at the end of the broadcast -- its
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver#onReceive} method will be called with
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the result values collected from the other receivers.  If you use
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an <var>resultReceiver</var> with this method, then the broadcast will
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be serialized in the same way as calling
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendOrderedBroadcast(Intent, String)}.
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Like {@link #sendBroadcast(Intent)}, this method is
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * asynchronous; it will return before
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * resultReceiver.onReceive() is called.
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               Intent will receive the broadcast.
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiverPermission String naming a permissions that
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               a receiver must hold in order to receive your broadcast.
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               If null, no permission is required.
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resultReceiver Your own BroadcastReceiver to treat as the final
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                       receiver of the broadcast.
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler A custom Handler with which to schedule the
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  resultReceiver callback; if null it will be
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                  scheduled in the Context's main thread.
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialCode An initial value for the result code.  Often
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    Activity.RESULT_OK.
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialData An initial value for the result data.  Often
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                    null.
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param initialExtras An initial value for the result extras.  Often
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                      null.
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent, String)
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendOrderedBroadcast(Intent, String)
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast(Intent)
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.content.BroadcastReceiver
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.Activity#RESULT_OK
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendOrderedBroadcast(Intent intent,
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String receiverPermission, BroadcastReceiver resultReceiver,
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Handler scheduler, int initialCode, String initialData,
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Bundle initialExtras);
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent you are sending stays around after the broadcast is complete,
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that others can quickly retrieve that data through the return
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * all other ways, this behaves the same as
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #sendBroadcast(Intent)}.
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent to broadcast; all receivers matching this
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent will receive the broadcast, and the Intent will be held to
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be re-broadcast to future receivers.
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast(Intent)
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void sendStickyBroadcast(Intent intent);
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove the data previously sent with {@link #sendStickyBroadcast},
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * so that it is as if the sticky broadcast had never happened.
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission in order to use this API.  If you do not hold that
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission, {@link SecurityException} will be thrown.
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param intent The Intent that was previously broadcast.
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendStickyBroadcast
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void removeStickyBroadcast(Intent intent);
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Register an BroadcastReceiver to be run in the main activity thread.  The
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>receiver</var> will be called with any broadcast Intent that
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>, in the main application thread.
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system may broadcast Intents that are "sticky" -- these stay
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around after the broadcast as finished, to be sent to any later
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registrations. If your IntentFilter matches one of these sticky
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intents, that Intent will be returned by this function
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <strong>and</strong> sent to your <var>receiver</var> as if it had just
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been broadcast.
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>There may be multiple sticky Intents that match <var>filter</var>,
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * in which case each of these will be sent to <var>receiver</var>.  In
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this case, only one of these can be returned directly by the function;
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which of these that is returned is arbitrarily decided by the system.
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>If you know the Intent your are registering for is sticky, you can
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supply null for your <var>receiver</var>.  In this case, no receiver is
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * registered -- the function simply returns the sticky Intent that
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * matches <var>filter</var>.  In the case of multiple matches, the same
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * rules as described above apply.
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p class="note">Note: this method <em>can not be called from an
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver} component</em>.  It is okay, however, to use
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method from another BroadcastReceiver that has itself been registered with
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver}, since the lifetime of such an BroadcastReceiver
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is tied to another object (the one that registered it).</p>
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter);
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Register to receive intent broadcasts, to run in the context of
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>scheduler</var>.  See
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * information.  This allows you to enforce permissions on who can
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast intents to your receiver, or have the receiver run in
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a different thread than the main application thread.
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to handle the broadcast.
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param filter Selects the Intent broadcasts to be received.
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param broadcastPermission String naming a permissions that a
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      broadcaster must hold in order to send an Intent to you.  If null,
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      no permission is required.
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scheduler Handler identifying the thread that will receive
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      the Intent.  If null, the main thread of the process will be used.
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The first sticky intent found that matches <var>filter</var>,
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         or null if there are none.
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver(BroadcastReceiver, IntentFilter)
8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #sendBroadcast
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unregisterReceiver
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Intent registerReceiver(BroadcastReceiver receiver,
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            IntentFilter filter,
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            String broadcastPermission,
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            Handler scheduler);
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Unregister a previously registered BroadcastReceiver.  <em>All</em>
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * filters that have been registered for this BroadcastReceiver will be
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed.
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param receiver The BroadcastReceiver to unregister.
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #registerReceiver
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unregisterReceiver(BroadcastReceiver receiver);
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be started.  The Intent
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can either contain the complete class name of a specific service
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation to start, or an abstract definition through the
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * action and other fields of the kind of service to start.  If this service
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is not already running, it will be instantiated and started (creating a
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process for it if needed); if it is running then it remains running.
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Every call to this method will result in a corresponding call to
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the target service's {@link android.app.Service#onStart} method,
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the <var>intent</var> given here.  This provides a convenient way
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to submit jobs to a service without having to bind and call on to its
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * interface.
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Using startService() overrides the default service lifetime that is
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * managed by {@link #bindService}: it requires the service to remain
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running until {@link #stopService} is called, regardless of whether
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * any clients are connected to it.  Note that calls to startService()
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not nesting: no matter how many times you call startService(),
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a single call to {@link #stopService} will stop it.
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>The system attempts to keep running services around as much as
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * possible.  The only time they should be stopped is if the current
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground application is using so many resources that the service needs
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be killed.  If any errors happen in the service's process, it will
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * automatically be restarted.
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to start the given service.
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to be started.  The Intent may
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.  Additional values
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      may be included in the Intent extras to supply arguments along with
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      this specific start call.
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If the service is being started or is already running, the
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ComponentName} of the actual service that was started is
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned; else if the service does not exist null is returned.
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #stopService
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract ComponentName startService(Intent service);
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request that a given application service be stopped.  If the service is
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not running, nothing happens.  Otherwise it is stopped.  Note that calls
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to startService() are not counted -- this stops the service no matter
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * how many times it was started.
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note that if a stopped service still has {@link ServiceConnection}
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be destroyed until all of these bindings are removed.  See
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the {@link android.app.Service} documentation for more details on a
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service's lifecycle.
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to stop the given service.
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Description of the service to be stopped.  The Intent may
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name to start, or a logical
8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If there is a service matching the given Intent that is already
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running, then it is stopped and true is returned; else false is returned.
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean stopService(Intent service);
9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Connect to an application service, creating it if needed.  This defines
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a dependency between your application and the service.  The given
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <var>conn</var> will receive the service object when its created and be
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * told if it dies and restarts.  The service will be considered required
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by the system only for as long as the calling context exists.  For
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * example, if this Context is an Activity that is stopped, the service will
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be required to continue running until the Activity is resumed.
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function will throw {@link SecurityException} if you do not
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * have permission to bind to the given service.
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p class="note">Note: this method <em>can not be called from an
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link BroadcastReceiver} component</em>.  A pattern you can use to
9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * communicate from an BroadcastReceiver to a Service is to call
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #startService} with the arguments containing the command to be
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sent, with the service calling its
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.Service#stopSelf(int)} method when done executing
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that command.  See the API demo App/Service/Service Start Arguments
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Controller for an illustration of this.  It is okay, however, to use
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method from an BroadcastReceiver that has been registered with
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is tied to another object (the one that registered it).</p>
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param service Identifies the service to connect to.  The Intent may
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      specify either an explicit component name, or a logical
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      description (action, category, etc) to match an
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      {@link IntentFilter} published by a service.
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn Receives information as the service is started and stopped.
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Operation options for the binding.  May be 0 or
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *          {@link #BIND_AUTO_CREATE}.
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return If you have successfully bound to the service, true is returned;
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         false is returned if the connection is not made so you will not
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         receive the service object.
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unbindService
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #startService
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #BIND_AUTO_CREATE
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean bindService(Intent service, ServiceConnection conn,
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags);
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Disconnect from an application service.  You will no longer receive
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * calls as the service is restarted, and the service is now allowed to
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * stop at any time.
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param conn The connection interface previously supplied to
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *             bindService().
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #bindService
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void unbindService(ServiceConnection conn);
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Start executing an {@link android.app.Instrumentation} class.  The given
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instrumentation component will be run by killing its target application
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (if currently running), starting the target process, instantiating the
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation component, and then letting it drive the application.
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This function is not synchronous -- it returns as soon as the
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation has started and while it is running.
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Instrumentation is normally only allowed to run against a package
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that is either unsigned or signed with a signature that the
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the instrumentation package is also signed with (ensuring the target
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * trusts the instrumentation).
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param className Name of the Instrumentation component to be run.
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param profileFile Optional path to write profiling data as the
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation runs, or null for no profiling.
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param arguments Additional optional arguments to pass to the
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * instrumentation, or null.
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true if the instrumentation was successfully started,
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * else false if it could not be found.
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean startInstrumentation(ComponentName className,
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String profileFile, Bundle arguments);
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the handle to a system-level service by name. The class of the
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned object varies by the requested name. Currently available names
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are:
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dl>
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WINDOW_SERVICE} ("window")
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> The top-level window manager in which you can place custom
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  windows.  The returned object is a {@link android.view.WindowManager}.
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  in this context.
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.ActivityManager} for interacting with the
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  global activity state of the system.
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #POWER_SERVICE} ("power")
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.PowerManager} for controlling power
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  management.
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #ALARM_SERVICE} ("alarm")
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  time of your choosing.
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.NotificationManager} for informing the user
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   of background events.
10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #LOCATION_SERVICE} ("location")
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.location.LocationManager} for controlling location
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *   (e.g., GPS) updates.
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #SEARCH_SERVICE} ("search")
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.app.SearchManager} for handling search.
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  hardware.
10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  handling management of network connections.
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dt> {@link #WIFI_SERVICE} ("wifi")
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi connectivity.
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for management of input methods.
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </dl>
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Note:  System services obtained via this API may be closely associated with
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the Context in which they are obtained from.  In general, do not share the
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * service objects between various different contexts (Activities, Applications,
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Services, Providers, etc.)
10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param name The name of the desired service.
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The service or null if the name does not exist.
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WINDOW_SERVICE
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LAYOUT_INFLATER_SERVICE
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ACTIVITY_SERVICE
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #POWER_SERVICE
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.PowerManager
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #ALARM_SERVICE
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #NOTIFICATION_SERVICE
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #KEYGUARD_SERVICE
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #LOCATION_SERVICE
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SEARCH_SERVICE
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #SENSOR_SERVICE
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #VIBRATOR_SERVICE
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #CONNECTIVITY_SERVICE
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #WIFI_SERVICE
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #AUDIO_SERVICE
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #TELEPHONY_SERVICE
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #INPUT_METHOD_SERVICE
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.inputmethod.InputMethodManager
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Object getSystemService(String name);
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.PowerManager} for controlling power management,
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * including "wake locks," which let you keep the device on while
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * you're running long tasks.
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String POWER_SERVICE = "power";
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.WindowManager} for accessing the system's window
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * manager.
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.WindowManager
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WINDOW_SERVICE = "window";
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.LayoutInflater} for inflating layout resources in this
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * context.
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.view.LayoutInflater
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.ActivityManager} for interacting with the global
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * system state.
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.ActivityManager
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ACTIVITY_SERVICE = "activity";
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.AlarmManager} for receiving intents at a
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * time of your choosing.
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.AlarmManager
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String ALARM_SERVICE = "alarm";
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for informing the user of
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * background events.
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.NotificationManager
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String NOTIFICATION_SERVICE = "notification";
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.app.NotificationManager} for controlling keyguard.
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.KeyguardManager
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String KEYGUARD_SERVICE = "keyguard";
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.location.LocationManager} for controlling location
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * updates.
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.location.LocationManager
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String LOCATION_SERVICE = "location";
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.SearchManager} for handling searches.
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.SearchManager
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SEARCH_SERVICE = "search";
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.hardware.SensorManager} for accessing sensors.
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.hardware.SensorManager
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String SENSOR_SERVICE = "sensor";
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.bluetooth.BluetoothDevice} for interacting with Bluetooth.
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.bluetooth.BluetoothDevice
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String BLUETOOTH_SERVICE = "bluetooth";
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * com.android.server.WallpaperService for accessing wallpapers.
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WALLPAPER_SERVICE = "wallpaper";
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Vibrator} for interacting with the vibration hardware.
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.os.Vibrator
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String VIBRATOR_SERVICE = "vibrator";
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.app.StatusBarManager} for interacting with the status bar.
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.app.StatusBarManager
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String STATUS_BAR_SERVICE = "statusbar";
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.ConnectivityManager} for handling management of
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * network connections.
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.ConnectivityManager
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CONNECTIVITY_SERVICE = "connectivity";
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a {@link
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.net.wifi.WifiManager} for handling management of
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wi-Fi access.
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.net.wifi.WifiManager
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String WIFI_SERVICE = "wifi";
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.media.AudioManager} for handling management of volume,
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * ringer modes and audio routing.
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.media.AudioManager
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String AUDIO_SERVICE = "audio";
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.telephony.TelephonyManager} for handling management the
12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * telephony features of the device.
12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.telephony.TelephonyManager
12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String TELEPHONY_SERVICE = "phone";
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.text.ClipboardManager} for accessing and modifying
12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the contents of the global clipboard.
12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see android.text.ClipboardManager
12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String CLIPBOARD_SERVICE = "clipboard";
12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.view.inputmethod.InputMethodManager} for accessing input
12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * methods.
12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final String INPUT_METHOD_SERVICE = "input_method";
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Use with {@link #getSystemService} to retrieve a
1253c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * {@blink android.appwidget.AppWidgetManager} for accessing AppWidgets.
12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getSystemService
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1258c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public static final String APPWIDGET_SERVICE = "appwidget";
12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the given permission is allowed for a particular
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process and user ID running in the system.
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be > 0.
12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkPermission(String permission, int pid, int uid);
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC you are handling has been
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is basically the same as calling
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkPermission(String, int, int)} with the pid and uid returned
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by {@link android.os.Binder#getCallingPid} and
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.os.Binder#getCallingUid}.  One important difference
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is that if you are not currently processing an IPC, this function
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.  This is done to protect against accidentally
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to avoid this protection.
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission
12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingPermission(String permission);
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> have been
13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission.  This is the same as
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingPermission}, except it grants your own permissions
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed that permission, or
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see PackageManager#checkPermission(String, String)
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfPermission(String permission);
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the given permission is not allowed for a particular process
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and user ID running in the system, throw a {@link SecurityException}.
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkPermission(String, int, int)
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforcePermission(
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, int pid, int uid, String message);
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC you are handling has not been
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted a particular permission, throw a {@link
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforcePermission(String, int, int, String)} with the
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid and uid returned by {@link android.os.Binder#getCallingPid}
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and {@link android.os.Binder#getCallingUid}.  One important
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * difference is that if you are not currently processing an IPC,
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function will always throw the SecurityException.  This is
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * done to protect against accidentally leaking permissions; you
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can use {@link #enforceCallingOrSelfPermission} to avoid this
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * protection.
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingPermission(String)
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingPermission(
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If neither you nor the calling process of an IPC you are
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * handling has been granted a particular permission, throw a
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link SecurityException}.  This is the same as {@link
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingPermission}, except it grants your own
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param permission The name of the permission being checked.
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfPermission(String)
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfPermission(
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String permission, String message);
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Grant permission to access a specific Uri to another package, regardless
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of whether that package has general permission to access the Uri's
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * content provider.  This can be used to grant specific, temporary
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions, typically in response to user interaction (such as the
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user opening an attachment that you would like someone else to
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * display).
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start an activity instead of this function directly.  If you use this
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * function directly, you should be sure to call
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #revokeUriPermission} when the target should no longer be allowed
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to access it.
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>To succeed, the content provider owning the Uri must have set the
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * grantUriPermissions} attribute in its manifest or included the
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.styleable#AndroidManifestGrantUriPermission
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;grant-uri-permissions&gt;} tag.
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param toPackage The package you would like to allow to access the Uri.
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to grant access to.
13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #revokeUriPermission
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void grantUriPermission(String toPackage, Uri uri,
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int modeFlags);
14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Remove all permissions to access a particular content provider Uri
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that were previously added with {@link #grantUriPermission}.  The given
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Uri will match all previously granted Uris that are the same or a
14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * sub-path of the given Uri.  That is, revoking "content://foo/one" will
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * revoke both "content://foo/target" and "content://foo/target/sub", but not
14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "content://foo".
14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri you would like to revoke access to.
14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The desired access modes.  Any combination of
14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #grantUriPermission
14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void revokeUriPermission(Uri uri, int modeFlags);
14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether a particular process and user ID has been granted
14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This only checks for permissions
14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have been explicitly granted -- if the given process/uid has
14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * more general access to the URI's content provider then this check will
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * always fail.
14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * pid/uid is allowed to access that uri, or
14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process and user ID has been
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI.  This is basically
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the same as calling {@link #checkUriPermission(Uri, int, int,
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * int)} with the pid and uid returned by {@link
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Determine whether the calling process of an IPC <em>or you</em> has been granted
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI.  This is the same as
14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #checkCallingUriPermission}, except it grants your own permissions
14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * if you are not currently processing an IPC.  Use with care!
14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri, or
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Check both a Uri and normal permission.  This allows you to perform
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #checkPermission} and {@link #checkUriPermission} in one
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is allowed to access that uri or holds one of the given permissions, or
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link PackageManager#PERMISSION_DENIED} if it is not.
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int checkUriPermission(Uri uri, String readPermission,
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String writePermission, int pid, int uid, int modeFlags);
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If a particular process and user ID has not been granted
15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This only checks for permissions that have
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * been explicitly granted -- if the given process/uid has more
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * general access to the URI's content provider then this check
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always fail.
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, int, int, int)
15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int pid, int uid, int modeFlags, String message);
15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process and user ID has not been granted
15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permission to access a specific URI, throw {@link
15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is basically the same as calling
15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #enforceUriPermission(Uri, int, int, int, String)} with
15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the pid and uid returned by {@link
15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingPid} and {@link
15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * android.os.Binder#getCallingUid}.  One important difference is
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that if you are not currently processing an IPC, this function
15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will always throw a SecurityException.
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingUriPermission(Uri, int)
15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingUriPermission(
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If the calling process of an IPC <em>or you</em> has not been
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * granted permission to access a specific URI, throw {@link
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SecurityException}.  This is the same as {@link
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * #enforceCallingUriPermission}, except it grants your own
15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * permissions if you are not currently processing an IPC.  Use
15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with care!
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The uri that is being checked.
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkCallingOrSelfUriPermission(Uri, int)
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceCallingOrSelfUriPermission(
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, int modeFlags, String message);
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Enforce both a Uri and normal permission.  This allows you to perform
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call.
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uri The Uri whose permission is to be checked, or null to not
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * do this check.
15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param readPermission The permission that provides overall read access,
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or null to not do this check.
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param writePermission The permission that provides overall write
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * acess, or null to not do this check.
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pid The process ID being checked against.  Must be &gt; 0.
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param uid The user ID being checked against.  A uid of 0 is the root
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user, which will pass every permission check.
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param modeFlags The type of access to grant.  May be one or both of
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param message A message to include in the exception if it is thrown.
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #checkUriPermission(Uri, String, String, int, int, int)
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void enforceUriPermission(
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Uri uri, String readPermission, String writePermission,
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int pid, int uid, int modeFlags, String message);
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: include the application
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * code with the context.  This means loading code into the caller's
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * process, so that {@link #getClassLoader()} can be used to instantiate
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the application's classes.  Setting this flags imposes security
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on what application context you can access; if the
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requested application can not be safely loaded into your process,
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * java.lang.SecurityException will be thrown.  If this flag is not set,
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * there will be no restrictions on the packages that can be loaded,
16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but {@link #getClassLoader} will always return the default system
16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class loader.
16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #createPackageContext}: ignore any security
16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * restrictions on the Context being requested, allowing it to always
16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to be loaded into a process even when it isn't safe to do so.  Use
16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with extreme care!
16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a new Context object for the given application name.  This
16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Context is the same as what the named application gets when it is
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * launched, containing the same resources and class loader.  Each call to
16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this method returns a new instance of a Context object; Context objects
16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are not shared, however they share common state (Resources, ClassLoader,
16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * etc) so the Context instance itself is fairly lightweight.
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * application with the given package name.
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>Throws {@link java.lang.SecurityException} if the Context requested
16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can not be loaded into the caller's process for security reasons (see
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #CONTEXT_INCLUDE_CODE} for more information}.
16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName Name of the application's package.
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *              or {@link #CONTEXT_IGNORE_SECURITY}.
16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A Context for the application.
16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws java.lang.SecurityException
16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws PackageManager.NameNotFoundException if there is no application with
16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given package name
16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Context createPackageContext(String packageName,
16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int flags) throws PackageManager.NameNotFoundException;
16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1655