Interfaz AIDL entre dos aplicaciones

He pegado una pared total con la interfaz AIDL. Tengo una aplicación que debe controlarse a través de una aplicación de terceros (tengo suficiente control sobre esto para que pueda pedirles que implementen lo que necesite en su actividad)

Originalmente, mi aplicación también era una actividad con interfaz y todo, pero la he cambiado para que sea un servicio en segundo plano y para las pruebas, creé una aplicación ficticia que logra iniciar la aplicación de servicio en segundo plano.

Ahora me gustaría una forma de solicitar llamadas al método del servicio (principalmente; iniciar, detener, enviar datos). He creado los archivos .aidl para ambas aplicaciones. El archivo aidl implementa solo un método (esto es cortesía de alguna otra pregunta aquí).

package foo.testapp;
interface IScript 
{
     String executeScript(String script); 
}

mientras que la otra ayuda es la misma, excepto que el paquete es "foo.otherapp". Las implementaciones que encontré en línea tenían el mismo paquete para ambos archivos de ayuda, pero para mí esto causa un error (supongo que esto es solo un problema de mi parte, ya que odio los espacios de nombres y los paquetes, por lo que a menudo los nombro mal, si es importante cambiarlos, puedo hacerlo)

El plan consistía en utilizar este método para enviar una cadena al servicio y simplemente cambiar las cadenas predefinidas para llamar al método correcto (también podría implementar tres métodos diferentes si mejora el uso).

De todos modos ... No puedo obtener la ayuda para conectarse, recibo el error "No se puede iniciar la intención del servicio

{act = foo.testapp.IScript}: no encontrado

Supongo que esta suposición tiene algo que ver con mis malentendidos, es decir. nombres de paquete más o menos)

esta es la implementación en mi pruebaactividad aplicación

private final IScript.Stub mBinder = new IScript.Stub()
{
    @Override
    public String executeScript(String script) throws RemoteException
    {
        // TODO Auto-generated method stub
    }
};
IScript mService = null;
private ServiceConnection mConnection = new ServiceConnection() 
{
     public void onServiceConnected(ComponentName className, IBinder service) 
     {
         mService = IScript.Stub.asInterface(service);
     }
     public void onServiceDisconnected(ComponentName className) 
     {
         mService = null;
     }
 };

Luego, en el método OnCreate () haré esto:

bindService(new Intent(IScript.class.getName()),
            mConnection, Context.BIND_AUTO_CREATE);

En clase de servicio tengo esto;

@Override
public IBinder onBind(Intent intent) 
{
    // Select the interface to return.  If your service only implements
    // a single interface, you can just return it here without checking
    // the Intent.
    if (IScript.class.getName().equals(intent.getAction())) 
    {
        return mBinder;
    }
    return null;
}

/**
 * The IRemoteInterface is defined through IDL
 */
private final IScript.Stub mBinder = new IScript.Stub() 
{
    @Override
    public String executeScript(String script) throws RemoteException 
    {
        if (script == "test")
        {
            return "foo";
        }
        return "fail";
    }
};

Y finalmente los archivos de manifiesto;

bueno, en realidad, no tengo idea si tengo que agregar algo en los archivos de manifiesto al tratar con la ayuda. En el ejemplo que vi esto;

    <intent-filter>
        <action android:name="foo.otherapp.IScript" />
    </intent-filter>

y

    <intent-filter>
        <action android:name="foo.testapp.IScript" />
    </intent-filter>

Supongo que los errores podrían estar en cualquier parte. He estado tratando de configurar esto con chicle y curitas. Supongo que acabo de entender mal un concepto básico de esto.

De todos modos, cualquier ayuda es bienvenida.

¡Gracias por adelantado!

Respuestas a la pregunta(2)

Su respuesta a la pregunta