Opencv停止在Android 6.0上工作
我在我的应用程序上使用Opencv,它在安卓4.3上运行良好,但在安卓6.0上甚至无法打开 我在SO上查找了一个解决方案,找到了一个上面写着设置包名的解决方案。所以我做了 以下代码:Opencv停止在Android 6.0上工作,android,opencv,android-context,Android,Opencv,Android Context,我在我的应用程序上使用Opencv,它在安卓4.3上运行良好,但在安卓6.0上甚至无法打开 我在SO上查找了一个解决方案,找到了一个上面写着设置包名的解决方案。所以我做了 以下代码: public static boolean initOpenCV(String Version, final Context AppContext, final LoaderCallbackInterface Callback) { AsyncServiceHelper helper = 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;
}
}
但现在我得到了以下错误:
11-18 10:14:43.447 24901-24930/br.com.ibramed.dermos E/AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
11-18 10:14:43.447 24901-24930/br.com.ibramed.dermos E/AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:571)
11-18 10:14:43.447 24901-24930/br.com.ibramed.dermos E/AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
11-18 10:14:43.447 24901-24930/br.com.ibramed.dermos E/AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
11-18 10:14:43.447 24901-24930/br.com.ibramed.dermos E/AndroidRuntime: at android.app.Dialog.show(Dialog.java:319)
在以下代码中:
case InstallCallbackInterface.NEW_INSTALLATION:
{
Looper.prepare();
Log.d("Debug", ""+mAppContext);
AlertDialog InstallMessage = new AlertDialog.Builder(mAppContext).create();
InstallMessage.setTitle("Package not found");
InstallMessage.setMessage(callback.getPackageName() + " package was not found! Try to install it?");
InstallMessage.setCancelable(false); // This blocks the 'BACK' button
InstallMessage.setButton(AlertDialog.BUTTON_POSITIVE, "Yes", new OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
callback.install();
}
});
InstallMessage.setButton(AlertDialog.BUTTON_NEGATIVE, "No", new OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
callback.cancel();
}
});
InstallMessage.show();
} break;
我搜索并发现一些人说要跟踪主上下文,因为线程没有上下文。但我的应用程序已经做到了这一点,并使用主上下文创建AlertDialogs,但仍然无法工作
当应用程序显示AlertDialog时出错
我真的不知道还能做什么。有人能帮忙吗?据我所知,在服务或应用程序类中,您无法通过android 6.0的视图获取上下文,因此当OpenCv尝试显示AlertDialog时,它不知道绑定到哪个活动对话框并崩溃。 使用前,请尝试在Activity onCreate方法中初始化OpenCv 我在MainActivity中的工作init方法(kotlin上的代码):
据我所知,在服务或应用程序类中,您无法使用android 6.0的View获取上下文,因此,当OpenCv尝试显示AlertDialog时,它不知道绑定对话框的活动是什么,并且会崩溃。 使用前,请尝试在Activity onCreate方法中初始化OpenCv 我在MainActivity中的工作init方法(kotlin上的代码):
您在代码的这一部分中所做的任何事情都需要许可吗?我在Marshmallow上运行东西时遇到的唯一问题是在Marshmallow的代码中处理权限的新方法。可能是为了下载opencv包而使用Internet。但我读到,互联网是一个正常的要求,只有包括在清单是足够的。我也试着在安卓5.3上运行,它运行正常。好吧,我所做的只是一个临时解决方案。我从Google Play手动安装了OpenCV管理器,应用程序开始工作。您在该代码部分所做的任何事情都需要许可吗?我在Marshmallow上运行东西时遇到的唯一问题是在Marshmallow的代码中处理权限的新方法。可能是为了下载opencv包而使用Internet。但我读到,互联网是一个正常的要求,只有包括在清单是足够的。我也试着在安卓5.3上运行,它运行正常。好吧,我所做的只是一个临时解决方案。我从Google Play手动安装了OpenCV管理器,应用程序开始工作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, object : BaseLoaderCallback(this@HistoryActivity) {
override fun onManagerConnected(status: Int) {
if (LoaderCallbackInterface.SUCCESS == status)
Log.i(TAG, "OpenCV was loaded")
else
super.onManagerConnected(status)
}
})
}