OpenCV Service Intent должен быть явным, Android 5.0 Lollipop
Я создаю это приложение для своего диплом бакалавра, который использует OpenCV. Все шло хорошо, пока я не обновил свой телефон Android до 5.0.
После обновления мой проект перестает работать, из-за этого:
java.lang.IllegalArgumentException: служебное намерение должно быть явным: Intent {act = org.opencv.engine.BIND}
Я прочитал и сообщил о новых ограничениях на неявные намерения в Android 5.0, но как я могу обойти это, чтобы OpenCV работал?
Я могу изменить файл AsyncServiceHelper.java в SDK OpenCV, чтобы попытаться исправить это, но как я могу получить объект класса службы OpenCV, который должен быть запущен, чтобы использовать явное намерение?
Или, может быть, этот подход является тупиком, но есть ли какие-либо другие подходы к этому, или мои единственные варианты - либо обновление SDK OpenCV, либо понизить версию Android на моем устройстве?
Ответы
Ответ 1
Я думаю, что изменение андроида: targetSdkVersion - это не решение очень долго;) Поэтому вместо этого я добавил имя пакета, чтобы сделать намерение явным:
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;
}
}
Возможно, кто-то может сообщить об этом открывающемуся opencv, чтобы нажать исправление.
РЕДАКТИРОВАТЬ: Из комментария ниже: для кого-либо, интересующегося местоположением этой функции, он находится в файле src/main/java/org/opencv/android/AsyncServiceHelper.java
Ответ 2
Я увидел ответ здесь, когда на работе, протестировал его и решил проблему. По-видимому, он был удален тем временем. Повторная отправка его для справки
Решение изменилось: android: targetSdkVersion в AndroidManifest.xml от 21 до 19. Не могу поверить, что это было так легко, и я потерял день, пытаясь понять это, купи, эй, спасибо еще тому, кто отправил исходный ответ:)
Спасибо stackoverflow!
Ответ 3
Я изменил версию OpenCV до 3.0 и проблема была решена.
from
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallbck);
to
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallbck);
Ответ 4
Чтобы запустить приложение в любой версии Android, то есть последней версии.
Удалить тег - android: targetSdkVersion.