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

Reply via email to