Связывание IBinder и LocalBinder с Pyjnius - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь обернуть Android API, найденный здесь https://github.com/noke-inc/noke-mobile-library-android/blob/c95e45aeba686ec4c5cca932c9b47240d0ebc9cd/README.md

Я думаю, я все понял, прими эту строку

public void onServiceConnected(ComponentName className, IBinder rawBinder) {

    //Store reference to service
    mNokeService = ((NokeDeviceManagerService.LocalBinder) rawBinder).getService();

И это код API, доступ к которому можно найти здесь https://github.com/noke-inc/noke-mobile-library-android/blob/ddca0be5712cf36132d551af009a1b55a37ca776/nokemobilelibrary/src/main/java/com/noke/nokemobilelibrary/NokeDeviceManagerService.java

    public class LocalBinder extends Binder{
        public NokeDeviceManagerService getService(){
            return NokeDeviceManagerService.this;
        }
}

Что я сейчас пытаюсь сделать с pyjnius, так это

NokeDeviceManagerService = autoclass('com.noke.nokemobilelibrary.NokeDeviceManagerService')
NokeDevice = autoclass('com.noke.nokemobilelibrary.NokeDevice')
NokeMobileError = autoclass('com.noke.nokemobilelibrary.NokeMobileError')
NokeServiceListener =autoclass('com.noke.nokemobilelibrary.NokeServiceListener')

class ServiceConnection(PythonJavaClass):
    __javainterfaces__ = ('android.content.ServiceConnection')
    __javacontext__ = 'app'

    @java_method('(Landroid/content/ComponentName;Landroid/os/IBinder;)V')
    def onServiceConnected(className, rawBinder):
        nokeDeviceManagerService = NokeDeviceManagerService()
        nokeService = cast(nokeDeviceManagerService.LocalBinder,rawBinder)
        mNokeService = nokeService.getService()
        #mNokeService = ((NokeDeviceManagerService.LocalBinder)rawBinder).getService()

        mNokeServiceListener = NokeServiceListener()
        mNokeService.registerNokeListener(mNokeServiceListener)

        mNokeService.startScanningForNokeDevices()

Я немного растерялся, что делать на этом шаге. Там не так много примеров для связывания услуг вместе.

Внутри класса NokeDeviceManagerService есть это

public class NokeDeviceManagerService extends Service {
   .
   .
   .
   /**
     * Class for binding service to activity
     */
    public class LocalBinder extends Binder{
        public NokeDeviceManagerService getService(){
            return NokeDeviceManagerService.this;
        }
}

И я получаю сообщение об ошибке AttributeError: объект 'com.noke.nokemobilelibrary.NokeDeviceManagerServic' не имеет атрибута 'LocalBinder'

...