example android opencv android-intent opencv4android

example - OpenCV Service Intent debe ser explícito, Android 5.0 Lollipop



opencv android camera (4)

Estoy creando esta aplicación para mi diploma de licenciatura que utiliza OpenCV. Todo iba bien hasta que actualicé el Android de mi teléfono a 5.0.

Después de la actualización, mi proyecto dejó de funcionar, debido a esto:

java.lang.IllegalArgumentException: la intención del servicio debe ser explícita: intención {act = org.opencv.engine.BIND}

He leído y me he informado sobre las nuevas restricciones con respecto a los intentos implícitos en Android 5.0, pero ¿cómo puedo solucionar esto para que OpenCV funcione?

Podría modificar el archivo AsyncServiceHelper.java en el SDK de OpenCV para intentar solucionarlo, pero ¿cómo puedo obtener el objeto Clase del servicio de OpenCV que debe ejecutarse para usar una intención explícita?

O tal vez este enfoque sea un callejón sin salida, pero ¿existen otros enfoques para esto, o mis únicas opciones son una actualización del SDK de OpenCV o una versión anterior de Android en mi dispositivo?


Creo que cambiar el android: targetSdkVersion no es una solución por mucho tiempo;) Entonces, en lugar de eso, agregué el nombre del paquete para hacer explícita la intención:

public static boolean initOpenCV(String Version, final Context AppContext, final LoaderCallbackInterface Callback) { AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback); Intent intent = new Intent("org.opencv.engine.BIND"); intent.setPackage("org.opencv.engine"); if (AppContext.bindService(intent, helper.mServiceConnection, Context.BIND_AUTO_CREATE)) { return true; } else { AppContext.unbindService(helper.mServiceConnection); InstallService(AppContext, Callback); return false; } }

Tal vez alguien pueda decirle a un comentarista de opencv acerca de esto, para impulsar un hotfix.

EDITAR: De un comentario a continuación: Para cualquier persona que se pregunte la ubicación de esta función, está en src / main / java / org / opencv / android / AsyncServiceHelper.java


He cambiado la versión de OpenCV a 3.0 y el problema se resolvió:

Desde

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallbck);

A

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallbck);


Para ejecutar la aplicación en cualquier versión de Android, es decir, la última versión.

Eliminar etiqueta - Android: targetSdkVersion .


Vi una respuesta aquí cuando estaba en el trabajo, la probé y eso resolvió el problema. Al parecer, fue eliminado mientras tanto. Publicándolo de nuevo como referencia

La solución estaba cambiando: android: targetSdkVersion en el AndroidManifest.xml de 21 a 19 . No puedo creer que fuera tan fácil y perdí un día tratando de averiguarlo, compre, hey, gracias de nuevo a quien publicó la respuesta inicial :)

Gracias !