• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.content;
18 
19 import android.content.pm.ApplicationInfo;
20 import android.content.pm.PackageManager;
21 import android.content.res.AssetManager;
22 import android.content.res.Resources;
23 import android.content.res.TypedArray;
24 import android.database.sqlite.SQLiteDatabase;
25 import android.database.sqlite.SQLiteDatabase.CursorFactory;
26 import android.graphics.Bitmap;
27 import android.graphics.drawable.Drawable;
28 import android.net.Uri;
29 import android.os.Bundle;
30 import android.os.Handler;
31 import android.os.Looper;
32 import android.util.AttributeSet;
33 
34 import java.io.File;
35 import java.io.FileInputStream;
36 import java.io.FileNotFoundException;
37 import java.io.FileOutputStream;
38 import java.io.IOException;
39 import java.io.InputStream;
40 
41 /**
42  * Interface to global information about an application environment.  This is
43  * an abstract class whose implementation is provided by
44  * the Android system.  It
45  * allows access to application-specific resources and classes, as well as
46  * up-calls for application-level operations such as launching activities,
47  * broadcasting and receiving intents, etc.
48  */
49 public abstract class Context {
50     /**
51      * File creation mode: the default mode, where the created file can only
52      * be accessed by the calling application (or all applications sharing the
53      * same user ID).
54      * @see #MODE_WORLD_READABLE
55      * @see #MODE_WORLD_WRITEABLE
56      */
57     public static final int MODE_PRIVATE = 0x0000;
58     /**
59      * File creation mode: allow all other applications to have read access
60      * to the created file.
61      * @see #MODE_PRIVATE
62      * @see #MODE_WORLD_WRITEABLE
63      */
64     public static final int MODE_WORLD_READABLE = 0x0001;
65     /**
66      * File creation mode: allow all other applications to have write access
67      * to the created file.
68      * @see #MODE_PRIVATE
69      * @see #MODE_WORLD_READABLE
70      */
71     public static final int MODE_WORLD_WRITEABLE = 0x0002;
72     /**
73      * File creation mode: for use with {@link #openFileOutput}, if the file
74      * already exists then write data to the end of the existing file
75      * instead of erasing it.
76      * @see #openFileOutput
77      */
78     public static final int MODE_APPEND = 0x8000;
79 
80     /**
81      * Flag for {@link #bindService}: automatically create the service as long
82      * as the binding exists.  Note that while this will create the service,
83      * its {@link android.app.Service#onStart} method will still only be called due to an
84      * explicit call to {@link #startService}.  Even without that, though,
85      * this still provides you with access to the service object while the
86      * service is created.
87      *
88      * <p>Specifying this flag also tells the system to treat the service
89      * as being as important as your own process -- that is, when deciding
90      * which process should be killed to free memory, the service will only
91      * be considered a candidate as long as the processes of any such bindings
92      * is also a candidate to be killed.  This is to avoid situations where
93      * the service is being continually created and killed due to low memory.
94      */
95     public static final int BIND_AUTO_CREATE = 0x0001;
96 
97     /**
98      * Flag for {@link #bindService}: include debugging help for mismatched
99      * calls to unbind.  When this flag is set, the callstack of the following
100      * {@link #unbindService} call is retained, to be printed if a later
101      * incorrect unbind call is made.  Note that doing this requires retaining
102      * information about the binding that was made for the lifetime of the app,
103      * resulting in a leak -- this should only be used for debugging.
104      */
105     public static final int BIND_DEBUG_UNBIND = 0x0002;
106 
107     /** Return an AssetManager instance for your application's package. */
getAssets()108     public abstract AssetManager getAssets();
109 
110     /** Return a Resources instance for your application's package. */
getResources()111     public abstract Resources getResources();
112 
113     /** Return PackageManager instance to find global package information. */
getPackageManager()114     public abstract PackageManager getPackageManager();
115 
116     /** Return a ContentResolver instance for your application's package. */
getContentResolver()117     public abstract ContentResolver getContentResolver();
118 
119     /**
120      * Return the Looper for the main thread of the current process.  This is
121      * the thread used to dispatch calls to application components (activities,
122      * services, etc).
123      */
getMainLooper()124     public abstract Looper getMainLooper();
125 
126     /**
127      * Return the context of the single, global Application object of the
128      * current process.
129      */
getApplicationContext()130     public abstract Context getApplicationContext();
131 
132     /**
133      * Return a localized, styled CharSequence from the application's package's
134      * default string table.
135      *
136      * @param resId Resource id for the CharSequence text
137      */
getText(int resId)138     public final CharSequence getText(int resId) {
139         return getResources().getText(resId);
140     }
141 
142     /**
143      * Return a localized string from the application's package's
144      * default string table.
145      *
146      * @param resId Resource id for the string
147      */
getString(int resId)148     public final String getString(int resId) {
149         return getResources().getString(resId);
150     }
151 
152     /**
153      * Return a localized formatted string from the application's package's
154      * default string table, substituting the format arguments as defined in
155      * {@link java.util.Formatter} and {@link java.lang.String#format}.
156      *
157      * @param resId Resource id for the format string
158      * @param formatArgs The format arguments that will be used for substitution.
159      */
160 
getString(int resId, Object... formatArgs)161     public final String getString(int resId, Object... formatArgs) {
162         return getResources().getString(resId, formatArgs);
163     }
164 
165      /**
166      * Set the base theme for this context.  Note that this should be called
167      * before any views are instantiated in the Context (for example before
168      * calling {@link android.app.Activity#setContentView} or
169      * {@link android.view.LayoutInflater#inflate}).
170      *
171      * @param resid The style resource describing the theme.
172      */
setTheme(int resid)173     public abstract void setTheme(int resid);
174 
175     /**
176      * Return the Theme object associated with this Context.
177      */
getTheme()178     public abstract Resources.Theme getTheme();
179 
180     /**
181      * Retrieve styled attribute information in this Context's theme.  See
182      * {@link Resources.Theme#obtainStyledAttributes(int[])}
183      * for more information.
184      *
185      * @see Resources.Theme#obtainStyledAttributes(int[])
186      */
obtainStyledAttributes( int[] attrs)187     public final TypedArray obtainStyledAttributes(
188             int[] attrs) {
189         return getTheme().obtainStyledAttributes(attrs);
190     }
191 
192     /**
193      * Retrieve styled attribute information in this Context's theme.  See
194      * {@link Resources.Theme#obtainStyledAttributes(int, int[])}
195      * for more information.
196      *
197      * @see Resources.Theme#obtainStyledAttributes(int, int[])
198      */
obtainStyledAttributes( int resid, int[] attrs)199     public final TypedArray obtainStyledAttributes(
200             int resid, int[] attrs) throws Resources.NotFoundException {
201         return getTheme().obtainStyledAttributes(resid, attrs);
202     }
203 
204     /**
205      * Retrieve styled attribute information in this Context's theme.  See
206      * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
207      * for more information.
208      *
209      * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
210      */
obtainStyledAttributes( AttributeSet set, int[] attrs)211     public final TypedArray obtainStyledAttributes(
212             AttributeSet set, int[] attrs) {
213         return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
214     }
215 
216     /**
217      * Retrieve styled attribute information in this Context's theme.  See
218      * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
219      * for more information.
220      *
221      * @see Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
222      */
obtainStyledAttributes( AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)223     public final TypedArray obtainStyledAttributes(
224             AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
225         return getTheme().obtainStyledAttributes(
226             set, attrs, defStyleAttr, defStyleRes);
227     }
228 
229     /**
230      * Return a class loader you can use to retrieve classes in this package.
231      */
getClassLoader()232     public abstract ClassLoader getClassLoader();
233 
234     /** Return the name of this application's package. */
getPackageName()235     public abstract String getPackageName();
236 
237     /** Return the full application info for this context's package. */
getApplicationInfo()238     public abstract ApplicationInfo getApplicationInfo();
239 
240     /**
241      * {@hide}
242      * Return the full path to this context's resource files.  This is the ZIP files
243      * containing the application's resources.
244      *
245      * <p>Note: this is not generally useful for applications, since they should
246      * not be directly accessing the file system.
247      *
248      *
249      * @return String Path to the resources.
250      */
getPackageResourcePath()251     public abstract String getPackageResourcePath();
252 
253     /**
254      * {@hide}
255      * Return the full path to this context's code and asset files.  This is the ZIP files
256      * containing the application's code and assets.
257      *
258      * <p>Note: this is not generally useful for applications, since they should
259      * not be directly accessing the file system.
260      *
261      * @return String Path to the code and assets.
262      */
getPackageCodePath()263     public abstract String getPackageCodePath();
264 
265     /**
266      * {@hide}
267      * Return the full path to the shared prefs file for the given prefs group name.
268      *
269      * <p>Note: this is not generally useful for applications, since they should
270      * not be directly accessing the file system.
271      */
getSharedPrefsFile(String name)272     public abstract File getSharedPrefsFile(String name);
273 
274     /**
275      * Retrieve and hold the contents of the preferences file 'name', returning
276      * a SharedPreferences through which you can retrieve and modify its
277      * values.  Only one instance of the SharedPreferences object is returned
278      * to any callers for the same name, meaning they will see each other's
279      * edits as soon as they are made.
280      *
281      * @param name Desired preferences file. If a preferences file by this name
282      * does not exist, it will be created when you retrieve an
283      * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()).
284      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
285      * default operation, {@link #MODE_WORLD_READABLE}
286      * and {@link #MODE_WORLD_WRITEABLE} to control permissions.
287      *
288      * @return Returns the single SharedPreferences instance that can be used
289      *         to retrieve and modify the preference values.
290      *
291      * @see #MODE_PRIVATE
292      * @see #MODE_WORLD_READABLE
293      * @see #MODE_WORLD_WRITEABLE
294      */
getSharedPreferences(String name, int mode)295     public abstract SharedPreferences getSharedPreferences(String name,
296             int mode);
297 
298     /**
299      * Open a private file associated with this Context's application package
300      * for reading.
301      *
302      * @param name The name of the file to open; can not contain path
303      *             separators.
304      *
305      * @return FileInputStream Resulting input stream.
306      *
307      * @see #openFileOutput
308      * @see #fileList
309      * @see #deleteFile
310      * @see java.io.FileInputStream#FileInputStream(String)
311      */
openFileInput(String name)312     public abstract FileInputStream openFileInput(String name)
313         throws FileNotFoundException;
314 
315     /**
316      * Open a private file associated with this Context's application package
317      * for writing.  Creates the file if it doesn't already exist.
318      *
319      * @param name The name of the file to open; can not contain path
320      *             separators.
321      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
322      * default operation, {@link #MODE_APPEND} to append to an existing file,
323      * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
324      * permissions.
325      *
326      * @return FileOutputStream Resulting output stream.
327      *
328      * @see #MODE_APPEND
329      * @see #MODE_PRIVATE
330      * @see #MODE_WORLD_READABLE
331      * @see #MODE_WORLD_WRITEABLE
332      * @see #openFileInput
333      * @see #fileList
334      * @see #deleteFile
335      * @see java.io.FileOutputStream#FileOutputStream(String)
336      */
openFileOutput(String name, int mode)337     public abstract FileOutputStream openFileOutput(String name, int mode)
338         throws FileNotFoundException;
339 
340     /**
341      * Delete the given private file associated with this Context's
342      * application package.
343      *
344      * @param name The name of the file to delete; can not contain path
345      *             separators.
346      *
347      * @return True if the file was successfully deleted; else
348      *         false.
349      *
350      * @see #openFileInput
351      * @see #openFileOutput
352      * @see #fileList
353      * @see java.io.File#delete()
354      */
deleteFile(String name)355     public abstract boolean deleteFile(String name);
356 
357     /**
358      * Returns the absolute path on the filesystem where a file created with
359      * {@link #openFileOutput} is stored.
360      *
361      * @param name The name of the file for which you would like to get
362      *          its path.
363      *
364      * @return Returns an absolute path to the given file.
365      *
366      * @see #openFileOutput
367      * @see #getFilesDir
368      * @see #getDir
369      */
getFileStreamPath(String name)370     public abstract File getFileStreamPath(String name);
371 
372     /**
373      * Returns the absolute path to the directory on the filesystem where
374      * files created with {@link #openFileOutput} are stored.
375      *
376      * @return Returns the path of the directory holding application files.
377      *
378      * @see #openFileOutput
379      * @see #getFileStreamPath
380      * @see #getDir
381      */
getFilesDir()382     public abstract File getFilesDir();
383 
384     /**
385      * Returns the absolute path to the application specific cache directory
386      * on the filesystem. These files will be ones that get deleted first when the
387      * device runs low on storage
388      * There is no guarantee when these files will be deleted.
389      *
390      * @return Returns the path of the directory holding application cache files.
391      *
392      * @see #openFileOutput
393      * @see #getFileStreamPath
394      * @see #getDir
395      */
getCacheDir()396     public abstract File getCacheDir();
397 
398     /**
399      * Returns an array of strings naming the private files associated with
400      * this Context's application package.
401      *
402      * @return Array of strings naming the private files.
403      *
404      * @see #openFileInput
405      * @see #openFileOutput
406      * @see #deleteFile
407      */
fileList()408     public abstract String[] fileList();
409 
410     /**
411      * Retrieve, creating if needed, a new directory in which the application
412      * can place its own custom data files.  You can use the returned File
413      * object to create and access files in this directory.  Note that files
414      * created through a File object will only be accessible by your own
415      * application; you can only set the mode of the entire directory, not
416      * of individual files.
417      *
418      * @param name Name of the directory to retrieve.  This is a directory
419      * that is created as part of your application data.
420      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
421      * default operation, {@link #MODE_WORLD_READABLE} and
422      * {@link #MODE_WORLD_WRITEABLE} to control permissions.
423      *
424      * @return Returns a File object for the requested directory.  The directory
425      * will have been created if it does not already exist.
426      *
427      * @see #openFileOutput(String, int)
428      */
getDir(String name, int mode)429     public abstract File getDir(String name, int mode);
430 
431     /**
432      * Open a new private SQLiteDatabase associated with this Context's
433      * application package.  Create the database file if it doesn't exist.
434      *
435      * @param name The name (unique in the application package) of the database.
436      * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
437      *     default operation, {@link #MODE_WORLD_READABLE}
438      *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
439      * @param factory An optional factory class that is called to instantiate a
440      *     cursor when query is called.
441      *
442      * @return The contents of a newly created database with the given name.
443      * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
444      *
445      * @see #MODE_PRIVATE
446      * @see #MODE_WORLD_READABLE
447      * @see #MODE_WORLD_WRITEABLE
448      * @see #deleteDatabase
449      */
openOrCreateDatabase(String name, int mode, CursorFactory factory)450     public abstract SQLiteDatabase openOrCreateDatabase(String name,
451             int mode, CursorFactory factory);
452 
453     /**
454      * Delete an existing private SQLiteDatabase associated with this Context's
455      * application package.
456      *
457      * @param name The name (unique in the application package) of the
458      *             database.
459      *
460      * @return True if the database was successfully deleted; else false.
461      *
462      * @see #openOrCreateDatabase
463      */
deleteDatabase(String name)464     public abstract boolean deleteDatabase(String name);
465 
466     /**
467      * Returns the absolute path on the filesystem where a database created with
468      * {@link #openOrCreateDatabase} is stored.
469      *
470      * @param name The name of the database for which you would like to get
471      *          its path.
472      *
473      * @return Returns an absolute path to the given database.
474      *
475      * @see #openOrCreateDatabase
476      */
getDatabasePath(String name)477     public abstract File getDatabasePath(String name);
478 
479     /**
480      * Returns an array of strings naming the private databases associated with
481      * this Context's application package.
482      *
483      * @return Array of strings naming the private databases.
484      *
485      * @see #openOrCreateDatabase
486      * @see #deleteDatabase
487      */
databaseList()488     public abstract String[] databaseList();
489 
490     /**
491      * @deprecated Use {@link android.app.WallpaperManager#getDrawable
492      * WallpaperManager.get()} instead.
493      */
494     @Deprecated
getWallpaper()495     public abstract Drawable getWallpaper();
496 
497     /**
498      * @deprecated Use {@link android.app.WallpaperManager#peekDrawable
499      * WallpaperManager.peek()} instead.
500      */
501     @Deprecated
peekWallpaper()502     public abstract Drawable peekWallpaper();
503 
504     /**
505      * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumWidth()
506      * WallpaperManager.getDesiredMinimumWidth()} instead.
507      */
508     @Deprecated
getWallpaperDesiredMinimumWidth()509     public abstract int getWallpaperDesiredMinimumWidth();
510 
511     /**
512      * @deprecated Use {@link android.app.WallpaperManager#getDesiredMinimumHeight()
513      * WallpaperManager.getDesiredMinimumHeight()} instead.
514      */
515     @Deprecated
getWallpaperDesiredMinimumHeight()516     public abstract int getWallpaperDesiredMinimumHeight();
517 
518     /**
519      * @deprecated Use {@link android.app.WallpaperManager#setBitmap(Bitmap)
520      * WallpaperManager.set()} instead.
521      */
522     @Deprecated
setWallpaper(Bitmap bitmap)523     public abstract void setWallpaper(Bitmap bitmap) throws IOException;
524 
525     /**
526      * @deprecated Use {@link android.app.WallpaperManager#setStream(InputStream)
527      * WallpaperManager.set()} instead.
528      */
529     @Deprecated
setWallpaper(InputStream data)530     public abstract void setWallpaper(InputStream data) throws IOException;
531 
532     /**
533      * @deprecated Use {@link android.app.WallpaperManager#clear
534      * WallpaperManager.clear()} instead.
535      */
536     @Deprecated
clearWallpaper()537     public abstract void clearWallpaper() throws IOException;
538 
539     /**
540      * Launch a new activity.  You will not receive any information about when
541      * the activity exits.
542      *
543      * <p>Note that if this method is being called from outside of an
544      * {@link android.app.Activity} Context, then the Intent must include
545      * the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag.  This is because,
546      * without being started from an existing Activity, there is no existing
547      * task in which to place the new activity and thus it needs to be placed
548      * in its own separate task.
549      *
550      * <p>This method throws {@link ActivityNotFoundException}
551      * if there was no Activity found to run the given Intent.
552      *
553      * @param intent The description of the activity to start.
554      *
555      * @throws ActivityNotFoundException
556      *
557      * @see PackageManager#resolveActivity
558      */
startActivity(Intent intent)559     public abstract void startActivity(Intent intent);
560 
561     /**
562      * Like {@link #startActivity(Intent)}, but taking a IntentSender
563      * to start.  If the IntentSender is for an activity, that activity will be started
564      * as if you had called the regular {@link #startActivity(Intent)}
565      * here; otherwise, its associated action will be executed (such as
566      * sending a broadcast) as if you had called
567      * {@link IntentSender#sendIntent IntentSender.sendIntent} on it.
568      *
569      * @param intent The IntentSender to launch.
570      * @param fillInIntent If non-null, this will be provided as the
571      * intent parameter to {@link IntentSender#sendIntent}.
572      * @param flagsMask Intent flags in the original IntentSender that you
573      * would like to change.
574      * @param flagsValues Desired values for any bits set in
575      * <var>flagsMask</var>
576      * @param extraFlags Always set to 0.
577      */
startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)578     public abstract void startIntentSender(IntentSender intent,
579             Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
580             throws IntentSender.SendIntentException;
581 
582     /**
583      * Broadcast the given intent to all interested BroadcastReceivers.  This
584      * call is asynchronous; it returns immediately, and you will continue
585      * executing while the receivers are run.  No results are propagated from
586      * receivers and receivers can not abort the broadcast. If you want
587      * to allow receivers to propagate results or abort the broadcast, you must
588      * send an ordered broadcast using
589      * {@link #sendOrderedBroadcast(Intent, String)}.
590      *
591      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
592      *
593      * @param intent The Intent to broadcast; all receivers matching this
594      *               Intent will receive the broadcast.
595      *
596      * @see android.content.BroadcastReceiver
597      * @see #registerReceiver
598      * @see #sendBroadcast(Intent, String)
599      * @see #sendOrderedBroadcast(Intent, String)
600      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
601      */
sendBroadcast(Intent intent)602     public abstract void sendBroadcast(Intent intent);
603 
604     /**
605      * Broadcast the given intent to all interested BroadcastReceivers, allowing
606      * an optional required permission to be enforced.  This
607      * call is asynchronous; it returns immediately, and you will continue
608      * executing while the receivers are run.  No results are propagated from
609      * receivers and receivers can not abort the broadcast. If you want
610      * to allow receivers to propagate results or abort the broadcast, you must
611      * send an ordered broadcast using
612      * {@link #sendOrderedBroadcast(Intent, String)}.
613      *
614      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
615      *
616      * @param intent The Intent to broadcast; all receivers matching this
617      *               Intent will receive the broadcast.
618      * @param receiverPermission (optional) String naming a permissions that
619      *               a receiver must hold in order to receive your broadcast.
620      *               If null, no permission is required.
621      *
622      * @see android.content.BroadcastReceiver
623      * @see #registerReceiver
624      * @see #sendBroadcast(Intent)
625      * @see #sendOrderedBroadcast(Intent, String)
626      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
627      */
sendBroadcast(Intent intent, String receiverPermission)628     public abstract void sendBroadcast(Intent intent,
629             String receiverPermission);
630 
631     /**
632      * Broadcast the given intent to all interested BroadcastReceivers, delivering
633      * them one at a time to allow more preferred receivers to consume the
634      * broadcast before it is delivered to less preferred receivers.  This
635      * call is asynchronous; it returns immediately, and you will continue
636      * executing while the receivers are run.
637      *
638      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
639      *
640      * @param intent The Intent to broadcast; all receivers matching this
641      *               Intent will receive the broadcast.
642      * @param receiverPermission (optional) String naming a permissions that
643      *               a receiver must hold in order to receive your broadcast.
644      *               If null, no permission is required.
645      *
646      * @see android.content.BroadcastReceiver
647      * @see #registerReceiver
648      * @see #sendBroadcast(Intent)
649      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
650      */
sendOrderedBroadcast(Intent intent, String receiverPermission)651     public abstract void sendOrderedBroadcast(Intent intent,
652             String receiverPermission);
653 
654     /**
655      * Version of {@link #sendBroadcast(Intent)} that allows you to
656      * receive data back from the broadcast.  This is accomplished by
657      * supplying your own BroadcastReceiver when calling, which will be
658      * treated as a final receiver at the end of the broadcast -- its
659      * {@link BroadcastReceiver#onReceive} method will be called with
660      * the result values collected from the other receivers.  The broadcast will
661      * be serialized in the same way as calling
662      * {@link #sendOrderedBroadcast(Intent, String)}.
663      *
664      * <p>Like {@link #sendBroadcast(Intent)}, this method is
665      * asynchronous; it will return before
666      * resultReceiver.onReceive() is called.
667      *
668      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
669      *
670      * @param intent The Intent to broadcast; all receivers matching this
671      *               Intent will receive the broadcast.
672      * @param receiverPermission String naming a permissions that
673      *               a receiver must hold in order to receive your broadcast.
674      *               If null, no permission is required.
675      * @param resultReceiver Your own BroadcastReceiver to treat as the final
676      *                       receiver of the broadcast.
677      * @param scheduler A custom Handler with which to schedule the
678      *                  resultReceiver callback; if null it will be
679      *                  scheduled in the Context's main thread.
680      * @param initialCode An initial value for the result code.  Often
681      *                    Activity.RESULT_OK.
682      * @param initialData An initial value for the result data.  Often
683      *                    null.
684      * @param initialExtras An initial value for the result extras.  Often
685      *                      null.
686      *
687      * @see #sendBroadcast(Intent)
688      * @see #sendBroadcast(Intent, String)
689      * @see #sendOrderedBroadcast(Intent, String)
690      * @see #sendStickyBroadcast(Intent)
691      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
692      * @see android.content.BroadcastReceiver
693      * @see #registerReceiver
694      * @see android.app.Activity#RESULT_OK
695      */
sendOrderedBroadcast(Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)696     public abstract void sendOrderedBroadcast(Intent intent,
697             String receiverPermission, BroadcastReceiver resultReceiver,
698             Handler scheduler, int initialCode, String initialData,
699             Bundle initialExtras);
700 
701     /**
702      * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
703      * Intent you are sending stays around after the broadcast is complete,
704      * so that others can quickly retrieve that data through the return
705      * value of {@link #registerReceiver(BroadcastReceiver, IntentFilter)}.  In
706      * all other ways, this behaves the same as
707      * {@link #sendBroadcast(Intent)}.
708      *
709      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
710      * permission in order to use this API.  If you do not hold that
711      * permission, {@link SecurityException} will be thrown.
712      *
713      * @param intent The Intent to broadcast; all receivers matching this
714      * Intent will receive the broadcast, and the Intent will be held to
715      * be re-broadcast to future receivers.
716      *
717      * @see #sendBroadcast(Intent)
718      * @see #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
719      */
sendStickyBroadcast(Intent intent)720     public abstract void sendStickyBroadcast(Intent intent);
721 
722     /**
723      * Version of {@link #sendStickyBroadcast} that allows you to
724      * receive data back from the broadcast.  This is accomplished by
725      * supplying your own BroadcastReceiver when calling, which will be
726      * treated as a final receiver at the end of the broadcast -- its
727      * {@link BroadcastReceiver#onReceive} method will be called with
728      * the result values collected from the other receivers.  The broadcast will
729      * be serialized in the same way as calling
730      * {@link #sendOrderedBroadcast(Intent, String)}.
731      *
732      * <p>Like {@link #sendBroadcast(Intent)}, this method is
733      * asynchronous; it will return before
734      * resultReceiver.onReceive() is called.  Note that the sticky data
735      * stored is only the data you initially supply to the broadcast, not
736      * the result of any changes made by the receivers.
737      *
738      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
739      *
740      * @param intent The Intent to broadcast; all receivers matching this
741      *               Intent will receive the broadcast.
742      * @param resultReceiver Your own BroadcastReceiver to treat as the final
743      *                       receiver of the broadcast.
744      * @param scheduler A custom Handler with which to schedule the
745      *                  resultReceiver callback; if null it will be
746      *                  scheduled in the Context's main thread.
747      * @param initialCode An initial value for the result code.  Often
748      *                    Activity.RESULT_OK.
749      * @param initialData An initial value for the result data.  Often
750      *                    null.
751      * @param initialExtras An initial value for the result extras.  Often
752      *                      null.
753      *
754      * @see #sendBroadcast(Intent)
755      * @see #sendBroadcast(Intent, String)
756      * @see #sendOrderedBroadcast(Intent, String)
757      * @see #sendStickyBroadcast(Intent)
758      * @see android.content.BroadcastReceiver
759      * @see #registerReceiver
760      * @see android.app.Activity#RESULT_OK
761      */
sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)762     public abstract void sendStickyOrderedBroadcast(Intent intent,
763             BroadcastReceiver resultReceiver,
764             Handler scheduler, int initialCode, String initialData,
765             Bundle initialExtras);
766 
767 
768     /**
769      * Remove the data previously sent with {@link #sendStickyBroadcast},
770      * so that it is as if the sticky broadcast had never happened.
771      *
772      * <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
773      * permission in order to use this API.  If you do not hold that
774      * permission, {@link SecurityException} will be thrown.
775      *
776      * @param intent The Intent that was previously broadcast.
777      *
778      * @see #sendStickyBroadcast
779      */
removeStickyBroadcast(Intent intent)780     public abstract void removeStickyBroadcast(Intent intent);
781 
782     /**
783      * Register a BroadcastReceiver to be run in the main activity thread.  The
784      * <var>receiver</var> will be called with any broadcast Intent that
785      * matches <var>filter</var>, in the main application thread.
786      *
787      * <p>The system may broadcast Intents that are "sticky" -- these stay
788      * around after the broadcast as finished, to be sent to any later
789      * registrations. If your IntentFilter matches one of these sticky
790      * Intents, that Intent will be returned by this function
791      * <strong>and</strong> sent to your <var>receiver</var> as if it had just
792      * been broadcast.
793      *
794      * <p>There may be multiple sticky Intents that match <var>filter</var>,
795      * in which case each of these will be sent to <var>receiver</var>.  In
796      * this case, only one of these can be returned directly by the function;
797      * which of these that is returned is arbitrarily decided by the system.
798      *
799      * <p>If you know the Intent your are registering for is sticky, you can
800      * supply null for your <var>receiver</var>.  In this case, no receiver is
801      * registered -- the function simply returns the sticky Intent that
802      * matches <var>filter</var>.  In the case of multiple matches, the same
803      * rules as described above apply.
804      *
805      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
806      *
807      * <p class="note">Note: this method <em>cannot be called from a
808      * {@link BroadcastReceiver} component;</em> that is, from a BroadcastReceiver
809      * that is declared in an application's manifest.  It is okay, however, to call
810      * this method from another BroadcastReceiver that has itself been registered
811      * at run time with {@link #registerReceiver}, since the lifetime of such a
812      * registered BroadcastReceiver is tied to the object that registered it.</p>
813      *
814      * @param receiver The BroadcastReceiver to handle the broadcast.
815      * @param filter Selects the Intent broadcasts to be received.
816      *
817      * @return The first sticky intent found that matches <var>filter</var>,
818      *         or null if there are none.
819      *
820      * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
821      * @see #sendBroadcast
822      * @see #unregisterReceiver
823      */
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)824     public abstract Intent registerReceiver(BroadcastReceiver receiver,
825                                             IntentFilter filter);
826 
827     /**
828      * Register to receive intent broadcasts, to run in the context of
829      * <var>scheduler</var>.  See
830      * {@link #registerReceiver(BroadcastReceiver, IntentFilter)} for more
831      * information.  This allows you to enforce permissions on who can
832      * broadcast intents to your receiver, or have the receiver run in
833      * a different thread than the main application thread.
834      *
835      * <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
836      *
837      * @param receiver The BroadcastReceiver to handle the broadcast.
838      * @param filter Selects the Intent broadcasts to be received.
839      * @param broadcastPermission String naming a permissions that a
840      *      broadcaster must hold in order to send an Intent to you.  If null,
841      *      no permission is required.
842      * @param scheduler Handler identifying the thread that will receive
843      *      the Intent.  If null, the main thread of the process will be used.
844      *
845      * @return The first sticky intent found that matches <var>filter</var>,
846      *         or null if there are none.
847      *
848      * @see #registerReceiver(BroadcastReceiver, IntentFilter)
849      * @see #sendBroadcast
850      * @see #unregisterReceiver
851      */
registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)852     public abstract Intent registerReceiver(BroadcastReceiver receiver,
853                                             IntentFilter filter,
854                                             String broadcastPermission,
855                                             Handler scheduler);
856 
857     /**
858      * Unregister a previously registered BroadcastReceiver.  <em>All</em>
859      * filters that have been registered for this BroadcastReceiver will be
860      * removed.
861      *
862      * @param receiver The BroadcastReceiver to unregister.
863      *
864      * @see #registerReceiver
865      */
unregisterReceiver(BroadcastReceiver receiver)866     public abstract void unregisterReceiver(BroadcastReceiver receiver);
867 
868     /**
869      * Request that a given application service be started.  The Intent
870      * can either contain the complete class name of a specific service
871      * implementation to start, or an abstract definition through the
872      * action and other fields of the kind of service to start.  If this service
873      * is not already running, it will be instantiated and started (creating a
874      * process for it if needed); if it is running then it remains running.
875      *
876      * <p>Every call to this method will result in a corresponding call to
877      * the target service's {@link android.app.Service#onStart} method,
878      * with the <var>intent</var> given here.  This provides a convenient way
879      * to submit jobs to a service without having to bind and call on to its
880      * interface.
881      *
882      * <p>Using startService() overrides the default service lifetime that is
883      * managed by {@link #bindService}: it requires the service to remain
884      * running until {@link #stopService} is called, regardless of whether
885      * any clients are connected to it.  Note that calls to startService()
886      * are not nesting: no matter how many times you call startService(),
887      * a single call to {@link #stopService} will stop it.
888      *
889      * <p>The system attempts to keep running services around as much as
890      * possible.  The only time they should be stopped is if the current
891      * foreground application is using so many resources that the service needs
892      * to be killed.  If any errors happen in the service's process, it will
893      * automatically be restarted.
894      *
895      * <p>This function will throw {@link SecurityException} if you do not
896      * have permission to start the given service.
897      *
898      * @param service Identifies the service to be started.  The Intent may
899      *      specify either an explicit component name to start, or a logical
900      *      description (action, category, etc) to match an
901      *      {@link IntentFilter} published by a service.  Additional values
902      *      may be included in the Intent extras to supply arguments along with
903      *      this specific start call.
904      *
905      * @return If the service is being started or is already running, the
906      * {@link ComponentName} of the actual service that was started is
907      * returned; else if the service does not exist null is returned.
908      *
909      * @throws SecurityException
910      *
911      * @see #stopService
912      * @see #bindService
913      */
startService(Intent service)914     public abstract ComponentName startService(Intent service);
915 
916     /**
917      * Request that a given application service be stopped.  If the service is
918      * not running, nothing happens.  Otherwise it is stopped.  Note that calls
919      * to startService() are not counted -- this stops the service no matter
920      * how many times it was started.
921      *
922      * <p>Note that if a stopped service still has {@link ServiceConnection}
923      * objects bound to it with the {@link #BIND_AUTO_CREATE} set, it will
924      * not be destroyed until all of these bindings are removed.  See
925      * the {@link android.app.Service} documentation for more details on a
926      * service's lifecycle.
927      *
928      * <p>This function will throw {@link SecurityException} if you do not
929      * have permission to stop the given service.
930      *
931      * @param service Description of the service to be stopped.  The Intent may
932      *      specify either an explicit component name to start, or a logical
933      *      description (action, category, etc) to match an
934      *      {@link IntentFilter} published by a service.
935      *
936      * @return If there is a service matching the given Intent that is already
937      * running, then it is stopped and true is returned; else false is returned.
938      *
939      * @throws SecurityException
940      *
941      * @see #startService
942      */
stopService(Intent service)943     public abstract boolean stopService(Intent service);
944 
945     /**
946      * Connect to an application service, creating it if needed.  This defines
947      * a dependency between your application and the service.  The given
948      * <var>conn</var> will receive the service object when its created and be
949      * told if it dies and restarts.  The service will be considered required
950      * by the system only for as long as the calling context exists.  For
951      * example, if this Context is an Activity that is stopped, the service will
952      * not be required to continue running until the Activity is resumed.
953      *
954      * <p>This function will throw {@link SecurityException} if you do not
955      * have permission to bind to the given service.
956      *
957      * <p class="note">Note: this method <em>can not be called from an
958      * {@link BroadcastReceiver} component</em>.  A pattern you can use to
959      * communicate from an BroadcastReceiver to a Service is to call
960      * {@link #startService} with the arguments containing the command to be
961      * sent, with the service calling its
962      * {@link android.app.Service#stopSelf(int)} method when done executing
963      * that command.  See the API demo App/Service/Service Start Arguments
964      * Controller for an illustration of this.  It is okay, however, to use
965      * this method from an BroadcastReceiver that has been registered with
966      * {@link #registerReceiver}, since the lifetime of this BroadcastReceiver
967      * is tied to another object (the one that registered it).</p>
968      *
969      * @param service Identifies the service to connect to.  The Intent may
970      *      specify either an explicit component name, or a logical
971      *      description (action, category, etc) to match an
972      *      {@link IntentFilter} published by a service.
973      * @param conn Receives information as the service is started and stopped.
974      * @param flags Operation options for the binding.  May be 0 or
975      *          {@link #BIND_AUTO_CREATE}.
976      * @return If you have successfully bound to the service, true is returned;
977      *         false is returned if the connection is not made so you will not
978      *         receive the service object.
979      *
980      * @throws SecurityException
981      *
982      * @see #unbindService
983      * @see #startService
984      * @see #BIND_AUTO_CREATE
985      */
bindService(Intent service, ServiceConnection conn, int flags)986     public abstract boolean bindService(Intent service, ServiceConnection conn,
987             int flags);
988 
989     /**
990      * Disconnect from an application service.  You will no longer receive
991      * calls as the service is restarted, and the service is now allowed to
992      * stop at any time.
993      *
994      * @param conn The connection interface previously supplied to
995      *             bindService().
996      *
997      * @see #bindService
998      */
unbindService(ServiceConnection conn)999     public abstract void unbindService(ServiceConnection conn);
1000 
1001     /**
1002      * Start executing an {@link android.app.Instrumentation} class.  The given
1003      * Instrumentation component will be run by killing its target application
1004      * (if currently running), starting the target process, instantiating the
1005      * instrumentation component, and then letting it drive the application.
1006      *
1007      * <p>This function is not synchronous -- it returns as soon as the
1008      * instrumentation has started and while it is running.
1009      *
1010      * <p>Instrumentation is normally only allowed to run against a package
1011      * that is either unsigned or signed with a signature that the
1012      * the instrumentation package is also signed with (ensuring the target
1013      * trusts the instrumentation).
1014      *
1015      * @param className Name of the Instrumentation component to be run.
1016      * @param profileFile Optional path to write profiling data as the
1017      * instrumentation runs, or null for no profiling.
1018      * @param arguments Additional optional arguments to pass to the
1019      * instrumentation, or null.
1020      *
1021      * @return Returns true if the instrumentation was successfully started,
1022      * else false if it could not be found.
1023      */
startInstrumentation(ComponentName className, String profileFile, Bundle arguments)1024     public abstract boolean startInstrumentation(ComponentName className,
1025             String profileFile, Bundle arguments);
1026 
1027     /**
1028      * Return the handle to a system-level service by name. The class of the
1029      * returned object varies by the requested name. Currently available names
1030      * are:
1031      *
1032      * <dl>
1033      *  <dt> {@link #WINDOW_SERVICE} ("window")
1034      *  <dd> The top-level window manager in which you can place custom
1035      *  windows.  The returned object is a {@link android.view.WindowManager}.
1036      *  <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater")
1037      *  <dd> A {@link android.view.LayoutInflater} for inflating layout resources
1038      *  in this context.
1039      *  <dt> {@link #ACTIVITY_SERVICE} ("activity")
1040      *  <dd> A {@link android.app.ActivityManager} for interacting with the
1041      *  global activity state of the system.
1042      *  <dt> {@link #POWER_SERVICE} ("power")
1043      *  <dd> A {@link android.os.PowerManager} for controlling power
1044      *  management.
1045      *  <dt> {@link #ALARM_SERVICE} ("alarm")
1046      *  <dd> A {@link android.app.AlarmManager} for receiving intents at the
1047      *  time of your choosing.
1048      *  <dt> {@link #NOTIFICATION_SERVICE} ("notification")
1049      *  <dd> A {@link android.app.NotificationManager} for informing the user
1050      *   of background events.
1051      *  <dt> {@link #KEYGUARD_SERVICE} ("keyguard")
1052      *  <dd> A {@link android.app.KeyguardManager} for controlling keyguard.
1053      *  <dt> {@link #LOCATION_SERVICE} ("location")
1054      *  <dd> A {@link android.location.LocationManager} for controlling location
1055      *   (e.g., GPS) updates.
1056      *  <dt> {@link #SEARCH_SERVICE} ("search")
1057      *  <dd> A {@link android.app.SearchManager} for handling search.
1058      *  <dt> {@link #VIBRATOR_SERVICE} ("vibrator")
1059      *  <dd> A {@link android.os.Vibrator} for interacting with the vibrator
1060      *  hardware.
1061      *  <dt> {@link #CONNECTIVITY_SERVICE} ("connection")
1062      *  <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
1063      *  handling management of network connections.
1064      *  <dt> {@link #WIFI_SERVICE} ("wifi")
1065      *  <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
1066      * Wi-Fi connectivity.
1067      * <dt> {@link #INPUT_METHOD_SERVICE} ("input_method")
1068      * <dd> An {@link android.view.inputmethod.InputMethodManager InputMethodManager}
1069      * for management of input methods.
1070      * </dl>
1071      *
1072      * <p>Note:  System services obtained via this API may be closely associated with
1073      * the Context in which they are obtained from.  In general, do not share the
1074      * service objects between various different contexts (Activities, Applications,
1075      * Services, Providers, etc.)
1076      *
1077      * @param name The name of the desired service.
1078      *
1079      * @return The service or null if the name does not exist.
1080      *
1081      * @see #WINDOW_SERVICE
1082      * @see android.view.WindowManager
1083      * @see #LAYOUT_INFLATER_SERVICE
1084      * @see android.view.LayoutInflater
1085      * @see #ACTIVITY_SERVICE
1086      * @see android.app.ActivityManager
1087      * @see #POWER_SERVICE
1088      * @see android.os.PowerManager
1089      * @see #ALARM_SERVICE
1090      * @see android.app.AlarmManager
1091      * @see #NOTIFICATION_SERVICE
1092      * @see android.app.NotificationManager
1093      * @see #KEYGUARD_SERVICE
1094      * @see android.app.KeyguardManager
1095      * @see #LOCATION_SERVICE
1096      * @see android.location.LocationManager
1097      * @see #SEARCH_SERVICE
1098      * @see android.app.SearchManager
1099      * @see #SENSOR_SERVICE
1100      * @see android.hardware.SensorManager
1101      * @see #VIBRATOR_SERVICE
1102      * @see android.os.Vibrator
1103      * @see #CONNECTIVITY_SERVICE
1104      * @see android.net.ConnectivityManager
1105      * @see #WIFI_SERVICE
1106      * @see android.net.wifi.WifiManager
1107      * @see #AUDIO_SERVICE
1108      * @see android.media.AudioManager
1109      * @see #TELEPHONY_SERVICE
1110      * @see android.telephony.TelephonyManager
1111      * @see #INPUT_METHOD_SERVICE
1112      * @see android.view.inputmethod.InputMethodManager
1113      */
getSystemService(String name)1114     public abstract Object getSystemService(String name);
1115 
1116     /**
1117      * Use with {@link #getSystemService} to retrieve a
1118      * {@link android.os.PowerManager} for controlling power management,
1119      * including "wake locks," which let you keep the device on while
1120      * you're running long tasks.
1121      */
1122     public static final String POWER_SERVICE = "power";
1123     /**
1124      * Use with {@link #getSystemService} to retrieve a
1125      * {@link android.view.WindowManager} for accessing the system's window
1126      * manager.
1127      *
1128      * @see #getSystemService
1129      * @see android.view.WindowManager
1130      */
1131     public static final String WINDOW_SERVICE = "window";
1132     /**
1133      * Use with {@link #getSystemService} to retrieve a
1134      * {@link android.view.LayoutInflater} for inflating layout resources in this
1135      * context.
1136      *
1137      * @see #getSystemService
1138      * @see android.view.LayoutInflater
1139      */
1140     public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
1141     /**
1142      * Use with {@link #getSystemService} to retrieve a
1143      * {@link android.accounts.AccountManager} for receiving intents at a
1144      * time of your choosing.
1145      * TODO STOPSHIP perform a final review of the the account apis before shipping
1146      *
1147      * @see #getSystemService
1148      * @see android.accounts.AccountManager
1149      */
1150     public static final String ACCOUNT_SERVICE = "account";
1151     /**
1152      * Use with {@link #getSystemService} to retrieve a
1153      * {@link android.app.ActivityManager} for interacting with the global
1154      * system state.
1155      *
1156      * @see #getSystemService
1157      * @see android.app.ActivityManager
1158      */
1159     public static final String ACTIVITY_SERVICE = "activity";
1160     /**
1161      * Use with {@link #getSystemService} to retrieve a
1162      * {@link android.app.AlarmManager} for receiving intents at a
1163      * time of your choosing.
1164      *
1165      * @see #getSystemService
1166      * @see android.app.AlarmManager
1167      */
1168     public static final String ALARM_SERVICE = "alarm";
1169     /**
1170      * Use with {@link #getSystemService} to retrieve a
1171      * {@link android.app.NotificationManager} for informing the user of
1172      * background events.
1173      *
1174      * @see #getSystemService
1175      * @see android.app.NotificationManager
1176      */
1177     public static final String NOTIFICATION_SERVICE = "notification";
1178     /**
1179      * Use with {@link #getSystemService} to retrieve a
1180      * {@link android.view.accessibility.AccessibilityManager} for giving the user
1181      * feedback for UI events through the registered event listeners.
1182      *
1183      * @see #getSystemService
1184      * @see android.view.accessibility.AccessibilityManager
1185      */
1186     public static final String ACCESSIBILITY_SERVICE = "accessibility";
1187     /**
1188      * Use with {@link #getSystemService} to retrieve a
1189      * {@link android.app.NotificationManager} for controlling keyguard.
1190      *
1191      * @see #getSystemService
1192      * @see android.app.KeyguardManager
1193      */
1194     public static final String KEYGUARD_SERVICE = "keyguard";
1195     /**
1196      * Use with {@link #getSystemService} to retrieve a {@link
1197      * android.location.LocationManager} for controlling location
1198      * updates.
1199      *
1200      * @see #getSystemService
1201      * @see android.location.LocationManager
1202      */
1203     public static final String LOCATION_SERVICE = "location";
1204     /**
1205      * Use with {@link #getSystemService} to retrieve a {@link
1206      * android.app.SearchManager} for handling searches.
1207      *
1208      * @see #getSystemService
1209      * @see android.app.SearchManager
1210      */
1211     public static final String SEARCH_SERVICE = "search";
1212     /**
1213      * Use with {@link #getSystemService} to retrieve a {@link
1214      * android.hardware.SensorManager} for accessing sensors.
1215      *
1216      * @see #getSystemService
1217      * @see android.hardware.SensorManager
1218      */
1219     public static final String SENSOR_SERVICE = "sensor";
1220     /**
1221      * Use with {@link #getSystemService} to retrieve a
1222      * com.android.server.WallpaperService for accessing wallpapers.
1223      *
1224      * @see #getSystemService
1225      */
1226     public static final String WALLPAPER_SERVICE = "wallpaper";
1227     /**
1228      * Use with {@link #getSystemService} to retrieve a {@link
1229      * android.os.Vibrator} for interacting with the vibration hardware.
1230      *
1231      * @see #getSystemService
1232      * @see android.os.Vibrator
1233      */
1234     public static final String VIBRATOR_SERVICE = "vibrator";
1235     /**
1236      * Use with {@link #getSystemService} to retrieve a {@link
1237      * android.app.StatusBarManager} for interacting with the status bar.
1238      *
1239      * @see #getSystemService
1240      * @see android.app.StatusBarManager
1241      * @hide
1242      */
1243     public static final String STATUS_BAR_SERVICE = "statusbar";
1244 
1245     /**
1246      * Use with {@link #getSystemService} to retrieve a {@link
1247      * android.net.ConnectivityManager} for handling management of
1248      * network connections.
1249      *
1250      * @see #getSystemService
1251      * @see android.net.ConnectivityManager
1252      */
1253     public static final String CONNECTIVITY_SERVICE = "connectivity";
1254 
1255     /**
1256      * Use with {@link #getSystemService} to retrieve a {@link
1257      * android.net.wifi.WifiManager} for handling management of
1258      * Wi-Fi access.
1259      *
1260      * @see #getSystemService
1261      * @see android.net.wifi.WifiManager
1262      */
1263     public static final String WIFI_SERVICE = "wifi";
1264 
1265     /**
1266      * Use with {@link #getSystemService} to retrieve a
1267      * {@link android.media.AudioManager} for handling management of volume,
1268      * ringer modes and audio routing.
1269      *
1270      * @see #getSystemService
1271      * @see android.media.AudioManager
1272      */
1273     public static final String AUDIO_SERVICE = "audio";
1274 
1275     /**
1276      * Use with {@link #getSystemService} to retrieve a
1277      * {@link android.telephony.TelephonyManager} for handling management the
1278      * telephony features of the device.
1279      *
1280      * @see #getSystemService
1281      * @see android.telephony.TelephonyManager
1282      */
1283     public static final String TELEPHONY_SERVICE = "phone";
1284 
1285     /**
1286      * Use with {@link #getSystemService} to retrieve a
1287      * {@link android.text.ClipboardManager} for accessing and modifying
1288      * the contents of the global clipboard.
1289      *
1290      * @see #getSystemService
1291      * @see android.text.ClipboardManager
1292      */
1293     public static final String CLIPBOARD_SERVICE = "clipboard";
1294 
1295     /**
1296      * Use with {@link #getSystemService} to retrieve a
1297      * {@link android.view.inputmethod.InputMethodManager} for accessing input
1298      * methods.
1299      *
1300      * @see #getSystemService
1301      */
1302     public static final String INPUT_METHOD_SERVICE = "input_method";
1303 
1304     /**
1305      * Use with {@link #getSystemService} to retrieve a
1306      * {@blink android.appwidget.AppWidgetManager} for accessing AppWidgets.
1307      *
1308      * @hide
1309      * @see #getSystemService
1310      */
1311     public static final String APPWIDGET_SERVICE = "appwidget";
1312 
1313     /**
1314      * Use with {@link #getSystemService} to retrieve an
1315      * {@blink android.backup.IBackupManager IBackupManager} for communicating
1316      * with the backup mechanism.
1317      * @hide
1318      *
1319      * @see #getSystemService
1320      */
1321     public static final String BACKUP_SERVICE = "backup";
1322 
1323     /**
1324      * Determine whether the given permission is allowed for a particular
1325      * process and user ID running in the system.
1326      *
1327      * @param permission The name of the permission being checked.
1328      * @param pid The process ID being checked against.  Must be > 0.
1329      * @param uid The user ID being checked against.  A uid of 0 is the root
1330      * user, which will pass every permission check.
1331      *
1332      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
1333      * pid/uid is allowed that permission, or
1334      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1335      *
1336      * @see PackageManager#checkPermission(String, String)
1337      * @see #checkCallingPermission
1338      */
checkPermission(String permission, int pid, int uid)1339     public abstract int checkPermission(String permission, int pid, int uid);
1340 
1341     /**
1342      * Determine whether the calling process of an IPC you are handling has been
1343      * granted a particular permission.  This is basically the same as calling
1344      * {@link #checkPermission(String, int, int)} with the pid and uid returned
1345      * by {@link android.os.Binder#getCallingPid} and
1346      * {@link android.os.Binder#getCallingUid}.  One important difference
1347      * is that if you are not currently processing an IPC, this function
1348      * will always fail.  This is done to protect against accidentally
1349      * leaking permissions; you can use {@link #checkCallingOrSelfPermission}
1350      * to avoid this protection.
1351      *
1352      * @param permission The name of the permission being checked.
1353      *
1354      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
1355      * pid/uid is allowed that permission, or
1356      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1357      *
1358      * @see PackageManager#checkPermission(String, String)
1359      * @see #checkPermission
1360      * @see #checkCallingOrSelfPermission
1361      */
checkCallingPermission(String permission)1362     public abstract int checkCallingPermission(String permission);
1363 
1364     /**
1365      * Determine whether the calling process of an IPC <em>or you</em> have been
1366      * granted a particular permission.  This is the same as
1367      * {@link #checkCallingPermission}, except it grants your own permissions
1368      * if you are not currently processing an IPC.  Use with care!
1369      *
1370      * @param permission The name of the permission being checked.
1371      *
1372      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the calling
1373      * pid/uid is allowed that permission, or
1374      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1375      *
1376      * @see PackageManager#checkPermission(String, String)
1377      * @see #checkPermission
1378      * @see #checkCallingPermission
1379      */
checkCallingOrSelfPermission(String permission)1380     public abstract int checkCallingOrSelfPermission(String permission);
1381 
1382     /**
1383      * If the given permission is not allowed for a particular process
1384      * and user ID running in the system, throw a {@link SecurityException}.
1385      *
1386      * @param permission The name of the permission being checked.
1387      * @param pid The process ID being checked against.  Must be &gt; 0.
1388      * @param uid The user ID being checked against.  A uid of 0 is the root
1389      * user, which will pass every permission check.
1390      * @param message A message to include in the exception if it is thrown.
1391      *
1392      * @see #checkPermission(String, int, int)
1393      */
enforcePermission( String permission, int pid, int uid, String message)1394     public abstract void enforcePermission(
1395             String permission, int pid, int uid, String message);
1396 
1397     /**
1398      * If the calling process of an IPC you are handling has not been
1399      * granted a particular permission, throw a {@link
1400      * SecurityException}.  This is basically the same as calling
1401      * {@link #enforcePermission(String, int, int, String)} with the
1402      * pid and uid returned by {@link android.os.Binder#getCallingPid}
1403      * and {@link android.os.Binder#getCallingUid}.  One important
1404      * difference is that if you are not currently processing an IPC,
1405      * this function will always throw the SecurityException.  This is
1406      * done to protect against accidentally leaking permissions; you
1407      * can use {@link #enforceCallingOrSelfPermission} to avoid this
1408      * protection.
1409      *
1410      * @param permission The name of the permission being checked.
1411      * @param message A message to include in the exception if it is thrown.
1412      *
1413      * @see #checkCallingPermission(String)
1414      */
enforceCallingPermission( String permission, String message)1415     public abstract void enforceCallingPermission(
1416             String permission, String message);
1417 
1418     /**
1419      * If neither you nor the calling process of an IPC you are
1420      * handling has been granted a particular permission, throw a
1421      * {@link SecurityException}.  This is the same as {@link
1422      * #enforceCallingPermission}, except it grants your own
1423      * permissions if you are not currently processing an IPC.  Use
1424      * with care!
1425      *
1426      * @param permission The name of the permission being checked.
1427      * @param message A message to include in the exception if it is thrown.
1428      *
1429      * @see #checkCallingOrSelfPermission(String)
1430      */
enforceCallingOrSelfPermission( String permission, String message)1431     public abstract void enforceCallingOrSelfPermission(
1432             String permission, String message);
1433 
1434     /**
1435      * Grant permission to access a specific Uri to another package, regardless
1436      * of whether that package has general permission to access the Uri's
1437      * content provider.  This can be used to grant specific, temporary
1438      * permissions, typically in response to user interaction (such as the
1439      * user opening an attachment that you would like someone else to
1440      * display).
1441      *
1442      * <p>Normally you should use {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
1443      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1444      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
1445      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} with the Intent being used to
1446      * start an activity instead of this function directly.  If you use this
1447      * function directly, you should be sure to call
1448      * {@link #revokeUriPermission} when the target should no longer be allowed
1449      * to access it.
1450      *
1451      * <p>To succeed, the content provider owning the Uri must have set the
1452      * {@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
1453      * grantUriPermissions} attribute in its manifest or included the
1454      * {@link android.R.styleable#AndroidManifestGrantUriPermission
1455      * &lt;grant-uri-permissions&gt;} tag.
1456      *
1457      * @param toPackage The package you would like to allow to access the Uri.
1458      * @param uri The Uri you would like to grant access to.
1459      * @param modeFlags The desired access modes.  Any combination of
1460      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
1461      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1462      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
1463      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1464      *
1465      * @see #revokeUriPermission
1466      */
grantUriPermission(String toPackage, Uri uri, int modeFlags)1467     public abstract void grantUriPermission(String toPackage, Uri uri,
1468             int modeFlags);
1469 
1470     /**
1471      * Remove all permissions to access a particular content provider Uri
1472      * that were previously added with {@link #grantUriPermission}.  The given
1473      * Uri will match all previously granted Uris that are the same or a
1474      * sub-path of the given Uri.  That is, revoking "content://foo/one" will
1475      * revoke both "content://foo/target" and "content://foo/target/sub", but not
1476      * "content://foo".
1477      *
1478      * @param uri The Uri you would like to revoke access to.
1479      * @param modeFlags The desired access modes.  Any combination of
1480      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
1481      * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1482      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
1483      * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1484      *
1485      * @see #grantUriPermission
1486      */
revokeUriPermission(Uri uri, int modeFlags)1487     public abstract void revokeUriPermission(Uri uri, int modeFlags);
1488 
1489     /**
1490      * Determine whether a particular process and user ID has been granted
1491      * permission to access a specific URI.  This only checks for permissions
1492      * that have been explicitly granted -- if the given process/uid has
1493      * more general access to the URI's content provider then this check will
1494      * always fail.
1495      *
1496      * @param uri The uri that is being checked.
1497      * @param pid The process ID being checked against.  Must be &gt; 0.
1498      * @param uid The user ID being checked against.  A uid of 0 is the root
1499      * user, which will pass every permission check.
1500      * @param modeFlags The type of access to grant.  May be one or both of
1501      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1502      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1503      *
1504      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the given
1505      * pid/uid is allowed to access that uri, or
1506      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1507      *
1508      * @see #checkCallingUriPermission
1509      */
checkUriPermission(Uri uri, int pid, int uid, int modeFlags)1510     public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
1511 
1512     /**
1513      * Determine whether the calling process and user ID has been
1514      * granted permission to access a specific URI.  This is basically
1515      * the same as calling {@link #checkUriPermission(Uri, int, int,
1516      * int)} with the pid and uid returned by {@link
1517      * android.os.Binder#getCallingPid} and {@link
1518      * android.os.Binder#getCallingUid}.  One important difference is
1519      * that if you are not currently processing an IPC, this function
1520      * will always fail.
1521      *
1522      * @param uri The uri that is being checked.
1523      * @param modeFlags The type of access to grant.  May be one or both of
1524      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1525      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1526      *
1527      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
1528      * is allowed to access that uri, or
1529      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1530      *
1531      * @see #checkUriPermission(Uri, int, int, int)
1532      */
checkCallingUriPermission(Uri uri, int modeFlags)1533     public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
1534 
1535     /**
1536      * Determine whether the calling process of an IPC <em>or you</em> has been granted
1537      * permission to access a specific URI.  This is the same as
1538      * {@link #checkCallingUriPermission}, except it grants your own permissions
1539      * if you are not currently processing an IPC.  Use with care!
1540      *
1541      * @param uri The uri that is being checked.
1542      * @param modeFlags The type of access to grant.  May be one or both of
1543      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1544      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1545      *
1546      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
1547      * is allowed to access that uri, or
1548      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1549      *
1550      * @see #checkCallingUriPermission
1551      */
checkCallingOrSelfUriPermission(Uri uri, int modeFlags)1552     public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
1553 
1554     /**
1555      * Check both a Uri and normal permission.  This allows you to perform
1556      * both {@link #checkPermission} and {@link #checkUriPermission} in one
1557      * call.
1558      *
1559      * @param uri The Uri whose permission is to be checked, or null to not
1560      * do this check.
1561      * @param readPermission The permission that provides overall read access,
1562      * or null to not do this check.
1563      * @param writePermission The permission that provides overall write
1564      * acess, or null to not do this check.
1565      * @param pid The process ID being checked against.  Must be &gt; 0.
1566      * @param uid The user ID being checked against.  A uid of 0 is the root
1567      * user, which will pass every permission check.
1568      * @param modeFlags The type of access to grant.  May be one or both of
1569      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1570      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1571      *
1572      * @return Returns {@link PackageManager#PERMISSION_GRANTED} if the caller
1573      * is allowed to access that uri or holds one of the given permissions, or
1574      * {@link PackageManager#PERMISSION_DENIED} if it is not.
1575      */
checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags)1576     public abstract int checkUriPermission(Uri uri, String readPermission,
1577             String writePermission, int pid, int uid, int modeFlags);
1578 
1579     /**
1580      * If a particular process and user ID has not been granted
1581      * permission to access a specific URI, throw {@link
1582      * SecurityException}.  This only checks for permissions that have
1583      * been explicitly granted -- if the given process/uid has more
1584      * general access to the URI's content provider then this check
1585      * will always fail.
1586      *
1587      * @param uri The uri that is being checked.
1588      * @param pid The process ID being checked against.  Must be &gt; 0.
1589      * @param uid The user ID being checked against.  A uid of 0 is the root
1590      * user, which will pass every permission check.
1591      * @param modeFlags The type of access to grant.  May be one or both of
1592      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1593      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1594      * @param message A message to include in the exception if it is thrown.
1595      *
1596      * @see #checkUriPermission(Uri, int, int, int)
1597      */
enforceUriPermission( Uri uri, int pid, int uid, int modeFlags, String message)1598     public abstract void enforceUriPermission(
1599             Uri uri, int pid, int uid, int modeFlags, String message);
1600 
1601     /**
1602      * If the calling process and user ID has not been granted
1603      * permission to access a specific URI, throw {@link
1604      * SecurityException}.  This is basically the same as calling
1605      * {@link #enforceUriPermission(Uri, int, int, int, String)} with
1606      * the pid and uid returned by {@link
1607      * android.os.Binder#getCallingPid} and {@link
1608      * android.os.Binder#getCallingUid}.  One important difference is
1609      * that if you are not currently processing an IPC, this function
1610      * will always throw a SecurityException.
1611      *
1612      * @param uri The uri that is being checked.
1613      * @param modeFlags The type of access to grant.  May be one or both of
1614      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1615      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1616      * @param message A message to include in the exception if it is thrown.
1617      *
1618      * @see #checkCallingUriPermission(Uri, int)
1619      */
enforceCallingUriPermission( Uri uri, int modeFlags, String message)1620     public abstract void enforceCallingUriPermission(
1621             Uri uri, int modeFlags, String message);
1622 
1623     /**
1624      * If the calling process of an IPC <em>or you</em> has not been
1625      * granted permission to access a specific URI, throw {@link
1626      * SecurityException}.  This is the same as {@link
1627      * #enforceCallingUriPermission}, except it grants your own
1628      * permissions if you are not currently processing an IPC.  Use
1629      * with care!
1630      *
1631      * @param uri The uri that is being checked.
1632      * @param modeFlags The type of access to grant.  May be one or both of
1633      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1634      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1635      * @param message A message to include in the exception if it is thrown.
1636      *
1637      * @see #checkCallingOrSelfUriPermission(Uri, int)
1638      */
enforceCallingOrSelfUriPermission( Uri uri, int modeFlags, String message)1639     public abstract void enforceCallingOrSelfUriPermission(
1640             Uri uri, int modeFlags, String message);
1641 
1642     /**
1643      * Enforce both a Uri and normal permission.  This allows you to perform
1644      * both {@link #enforcePermission} and {@link #enforceUriPermission} in one
1645      * call.
1646      *
1647      * @param uri The Uri whose permission is to be checked, or null to not
1648      * do this check.
1649      * @param readPermission The permission that provides overall read access,
1650      * or null to not do this check.
1651      * @param writePermission The permission that provides overall write
1652      * acess, or null to not do this check.
1653      * @param pid The process ID being checked against.  Must be &gt; 0.
1654      * @param uid The user ID being checked against.  A uid of 0 is the root
1655      * user, which will pass every permission check.
1656      * @param modeFlags The type of access to grant.  May be one or both of
1657      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION} or
1658      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
1659      * @param message A message to include in the exception if it is thrown.
1660      *
1661      * @see #checkUriPermission(Uri, String, String, int, int, int)
1662      */
enforceUriPermission( Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags, String message)1663     public abstract void enforceUriPermission(
1664             Uri uri, String readPermission, String writePermission,
1665             int pid, int uid, int modeFlags, String message);
1666 
1667     /**
1668      * Flag for use with {@link #createPackageContext}: include the application
1669      * code with the context.  This means loading code into the caller's
1670      * process, so that {@link #getClassLoader()} can be used to instantiate
1671      * the application's classes.  Setting this flags imposes security
1672      * restrictions on what application context you can access; if the
1673      * requested application can not be safely loaded into your process,
1674      * java.lang.SecurityException will be thrown.  If this flag is not set,
1675      * there will be no restrictions on the packages that can be loaded,
1676      * but {@link #getClassLoader} will always return the default system
1677      * class loader.
1678      */
1679     public static final int CONTEXT_INCLUDE_CODE = 0x00000001;
1680 
1681     /**
1682      * Flag for use with {@link #createPackageContext}: ignore any security
1683      * restrictions on the Context being requested, allowing it to always
1684      * be loaded.  For use with {@link #CONTEXT_INCLUDE_CODE} to allow code
1685      * to be loaded into a process even when it isn't safe to do so.  Use
1686      * with extreme care!
1687      */
1688     public static final int CONTEXT_IGNORE_SECURITY = 0x00000002;
1689 
1690     /**
1691      * Flag for use with {@link #createPackageContext}: a restricted context may
1692      * disable specific features. For instance, a View associated with a restricted
1693      * context would ignore particular XML attributes.
1694      */
1695     public static final int CONTEXT_RESTRICTED = 0x00000004;
1696 
1697     /**
1698      * Return a new Context object for the given application name.  This
1699      * Context is the same as what the named application gets when it is
1700      * launched, containing the same resources and class loader.  Each call to
1701      * this method returns a new instance of a Context object; Context objects
1702      * are not shared, however they share common state (Resources, ClassLoader,
1703      * etc) so the Context instance itself is fairly lightweight.
1704      *
1705      * <p>Throws {@link PackageManager.NameNotFoundException} if there is no
1706      * application with the given package name.
1707      *
1708      * <p>Throws {@link java.lang.SecurityException} if the Context requested
1709      * can not be loaded into the caller's process for security reasons (see
1710      * {@link #CONTEXT_INCLUDE_CODE} for more information}.
1711      *
1712      * @param packageName Name of the application's package.
1713      * @param flags Option flags, one of {@link #CONTEXT_INCLUDE_CODE}
1714      *              or {@link #CONTEXT_IGNORE_SECURITY}.
1715      *
1716      * @return A Context for the application.
1717      *
1718      * @throws java.lang.SecurityException
1719      * @throws PackageManager.NameNotFoundException if there is no application with
1720      * the given package name
1721      */
createPackageContext(String packageName, int flags)1722     public abstract Context createPackageContext(String packageName,
1723             int flags) throws PackageManager.NameNotFoundException;
1724 
1725     /**
1726      * Indicates whether this Context is restricted.
1727      *
1728      * @return True if this Context is restricted, false otherwise.
1729      *
1730      * @see #CONTEXT_RESTRICTED
1731      */
isRestricted()1732     public boolean isRestricted() {
1733         return false;
1734     }
1735 }
1736