【问题标题】:html video control is not working in codenameone app for androidhtml 视频控件在 Android 的 codenameone 应用程序中不起作用
【发布时间】:2018-08-30 10:42:23
【问题描述】:

我有一个代号应用程序,它调用一个用 html5 开发的安全网站。它使用 html 视频控件来拍摄快照。该网站在 chrome 中完美运行。但是当我从安装在 Android 设备上的 codenameone 应用程序调用它时,视频控件不会出现在页面上。所需的相机权限在 App 中设置。

日志如下:

LOGS....--------- main 开始

09-07 15:43:39.586 23032 23085 I Adreno  : QUALCOMM build                   : 84c9b58, I4fcced3c6d
09-07 15:43:39.586 23032 23085 I Adreno  : Build Date                       : 01/17/18
09-07 15:43:39.586 23032 23085 I Adreno  : OpenGL ES Shader Compiler Version: XE031.09.00.04
09-07 15:43:39.586 23032 23085 I Adreno  : Local Branch                     : 
09-07 15:43:39.586 23032 23085 I Adreno  : Remote Branch                    : refs/tags/AU_LINUX_ANDROID_LA.UM.5.5.R1.07.01.02.269.061
09-07 15:43:39.586 23032 23085 I Adreno  : Remote Branch                    : NONE
09-07 15:43:39.586 23032 23085 I Adreno  : Reconstruct Branch               : NOTHING
09-07 15:43:39.595 23032 23085 I OpenGLRenderer: Initialized EGL, version 1.4
09-07 15:43:39.596 23032 23085 D OpenGLRenderer: Swap behavior 1
09-07 15:43:39.619 23032 23084 I Codename One: Resource not found: theme_phone.ovr
09-07 15:43:39.619 23032 23084 I Codename One: Resource not found: theme_android.ovr
09-07 15:43:39.619 23032 23084 I Codename One: Resource not found: theme_android-phone.ovr
09-07 15:43:39.630 23032 23041 I art     : Do partial code cache collection, code=9KB, data=30KB
09-07 15:43:39.630 23032 23041 I art     : After code cache collection, code=9KB, data=30KB
09-07 15:43:39.630 23032 23041 I art     : Increasing code cache capacity to 128KB
09-07 15:43:39.684 23032 23084 D RedirectToCameraHtml: [EDT] 0:0:0,124 - WARNING: Theme sets the commandBehavior constant which is deprecated.  Please update the theme to NOT include this theme constant.  Using commandBehavior may cause your app to perform in unexpected ways.  In particular, using SIDE command behavior in conjunction with Toolbar.setOnTopSideMenu(true) may result in runtime exceptions.
09-07 15:43:39.685 23032 23084 D RedirectToCameraHtml: [EDT] 0:0:0,126 - WARNING: Display.setCommandBehavior() is deprecated, Using it may result in unexpected behaviour. In particular, using COMMAND_BEHAVIOR_SIDE_NAVIGATION in conjunction with Toolbar.setOnTopSideMenu(true) may result in runtime errors.
09-07 15:43:39.691 23032 23094 D NetworkSecurityConfig: No Network Security Config specified, using platform default
09-07 15:43:39.707 23032 23094 D ApplicationLoaders: ignored Vulkan layer search path /data/app/com.android.chrome-2/lib/arm64:/data/app/com.android.chrome-2/base.apk!/lib/arm64-v8a for namespace 0x7f95e31160
09-07 15:43:39.708 23032 23084 I Timeline: Timeline: Activity_launch_request time:42584312 intent:Intent { act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.google.android.packageinstaller (has extras) }
09-07 15:43:39.714 23032 23094 I WebViewFactory: Loading com.android.chrome version 68.0.3440.91 (code 344009152)
09-07 15:43:39.769 23032 23041 I art     : Compiler allocated 5MB to compile void com.codename1.ui.plaf.UIManager.resetThemeProps(java.util.Hashtable)
09-07 15:43:39.776 23032 23084 D Codename One: sizechanged: 1080 1964 com.codename1.impl.android.CodenameOneView@8dc66a5
09-07 15:43:39.781 23032 23032 E SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
09-07 15:43:39.781 23032 23032 E SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
09-07 15:43:39.795 23032 23094 I cr_LibraryLoader: Time to load native libraries: 8 ms (timestamps 4390-4398)
09-07 15:43:39.808 23032 23094 I chromium: [INFO:library_loader_hooks.cc(36)] Chromium logging enabled: level = 0, default verbosity = 0
09-07 15:43:39.808 23032 23108 E cr_VariationsUtils: Failed reading seed file "/data/user/0/com.mycompany.myapp/app_webview/variations_seed_new": /data/user/0/com.mycompany.myapp/app_webview/variations_seed_new (No such file or directory)
09-07 15:43:39.808 23032 23094 I cr_LibraryLoader: Expected native library version number "68.0.3440.91", actual native library version number "68.0.3440.91"
09-07 15:43:39.809 23032 23108 E cr_VariationsUtils: Failed reading seed file "/data/user/0/com.mycompany.myapp/app_webview/variations_seed": /data/user/0/com.mycompany.myapp/app_webview/variations_seed (No such file or directory)
09-07 15:43:39.815 23032 23108 W System  : ClassLoader referenced unknown path: 
09-07 15:43:39.818 23032 23108 D ApplicationLoaders: ignored Vulkan layer search path /data/app/com.android.chrome-2/lib/arm64:/data/app/com.android.chrome-2/base.apk!/lib/arm64-v8a for namespace 0x7f95e311d0
09-07 15:43:39.851 23032 23041 I art     : Do partial code cache collection, code=39KB, data=61KB
09-07 15:43:39.851 23032 23041 I art     : After code cache collection, code=39KB, data=61KB
09-07 15:43:39.851 23032 23041 I art     : Increasing code cache capacity to 256KB
09-07 15:43:39.853 23032 23041 I art     : Compiler allocated 4MB to compile com.codename1.ui.plaf.Style com.codename1.ui.plaf.UIManager.createStyle(java.lang.String, java.lang.String, boolean)
09-07 15:43:42.420 23032 23032 E SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
09-07 15:43:42.420 23032 23032 E SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
09-07 15:43:42.432 23032 23084 D RedirectToCameraHtml: [EDT] 0:0:2,874 - getCameraPermission() >> true
09-07 15:43:42.534 23032 23032 I cr_BrowserStartup: Initializing chromium process, singleProcess=true
09-07 15:43:42.538 23032 23032 I cr_base : Android Locale: en_IN requires .pak files: [en-GB, en-US]
09-07 15:43:42.553 23032 23032 W ResourceType: Failure getting entry for 0x7f1204a3 (t=17 e=1187) (error -2147483647)
09-07 15:43:42.640 23032 23032 I art     : Rejecting re-init on previously-failed class java.lang.Class<ul>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse;
09-07 15:43:42.640 23032 23032 I art     :   at xf com.android.webview.chromium.WebViewChromiumFactoryProvider.a(android.webkit.WebView, android.content.Context) (SourceFile:209)
09-07 15:43:42.640 23032 23032 I art     :   at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (SourceFile:63)
09-07 15:43:42.640 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:636)
09-07 15:43:42.640 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
09-07 15:43:42.640 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
09-07 15:43:42.640 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:542)
09-07 15:43:42.641 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:532)
09-07 15:43:42.641 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21$1.<init>(com.codename1.impl.android.AndroidImplementation$21, android.content.Context) (AndroidImplementation.java:4143)
09-07 15:43:42.641 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21.run() (AndroidImplementation.java:4143)
09-07 15:43:42.641 23032 23032 I art     :   at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:754)
09-07 15:43:42.641 23032 23032 I art     :   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
09-07 15:43:42.641 23032 23032 I art     :   at void android.os.Looper.loop() (Looper.java:163)
09-07 15:43:42.641 23032 23032 I art     :   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6396)
09-07 15:43:42.641 23032 23032 I art     :   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
09-07 15:43:42.641 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:904) 
09-07 15:43:42.641 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:794)
09-07 15:43:42.641 23032 23032 I art     : Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.android.chrome-2/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-2/lib/arm64, /data/app/com.android.chrome-2/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
09-07 15:43:42.641 23032 23032 I art     :   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
09-07 15:43:42.641 23032 23032 I art     :   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
09-07 15:43:42.641 23032 23032 I art     :   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
09-07 15:43:42.641 23032 23032 I art     :   at xf com.android.webview.chromium.WebViewChromiumFactoryProvider.a(android.webkit.WebView, android.content.Context) (SourceFile:209)
09-07 15:43:42.641 23032 23032 I art     :   at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (SourceFile:63)
09-07 15:43:42.641 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:636)
09-07 15:43:42.641 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
09-07 15:43:42.641 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
09-07 15:43:42.641 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:542)
09-07 15:43:42.641 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:532)
09-07 15:43:42.641 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21$1.<init>(com.codename1.impl.android.AndroidImplementation$21, android.content.Context) (AndroidImplementation.java:4143)
09-07 15:43:42.641 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21.run() (AndroidImplementation.java:4143)
09-07 15:43:42.641 23032 23032 I art     :   at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:754)
09-07 15:43:42.641 23032 23032 I art     :   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
09-07 15:43:42.641 23032 23032 I art     :   at void android.os.Looper.loop() (Looper.java:163)
09-07 15:43:42.641 23032 23032 I art     :   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6396)
09-07 15:43:42.641 23032 23032 I art     :   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
09-07 15:43:42.641 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:904)
09-07 15:43:42.642 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:794)
09-07 15:43:42.642 23032 23032 I art     : 
09-07 15:43:42.647 23032 23032 I art     : Rejecting re-init on previously-failed class java.lang.Class<xo>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/RenderProcessGoneDetail;
09-07 15:43:42.647 23032 23032 I art     :   at xf com.android.webview.chromium.WebViewChromiumFactoryProvider.a(android.webkit.WebView, android.content.Context) (SourceFile:209)
09-07 15:43:42.647 23032 23032 I art     :   at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (SourceFile:63)
09-07 15:43:42.647 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:636)
09-07 15:43:42.647 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
09-07 15:43:42.647 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
09-07 15:43:42.647 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:542)
09-07 15:43:42.647 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:532)
09-07 15:43:42.647 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21$1.<init>(com.codename1.impl.android.AndroidImplementation$21, android.content.Context) (AndroidImplementation.java:4143)
09-07 15:43:42.647 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21.run() (AndroidImplementation.java:4143)
09-07 15:43:42.647 23032 23032 I art     :   at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:754)
09-07 15:43:42.647 23032 23032 I art     :   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
09-07 15:43:42.647 23032 23032 I art     :   at void android.os.Looper.loop() (Looper.java:163)
09-07 15:43:42.647 23032 23032 I art     :   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6396)
09-07 15:43:42.647 23032 23032 I art     :   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
09-07 15:43:42.647 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:904)
09-07 15:43:42.648 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:794)
09-07 15:43:42.648 23032 23032 I art     : Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.RenderProcessGoneDetail" on path: DexPathList[[zip file "/data/app/com.android.chrome-2/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-2/lib/arm64, /data/app/com.android.chrome-2/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
09-07 15:43:42.648 23032 23032 I art     :   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
09-07 15:43:42.648 23032 23032 I art     :   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
09-07 15:43:42.648 23032 23032 I art     :   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
09-07 15:43:42.648 23032 23032 I art     :   at xf com.android.webview.chromium.WebViewChromiumFactoryProvider.a(android.webkit.WebView, android.content.Context) (SourceFile:209)
09-07 15:43:42.648 23032 23032 I art     :   at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (SourceFile:63)
09-07 15:43:42.648 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:636)
09-07 15:43:42.648 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
09-07 15:43:42.648 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
09-07 15:43:42.648 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:542)
09-07 15:43:42.648 23032 23032 I art     :   at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:532)
09-07 15:43:42.648 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21$1.<init>(com.codename1.impl.android.AndroidImplementation$21, android.content.Context) (AndroidImplementation.java:4143)
09-07 15:43:42.648 23032 23032 I art     :   at void com.codename1.impl.android.AndroidImplementation$21.run() (AndroidImplementation.java:4143)
09-07 15:43:42.648 23032 23032 I art     :   at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:754)
09-07 15:43:42.648 23032 23032 I art     :   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
09-07 15:43:42.648 23032 23032 I art     :   at void android.os.Looper.loop() (Looper.java:163)
09-07 15:43:42.648 23032 23032 I art     :   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6396)
09-07 15:43:42.648 23032 23032 I art     :   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
09-07 15:43:42.648 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:904)
09-07 15:43:42.648 23032 23032 I art     :   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:794)
09-07 15:43:42.648 23032 23032 I art     : 
09-07 15:43:42.751 23032 23032 D EgretLoader: EgretLoader(Context context)
09-07 15:43:42.754 23032 23032 D EgretLoader: The context is not activity

【问题讨论】:

  • 如何将BrowserComponent 添加到 UI 中?如果它不在表单边框布局的中心,则不起作用。仅供参考,Android 需要提示权限,因此向 XML 添加权限是不够的。
  • BrowserComponent 被添加到 BorderLayout 的中心。相机权限在 codenameone_settings.properties 中设置。显示包含视频控件的html页面时,navigator.mediaDevices.getUserMedia(constraints)返回错误为“NotAllowedError: Permission denied”
  • 我把日志做成了一个源代码块,因为它真的很难阅读......

标签: codenameone


【解决方案1】:

您需要在 Android 6+ 中提示输入本机权限。将它们添加到 XML 仅适用于旧版本的 Android。如果您在 Codename One 中使用相机 API,这通常是自动的,但不适用于 HTML,因为我们无法判断您是否会尝试访问相机。

你可以创建一个native interface 类似的东西:

public boolean promptCameraPermission();

您可以在所有其他平台上不实现它,因为它不需要,然后当支持为真时,您可以调用它来请求许可。

return checkForPermission(Manifest.permission.CAMERA, "This is required to take a picture");

确保导入com.codename1.impl.android.AndroidImplementation;

【讨论】:

  • 按照建议实现了本机界面..但它仍然不要求相机权限..只是显示html视频控件但不起作用。
  • 请忽略之前的评论。现在它要求相机许可。但是html视频控件还是不行..
  • 得到如下异常拒绝重新初始化以前失败的类 java.lang.Class
      : java.lang.NoClassDefFoundError: 解析失败: Landroid/webkit/SafeBrowsingResponse; : 在 xf com.android.webview.chromium.WebViewChromiumFactoryProvider.a(android.webkit.WebView, android.content.Context) (SourceFile:209) : 在 void com.android.webview.chromium.WebViewChromium.init(java.util .Map, boolean) (SourceFile:63)
  • 尝试添加这个:browserComponent.setProperty("SafeBrowsingEnabled", Boolean.FALSE),这是基于这里的答案stackoverflow.com/a/50673279/756809
  • 仍然出现同样的错误。我在stackoverflow.com/questions/48268467/… 发现了与Android 相关的类似问题,但不确定是否可以在代号one 中完成..
猜你喜欢
  • 2016-11-11
  • 2020-04-22
  • 2022-01-06
  • 2016-09-02
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多