Example usage for android.os Binder attachInterface

List of usage examples for android.os Binder attachInterface

Introduction

In this page you can find the example usage for android.os Binder attachInterface.

Prototype

public void attachInterface(@Nullable IInterface owner, @Nullable String descriptor) 

Source Link

Document

Convenience method for associating a specific interface with the Binder.

Usage

From source file:edu.umich.flowfence.sandbox.SandboxService.java

@Override
public IBinder onBind(Intent i) {
    if (localLOGD) {
        Log.d(TAG, "Bound");
    }/*from   w w w. j av a2  s . c  om*/
    Bundle extras = i.getExtras();
    if (extras == null) {
        throw new IllegalArgumentException("No extras");
    }
    IBinder api = extras.getBinder(EXTRA_TRUSTED_API);
    if (api == null) {
        throw new IllegalArgumentException("Trusted API not found in extras");
    }
    IBinder root = extras.getBinder(EXTRA_ROOT_SERVICE);
    if (root == null) {
        throw new IllegalArgumentException("FlowfenceService not found in extras");
    }
    mTrustedAPI = ITrustedAPI.Stub.asInterface(api);
    mRootService = IFlowfenceService.Stub.asInterface(root);
    mID = extras.getInt(EXTRA_SANDBOX_ID, -1);

    if (localLOGV) {
        ClassLoader cl = getClassLoader();
        Log.v(TAG, "ClassLoader chain:");
        while (cl != null) {
            Log.v(TAG, cl.toString());
            cl = cl.getParent();
        }
        Log.v(TAG, "<end of chain>");
    }

    final String[] packagesToLoad = extras.getStringArray(EXTRA_KNOWN_PACKAGES);
    getBackgroundHandler().post(new Runnable() {
        @Override
        public void run() {
            if (localLOGD) {
                Log.d(TAG, "Preloading resolve code");
            }

            // Run through a fake transaction, to preload the appropriate classes.
            QMDescriptor preloadDesc = QMDescriptor.forStatic(SandboxService.this, SandboxService.class,
                    "resolveStub");

            Binder testBinder = new Binder() {
                @Override
                protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
                        throws RemoteException {
                    return mBinder.onTransact(code, data, reply, flags);
                }
            };
            testBinder.attachInterface(null, "");

            ISandboxService proxy = ISandboxService.Stub.asInterface(testBinder);
            try {
                proxy.resolveQM(preloadDesc, false, null);
            } catch (Exception e) {
                Log.w(TAG, "Couldn't preload resolve", e);
            }

            if (localLOGD) {
                Log.d(TAG, "Preloading packages");
            }

            // Load up packages the trusted service tells us we might need.
            for (String packageName : ArrayUtils.nullToEmpty(packagesToLoad)) {
                try {
                    if (localLOGD) {
                        Log.d(TAG, "Preloading " + packageName);
                    }
                    getContextForPackage(packageName);
                } catch (PackageManager.NameNotFoundException e) {
                    Log.w(TAG, "Can't preload package", e);
                }
            }

            Log.i(TAG, "Sandbox #" + mID + ": preload complete");
        }
    });
    return mBinder;
}

From source file:edu.umich.oasis.sandbox.SandboxService.java

@Override
public IBinder onBind(Intent i) {
    if (localLOGD) {
        Log.d(TAG, "Bound");
    }//from  www .  j a v  a2 s  .c  om
    Bundle extras = i.getExtras();
    if (extras == null) {
        throw new IllegalArgumentException("No extras");
    }
    IBinder api = extras.getBinder(EXTRA_TRUSTED_API);
    if (api == null) {
        throw new IllegalArgumentException("Trusted API not found in extras");
    }
    IBinder root = extras.getBinder(EXTRA_ROOT_SERVICE);
    if (root == null) {
        throw new IllegalArgumentException("OASISService not found in extras");
    }
    mTrustedAPI = ITrustedAPI.Stub.asInterface(api);
    mRootService = IOASISService.Stub.asInterface(root);
    mID = extras.getInt(EXTRA_SANDBOX_ID, -1);

    if (localLOGV) {
        ClassLoader cl = getClassLoader();
        Log.v(TAG, "ClassLoader chain:");
        while (cl != null) {
            Log.v(TAG, cl.toString());
            cl = cl.getParent();
        }
        Log.v(TAG, "<end of chain>");
    }

    final String[] packagesToLoad = extras.getStringArray(EXTRA_KNOWN_PACKAGES);
    getBackgroundHandler().post(new Runnable() {
        @Override
        public void run() {
            if (localLOGD) {
                Log.d(TAG, "Preloading resolve code");
            }

            // Run through a fake transaction, to preload the appropriate classes.
            SodaDescriptor preloadDesc = SodaDescriptor.forStatic(SandboxService.this, SandboxService.class,
                    "resolveStub");

            Binder testBinder = new Binder() {
                @Override
                protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
                        throws RemoteException {
                    return mBinder.onTransact(code, data, reply, flags);
                }
            };
            testBinder.attachInterface(null, "");

            ISandboxService proxy = ISandboxService.Stub.asInterface(testBinder);
            try {
                proxy.resolveSoda(preloadDesc, false, null);
            } catch (Exception e) {
                Log.w(TAG, "Couldn't preload resolve", e);
            }

            if (localLOGD) {
                Log.d(TAG, "Preloading packages");
            }

            // Load up packages the trusted service tells us we might need.
            for (String packageName : ArrayUtils.nullToEmpty(packagesToLoad)) {
                try {
                    if (localLOGD) {
                        Log.d(TAG, "Preloading " + packageName);
                    }
                    getContextForPackage(packageName);
                } catch (PackageManager.NameNotFoundException e) {
                    Log.w(TAG, "Can't preload package", e);
                }
            }

            Log.i(TAG, "Sandbox #" + mID + ": preload complete");
        }
    });
    return mBinder;
}