es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede iniciar un servicio desde otra aplicación con el error “no encontrado”.

Hay dos aplicaciones, la primera tiene un servicio y puede iniciarlo. La segunda aplicación intenta iniciar el servicio de la primera aplicación pero no puede hacerlo porque el servicio no se encuentra. Creo que el servicio está habilitado y exportado (ver código a continuación). ¿Qué está mal?

El manifiesto de la primera aplicación con la declaración del servicio:

<manifest ...="" package="com.example.fooapplication">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"></uses-permission>
<application ...="">
    <service android:name=".FooService" android:enabled="true" android:exported="true">
    </service>

    <activity android:name=".MainActivity" ...="">
        ...
    </activity>
</application>
</manifest>

Desde esa aplicación puedo iniciar FooService con los siguientes comandos:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.fooapplication", "com.example.fooapplication.FooService"));
Log.d("happy", "FooApplication " + intent);
startService(intent);

Funciona, aquí está el registro (las dos últimas líneas son del propio servicio):

12-19 10:18:58.520 12869 12869 D happy   : FooApplication Intent { cmp=com.example.fooapplication/.FooService }
12-19 10:18:58.568 12869 12869 D happy   : FooService constructor
12-19 10:18:58.568 12869 12869 D happy   : FooService onCreate

El mismo código en la segunda aplicación no puede iniciar ese servicio:

12-19 10:31:22.300 13644 13644 D happy   : BarApplication Intent { cmp=com.example.fooapplication/.FooService }
12-19 10:31:22.301  1712  3872 W ActivityManager: Unable to start service Intent { cmp=com.example.fooapplication/.FooService } U=0: not found

Los parámetros de compilación para ambas aplicaciones son:

compileSdkVersion 30
buildToolsVersion "30.0.0"
minSdkVersion 23
targetSdkVersion 30

Dispositivo con Android 12 (SDK 31)

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema puede ser causado por el hecho de que la segunda aplicación no está incluyendo correctamente la primera aplicación como dependencia. Para poder acceder al servicio desde la primera aplicación, la segunda aplicación necesita incluirla como dependencia en el archivo build.gradle, de la siguiente manera:

    dependencies {
        implementation project(":my-first-app")
    }
    

    donde “my-first-app” es el nombre de la primera aplicación.

    Además, si la segunda aplicación está instalada en un dispositivo o emulador diferente a la primera aplicación, no podrá acceder al servicio aunque la primera aplicación esté instalada en el mismo dispositivo/emulador. Esto se debe a que cada aplicación se ejecuta en su propio entorno aislado y no puede acceder a los componentes de otras aplicaciones a menos que se permita explícitamente (por ejemplo, mediante filtros de intent o permisos).

    Si ambas aplicaciones están instaladas en el mismo dispositivo/emulador y la primera aplicación está correctamente incluida como dependencia en la segunda aplicación, intenta limpiar y reconstruir ambas aplicaciones. A veces Android Studio puede confundirse con las dependencias y no actualizarlas correctamente, lo que puede llevar a problemas como el descrito en la pregunta.

    Por último, asegúrate de que los nombres de paquete y clase utilizados en el intent para iniciar el servicio sean correctos y coincidan con el manifiesto de la primera aplicación. Un error tipográfico en el nombre de paquete o clase podría causar el error de “no encontrado”.

Comments are closed.