ECode RegisteredServicesCache::constructor( /* [in] */ IContext* context, /* [in] */ const String& interfaceName, /* [in] */ const String& metaDataName, /* [in] */ const String& attributeName, /* [in] */ IXmlSerializerAndParser* serializerAndParser) { mContext = context; mInterfaceName = interfaceName; mMetaDataName = metaDataName; mAttributesName = attributeName; mSerializerAndParser = serializerAndParser; mPackageReceiver = (IBroadcastReceiver*)new RegisteredServicesCache::PackageReceiver(this); mPackageReceiver = (IBroadcastReceiver*)new RegisteredServicesCache::ExternalReceiver(this); AutoPtr<IEnvironment> env; CEnvironment::AcquireSingleton((IEnvironment**)&env); AutoPtr<IFile> dataDir; env->GetDataDirectory((IFile**)&dataDir); AutoPtr<IFile> systemDir, syncDir, interFile; CFile::New(dataDir, String("system"), (IFile**)&systemDir); CFile::New(systemDir, String("registered_services"), (IFile**)&syncDir); CFile::New(syncDir, interfaceName + String(".xml"), (IFile**)&interFile); CAtomicFile::New(interFile, (IAtomicFile**)&mPersistentServicesFile); // Load persisted services from disk ReadPersistentServicesLocked(); AutoPtr<IIntentFilter> intentFilter; CIntentFilter::New((IIntentFilter**)&intentFilter); intentFilter->AddAction(IIntent::ACTION_PACKAGE_ADDED); intentFilter->AddAction(IIntent::ACTION_PACKAGE_CHANGED); intentFilter->AddAction(IIntent::ACTION_PACKAGE_REMOVED); intentFilter->AddDataScheme(String("package")); AutoPtr<IIntent> intent; mContext->RegisterReceiverAsUser(mPackageReceiver, UserHandle::ALL, intentFilter, String(NULL), NULL, (IIntent**)&intent); // Register for events related to sdcard installation. AutoPtr<IIntentFilter> sdFilter; CIntentFilter::New((IIntentFilter**)&sdFilter); sdFilter->AddAction(IIntent::ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); sdFilter->AddAction(IIntent::ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); intent = NULL; mContext->RegisterReceiver(mExternalReceiver, sdFilter, (IIntent**)&intent); return NOERROR; }