Hello,

I think you can directly use the Service name as string and try it.
Say,
public static final String POKE_SERVICE = "PokeService";
context.getSystemService(POKE_SERVICE)

~Sam.

On Wed, Oct 20, 2010 at 7:03 PM, Samuel Skånberg <[email protected]>wrote:

> 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
>

-- 
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting

Reply via email to