ServiceManager.cpp revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
1// 2// Copyright 2005 The Android Open Source Project 3// 4 5#define LOG_TAG "ServiceManager" 6 7#include "ServiceManager.h" 8#include "SignalHandler.h" 9 10#include <utils/Debug.h> 11#include <utils/Log.h> 12#include <utils/Parcel.h> 13#include <utils/String8.h> 14#include <utils/ProcessState.h> 15 16#include <private/utils/Static.h> 17 18#include <ctype.h> 19#include <errno.h> 20#include <limits.h> 21#include <stdio.h> 22#include <stdlib.h> 23#include <sys/stat.h> 24 25namespace android { 26 27BServiceManager::BServiceManager() 28{ 29} 30 31sp<IBinder> BServiceManager::getService(const String16& name) const 32{ 33 AutoMutex _l(mLock); 34 ssize_t i = mServices.indexOfKey(name); 35 LOGV("ServiceManager: getService(%s) -> %d\n", String8(name).string(), i); 36 if (i >= 0) return mServices.valueAt(i); 37 return NULL; 38} 39 40sp<IBinder> BServiceManager::checkService(const String16& name) const 41{ 42 AutoMutex _l(mLock); 43 ssize_t i = mServices.indexOfKey(name); 44 LOGV("ServiceManager: getService(%s) -> %d\n", String8(name).string(), i); 45 if (i >= 0) return mServices.valueAt(i); 46 return NULL; 47} 48 49status_t BServiceManager::addService(const String16& name, const sp<IBinder>& service) 50{ 51 AutoMutex _l(mLock); 52 LOGI("ServiceManager: addService(%s, %p)\n", String8(name).string(), service.get()); 53 const ssize_t res = mServices.add(name, service); 54 if (res >= NO_ERROR) { 55 mChanged.broadcast(); 56 return NO_ERROR; 57 } 58 return res; 59} 60 61Vector<String16> BServiceManager::listServices() 62{ 63 Vector<String16> res; 64 65 AutoMutex _l(mLock); 66 const size_t N = mServices.size(); 67 for (size_t i=0; i<N; i++) { 68 res.add(mServices.keyAt(i)); 69 } 70 71 return res; 72} 73 74}; // namespace android 75