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.os;
18 
19 import android.os.IClientCallback;
20 import android.os.IServiceCallback;
21 import android.os.ServiceDebugInfo;
22 import android.os.ConnectionInfo;
23 
24 /**
25  * Basic interface for finding and publishing system services.
26  *
27  * You likely want to use android.os.ServiceManager in Java or
28  * android::IServiceManager in C++ in order to use this interface.
29  *
30  * @hide
31  */
32 interface IServiceManager {
33     /*
34      * Must update values in IServiceManager.h
35      */
36     /* Allows services to dump sections according to priorities. */
37     const int DUMP_FLAG_PRIORITY_CRITICAL = 1 << 0;
38     const int DUMP_FLAG_PRIORITY_HIGH = 1 << 1;
39     const int DUMP_FLAG_PRIORITY_NORMAL = 1 << 2;
40     /**
41      * Services are by default registered with a DEFAULT dump priority. DEFAULT priority has the
42      * same priority as NORMAL priority but the services are not called with dump priority
43      * arguments.
44      */
45     const int DUMP_FLAG_PRIORITY_DEFAULT = 1 << 3;
46 
47     const int DUMP_FLAG_PRIORITY_ALL =
48              DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PRIORITY_HIGH
49              | DUMP_FLAG_PRIORITY_NORMAL | DUMP_FLAG_PRIORITY_DEFAULT;
50 
51     /* Allows services to dump sections in protobuf format. */
52     const int DUMP_FLAG_PROTO = 1 << 4;
53 
54     /**
55      * Retrieve an existing service called @a name from the
56      * service manager.
57      *
58      * This is the same as checkService (returns immediately) but
59      * exists for legacy purposes.
60      *
61      * Returns null if the service does not exist.
62      */
63     @UnsupportedAppUsage
getService(@tf8InCpp String name)64     @nullable IBinder getService(@utf8InCpp String name);
65 
66     /**
67      * Retrieve an existing service called @a name from the service
68      * manager. Non-blocking. Returns null if the service does not
69      * exist.
70      */
71     @UnsupportedAppUsage
checkService(@tf8InCpp String name)72     @nullable IBinder checkService(@utf8InCpp String name);
73 
74     /**
75      * Place a new @a service called @a name into the service
76      * manager.
77      */
addService(@tf8InCpp String name, IBinder service, boolean allowIsolated, int dumpPriority)78     void addService(@utf8InCpp String name, IBinder service,
79         boolean allowIsolated, int dumpPriority);
80 
81     /**
82      * Return a list of all currently running services.
83      */
listServices(int dumpPriority)84     @utf8InCpp String[] listServices(int dumpPriority);
85 
86     /**
87      * Request a callback when a service is registered.
88      */
registerForNotifications(@tf8InCpp String name, IServiceCallback callback)89     void registerForNotifications(@utf8InCpp String name, IServiceCallback callback);
90 
91     /**
92      * Unregisters all requests for notifications for a specific callback.
93      */
unregisterForNotifications(@tf8InCpp String name, IServiceCallback callback)94     void unregisterForNotifications(@utf8InCpp String name, IServiceCallback callback);
95 
96     /**
97      * Returns whether a given interface is declared on the device, even if it
98      * is not started yet. For instance, this could be a service declared in the VINTF
99      * manifest.
100      */
isDeclared(@tf8InCpp String name)101     boolean isDeclared(@utf8InCpp String name);
102 
103     /**
104      * Returns all declared instances for a particular interface.
105      *
106      * For instance, if 'android.foo.IFoo/foo' is declared, and 'android.foo.IFoo' is
107      * passed here, then ["foo"] would be returned.
108      */
getDeclaredInstances(@tf8InCpp String iface)109     @utf8InCpp String[] getDeclaredInstances(@utf8InCpp String iface);
110 
111     /**
112      * If updatable-via-apex, returns the APEX via which this is updated.
113      */
updatableViaApex(@tf8InCpp String name)114     @nullable @utf8InCpp String updatableViaApex(@utf8InCpp String name);
115 
116     /**
117      * Returns all instances which are updatable via the APEX. Instance names are fully qualified
118      * like `pack.age.IFoo/default`.
119      */
getUpdatableNames(@tf8InCpp String apexName)120     @utf8InCpp String[] getUpdatableNames(@utf8InCpp String apexName);
121 
122     /**
123      * If connection info is available for the given instance, returns the ConnectionInfo
124      */
getConnectionInfo(@tf8InCpp String name)125     @nullable ConnectionInfo getConnectionInfo(@utf8InCpp String name);
126 
127     /**
128      * Request a callback when the number of clients of the service changes.
129      * Used by LazyServiceRegistrar to dynamically stop services that have no clients.
130      */
registerClientCallback(@tf8InCpp String name, IBinder service, IClientCallback callback)131     void registerClientCallback(@utf8InCpp String name, IBinder service, IClientCallback callback);
132 
133     /**
134      * Attempt to unregister and remove a service. Will fail if the service is still in use.
135      */
tryUnregisterService(@tf8InCpp String name, IBinder service)136     void tryUnregisterService(@utf8InCpp String name, IBinder service);
137 
138     /**
139      * Get debug information for all currently registered services.
140      */
getServiceDebugInfo()141     ServiceDebugInfo[] getServiceDebugInfo();
142 }
143