Maybe you can find some information here:
http://www.google.com.br/url?sa=t&source=web&cd=5&ved=0CDwQFjAE&url=http%3A%2F%2Fandroid.wooyd.org%2FJNIExample%2Ffiles%2FJNIExample.pdf&ei=DQW_TMPxBcP98Ab06bC8Bg&usg=AFQjCNHwjbm09fLt2PAgFYDRjSKlL3mQTA&sig2=Emm3Swbis3Dsiwr0UEC8QA http://davanum.wordpress.com/2007/12/09/android-invoke-jni-based-methods-bridging-cc-and-java/ []'s Hamilton Vera 2010/10/20 Samuel Skånberg <[email protected]>: > Hello, > > I want to create a binder service in C++ and be able to bind to that > service from java. My question is how? I have mimicked the > implementation in frameworks/base/camera/tests/CameraServiceTest/ > CameraServiceTest.cpp. It compiles nicely without any warnings and I > can run it. But how do I connect to it? > > The code for the service is here: > > ------------------------------------------------------------------------------------------------------------------------------------------ > /* Imitating frameworks/base/camera/tests/CameraServiceTest/ > CameraServiceTest.cpp */ > > #include <binder/IInterface.h> > #include <binder/IPCThreadState.h> > #include <binder/IServiceManager.h> > #include <binder/ProcessState.h> > #include <binder/IBinder.h> > > using namespace android; > > > class IPokeService : public IInterface { > protected: > enum { > POKE = IBinder::FIRST_CALL_TRANSACTION > }; > > public: > DECLARE_META_INTERFACE(PokeService); > virtual void poke() = 0; > }; > > class BnPokeService : public BnInterface<IPokeService> { > virtual status_t onTransact(uint32_t code, const Parcel& data, > Parcel* reply, uint32_t flags = 0); > }; > > class BpPokeService : public BpInterface<IPokeService> { > public: > BpPokeService(const sp<IBinder>& impl) : > BpInterface<IPokeService>(impl) { > } > > virtual void poke() { > Parcel data, reply; > remote()->transact(POKE, data, &reply); > } > }; > > IMPLEMENT_META_INTERFACE(PokeService, "PokeService"); > > status_t BnPokeService::onTransact(uint32_t code, const Parcel& data, > Parcel* reply, uint32_t flags) { > switch(code) { > case POKE: { > poke(); > return NO_ERROR; > } break; > default: > return BBinder::onTransact(code, data, reply, flags); > } > } > > class PokeService : public BnPokeService { > virtual void poke() { > printf("Poked\n"); > } > }; > > int main(int argc, char **argv) > { > defaultServiceManager()->addService(String16("PokeService"), new > PokeService()); > ProcessState::self()->startThreadPool(); > > android::ProcessState::self()->startThreadPool(); > LOGI("Poke service is now ready"); > IPCThreadState::self()->joinThreadPool(); > > return 0; > } > ------------------------------------------------------------------------------------------------------------------------------------------ > > And here is my Android.mk > ------------------------------------------------------------------------------------------------------------------------------------------ > LOCAL_PATH := $(call my-dir) > > include $(CLEAR_VARS) > > LOCAL_SRC_FILES := main.cpp > > LOCAL_CFLAGS += -DPLATFORM_ANDROID > > LOCAL_MODULE := poke > > # for now, until I do a full rebuild. > LOCAL_PRELINK_MODULE := false > > LOCAL_SHARED_LIBRARIES += liblog > LOCAL_SHARED_LIBRARIES += libutils libui libcutils > LOCAL_SHARED_LIBRARIES += libbinder > > include $(BUILD_EXECUTABLE) > ------------------------------------------------------------------------------------------------------------------------------------------ > > > The service won't show up when I do a listing in java: > > ------------------------------------------------------------------------------------------------------------------------------------------ > Context context = getBaseContext(); > ActivityManager am = (ActivityManager) > context.getSystemService(Activity.ACTIVITY_SERVICE); > > List<RunningServiceInfo> serviceInfos = am.getRunningServices(50); > > for (RunningServiceInfo service : serviceInfos) { > Log.i("Service", "Process " + service.process + " with component " + > service.service.getClassName()); > } > ------------------------------------------------------------------------------------------------------------------------------------------ > > That will only give me from logcat: > I/Service ( 715): Process system with component > com.android.internal.service.wallpaper.ImageWallpaper > I/Service ( 715): Process com.android.phone with component > com.android.phone.BluetoothHeadsetService > I/Service ( 715): Process com.android.inputmethod.latin with > component com.android.inputmethod.latin.LatinIME > > Any help would be appreciated! > > Kind regards, > Samuel > > > > -- > unsubscribe: [email protected] > website: http://groups.google.com/group/android-porting > -- Hamilton Vera int Administrator (char Network[],char ComputationalSystems[]) http://hvera.wordpress.com -- unsubscribe: [email protected] website: http://groups.google.com/group/android-porting
