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
17package android.os;
18
19/**
20 * Basic interface for finding and publishing system services.
21 *
22 * An implementation of this interface is usually published as the
23 * global context object, which can be retrieved via
24 * BinderNative.getContextObject().  An easy way to retrieve this
25 * is with the static method BnServiceManager.getDefault().
26 *
27 * @hide
28 */
29public interface IServiceManager extends IInterface
30{
31    /**
32     * Retrieve an existing service called @a name from the
33     * service manager.  Blocks for a few seconds waiting for it to be
34     * published if it does not already exist.
35     */
36    public IBinder getService(String name) throws RemoteException;
37
38    /**
39     * Retrieve an existing service called @a name from the
40     * service manager.  Non-blocking.
41     */
42    public IBinder checkService(String name) throws RemoteException;
43
44    /**
45     * Place a new @a service called @a name into the service
46     * manager.
47     */
48    public void addService(String name, IBinder service) throws RemoteException;
49
50    /**
51     * Return a list of all currently running services.
52     */
53    public String[] listServices() throws RemoteException;
54
55    /**
56     * Assign a permission controller to the service manager.  After set, this
57     * interface is checked before any services are added.
58     */
59    public void setPermissionController(IPermissionController controller)
60            throws RemoteException;
61
62    static final String descriptor = "android.os.IServiceManager";
63
64    int GET_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION;
65    int CHECK_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+1;
66    int ADD_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+2;
67    int LIST_SERVICES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+3;
68    int CHECK_SERVICES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+4;
69    int SET_PERMISSION_CONTROLLER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+5;
70}
71