这是关于在TomTom设备上运行应用程序的问题,而不是在任意Android设备上运行。
在尝试启动本机Camera活动时,我在生产设备上有一个随机异常,我无法在我的开发TomTom上重现。这仅适用于TomTom设备;它不会发生在我的应用程序运行的任何其他Androids上。
我不会在这里做任何事情,只是启动一个原生相机Activity
拍摄带有一些URI的照片,但随机它会使我的应用程序崩溃。我想至少有些TomTom开发者应该在TomTom本机Camera活动中遇到过这个问题。任何有助于解决此问题的帮助都非常受欢迎。
我的代码是这样的:
final Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
i.addFlags(FLAG_GRANT_WRITE_URI_PERMISSION);
final List<ResolveInfo> resInfoList = packageManager.queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList)
{
String packageName = resolveInfo.activityInfo.packageName;
activity.grantUriPermission(packageName, photoURI, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
activity.startActivityForResult(i, requestCode);
异常堆栈跟踪如下所示:
致命异常:java.lang.RuntimeException:Surface已经存在 锁定 在android.view.Surface.lockCanvas(Surface.java:242) 在android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2421) 在android.view.ViewRootImpl.draw(ViewRootImpl.java:2395) 在android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2239) 在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1872) 在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) 在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5481) 在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:749) 在android.view.Choreographer.doCallbacks(Choreographer.java:562) 在android.view.Choreographer.doFrame(Choreographer.java:532) 在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:735) 在android.os.Handler.handleCallback(Handler.java:730) 在android.os.Handler.dispatchMessage(Handler.java:92) 在android.os.Looper.loop(Looper.java:137) 在android.app.ActivityThread.main(ActivityThread.java:5150) at java.lang.reflect.Method.invokeNative(Method.java) 在java.lang.reflect.Method.invoke(Method.java:525) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:760) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 在dalvik.system.NativeStart.main(NativeStart.java)