Dianne, BTW--- should we make the binder.c in the service_manager directory into a library? So that people who write native service by C can reuse the code. What do you think? Yi
On Tue, Mar 31, 2009 at 4:41 PM, Yi Sun <beyo...@gmail.com> wrote: > Dianne, > Thank you for the hint. I will try this out to see if I can make it work or > not. > Yi > > > On Tue, Mar 31, 2009 at 4:24 PM, Dianne Hackborn <hack...@android.com>wrote: > >> Okay so just do what I suggested, add your own shared library for >> accessing it. You are going to need to do that anyway, since you will at >> least need to have the binder interface somewhere for someone to link to, or >> if you weren't going to use the binder surely you would have something >> besides a raw socket as the API for applications. >> >> >> On Tue, Mar 31, 2009 at 4:22 PM, Yi Sun <beyo...@gmail.com> wrote: >> >>> I'm trying to relay some information (events) between Android application >>> and a native application. The idea is to have a background native process >>> running as a service that can be accessed by Android applications through >>> binder interface. The native process is written by C and it will be a lot >>> works to convert it to other lang. It will be easier to add a Binder >>> interface into it and make it work as a android service. I guess we could >>> use socket to do this as well. But I hope we use an unified interface like >>> Binder. >>> Yi >>> >>> >>> On Tue, Mar 31, 2009 at 4:14 PM, Dianne Hackborn <hack...@android.com>wrote: >>> >>>> Could you please explain more what you are trying to do? If you are >>>> trying to add a service with a public API for applications to use, one >>>> approach you can take is to make a shared library that apps request with >>>> <uses-library> which has APIs to retrieving and calling the service. That >>>> shared library can use non-SDK classes like the ServiceManager, since it is >>>> intended to be bundled with the device. >>>> >>>> But I really don't know enough about what you are trying to accomplish >>>> to help more. >>>> >>>> >>>> On Tue, Mar 31, 2009 at 3:54 PM, Yi Sun <beyo...@gmail.com> wrote: >>>> >>>>> So it seems that I only have following choices: >>>>> 1. write my own JNI to access my service. >>>>> 2. hack the ApplicationContext to add my service into into >>>>> getSystemService. I also need to build my own service class into >>>>> android.app >>>>> package. In my client, I will call getSystemService collect my service >>>>> handle and do binder operations. >>>>> >>>>> >>>>> Yi >>>>> >>>>> >>>>> On Tue, Mar 31, 2009 at 2:31 PM, Dianne Hackborn >>>>> <hack...@android.com>wrote: >>>>> >>>>>> It is not in the SDK, and as a rule applications should not be >>>>>> directly accessing system services. You'll note that there are tons of >>>>>> system services in the standard android platform, and they all have >>>>>> appropriate SDK APIs for calling them (and the Context.getSystemService() >>>>>> API to allow apps to access them). >>>>>> >>>>>> >>>>>> On Tue, Mar 31, 2009 at 1:47 PM, Yi Sun <beyo...@gmail.com> wrote: >>>>>> >>>>>>> But, the ServiceManager is not an exported java API at all. >>>>>>> Thanks >>>>>>> Yi >>>>>>> >>>>>>> >>>>>>> On Tue, Mar 31, 2009 at 12:48 AM, Dianne Hackborn < >>>>>>> hack...@android.com> wrote: >>>>>>> >>>>>>>> You are mixing two different things. You are creating a low-level >>>>>>>> core system service, and then trying to connect to it as if it is a >>>>>>>> high-level application service. If you are using service manager to >>>>>>>> publish >>>>>>>> it, you need to use service manager (in Java ServiceManager) to access >>>>>>>> it. >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Mar 30, 2009 at 10:45 PM, Yi Sun <beyo...@gmail.com> wrote: >>>>>>>> >>>>>>>>> Hi Dianne, >>>>>>>>> Thanks for the reply. Actually here is what I want to do: >>>>>>>>> On the service side (C code), reusing binder.c in the >>>>>>>>> service_manager directory. So my code will call >>>>>>>>> 1. binder_open, >>>>>>>>> 2. bio stuff to build an io block for adding service, >>>>>>>>> 3.binder_call to add service to service_manager. >>>>>>>>> 4. binder_loop to wait for requests. (Just do a quick prototype >>>>>>>>> here, so no multi-threads) >>>>>>>>> >>>>>>>>> On the client side (java), send request to the service I built and >>>>>>>>> receive replies. >>>>>>>>> Now, if I run /system/bin/service list, I can see my service like >>>>>>>>> this: >>>>>>>>> # /system/bin/service list >>>>>>>>> Found 43 services: >>>>>>>>> 0 Binder.Test.IBindertest: [] >>>>>>>>> >>>>>>>>> But, on the java side, I can not really get the binder object for >>>>>>>>> this service. The bindService call failed with following error >>>>>>>>> messages: >>>>>>>>> W/ActivityManager( 581): Unable to start service Intent { >>>>>>>>> action=Binder.Test.IBindertest }: not found >>>>>>>>> >>>>>>>>> Yi >>>>>>>>> >>>>>>>>> On Mon, Mar 30, 2009 at 10:01 PM, Dianne Hackborn < >>>>>>>>> hack...@android.com> wrote: >>>>>>>>> >>>>>>>>>> If you are writing a low-level system service, the high-level >>>>>>>>>> Service API (onBind() etc) is irrelevant. The aidl stuff is part of >>>>>>>>>> the >>>>>>>>>> primitive Binder IPC stuff; Service is a much higher-level facility >>>>>>>>>> built on >>>>>>>>>> top of it. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Mon, Mar 30, 2009 at 7:21 PM, beyounn <beyo...@gmail.com>wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Ok, let me try out the AIDL part, it seems simpler. But I do have >>>>>>>>>>> a >>>>>>>>>>> question about it and hope you could give more hits. I took a >>>>>>>>>>> look on >>>>>>>>>>> the AIDL, it seems that on the service(server) side, we have to >>>>>>>>>>> implement onBind and other methods. For my case, does it mean >>>>>>>>>>> that I >>>>>>>>>>> don't need to care about the service side works and only need to >>>>>>>>>>> implement something like RemoteServiceBinding.java in the example >>>>>>>>>>> code >>>>>>>>>>> for my self? >>>>>>>>>>> Thanks >>>>>>>>>>> Yi >>>>>>>>>>> >>>>>>>>>>> On Mar 30, 6:36 pm, Dave Sparks <davidspa...@android.com> wrote: >>>>>>>>>>> > You can write AIDL to generate your Java binding, or you can >>>>>>>>>>> write >>>>>>>>>>> > your own native binding and put a JNI layer on top of that. If >>>>>>>>>>> you >>>>>>>>>>> > don't plan on calling your service from native code, AIDL is >>>>>>>>>>> much >>>>>>>>>>> > easier. >>>>>>>>>>> > >>>>>>>>>>> > On Mar 30, 6:08 pm, beyounn <beyo...@gmail.com> wrote: >>>>>>>>>>> > >>>>>>>>>>> > > Hello, >>>>>>>>>>> > > I'm writing a service by C. My code calls binder to add a >>>>>>>>>>> service >>>>>>>>>>> > > called "myservice" into servicemanager. And I can add >>>>>>>>>>> "myservice" >>>>>>>>>>> > > without any problem. Also, when I run "/system/bin/service >>>>>>>>>>> list", it >>>>>>>>>>> > > shows the service added by me. The question is -- What is the >>>>>>>>>>> correct >>>>>>>>>>> > > way to access this service from my application that is >>>>>>>>>>> written by >>>>>>>>>>> > > java? >>>>>>>>>>> > > Thanks >>>>>>>>>>> > > Yi >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Dianne Hackborn >>>>>>>>>> Android framework engineer >>>>>>>>>> hack...@android.com >>>>>>>>>> >>>>>>>>>> Note: please don't send private questions to me, as I don't have >>>>>>>>>> time to provide private support. All such questions should be >>>>>>>>>> posted on >>>>>>>>>> public forums, where I and others can see and answer them. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Dianne Hackborn >>>>>>>> Android framework engineer >>>>>>>> hack...@android.com >>>>>>>> >>>>>>>> Note: please don't send private questions to me, as I don't have >>>>>>>> time to provide private support. All such questions should be posted >>>>>>>> on >>>>>>>> public forums, where I and others can see and answer them. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Dianne Hackborn >>>>>> Android framework engineer >>>>>> hack...@android.com >>>>>> >>>>>> Note: please don't send private questions to me, as I don't have time >>>>>> to provide private support. All such questions should be posted on >>>>>> public >>>>>> forums, where I and others can see and answer them. >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Dianne Hackborn >>>> Android framework engineer >>>> hack...@android.com >>>> >>>> Note: please don't send private questions to me, as I don't have time to >>>> provide private support. All such questions should be posted on public >>>> forums, where I and others can see and answer them. >>>> >>>> >>>> >>>> >>> >>> >>> >> >> >> -- >> Dianne Hackborn >> Android framework engineer >> hack...@android.com >> >> Note: please don't send private questions to me, as I don't have time to >> provide private support. All such questions should be posted on public >> forums, where I and others can see and answer them. >> >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "android-framework" group. To post to this group, send email to android-framework@googlegroups.com To unsubscribe from this group, send email to android-framework+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-framework?hl=en -~----------~----~----~----~------~----~------~--~---