问题标签 [native-activity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 以编程方式将我的主屏幕设置为默认值
假设我的 android 设备中安装了多个主屏幕。启动或按下 HOME 键时,会显示一个对话框供用户选择所需的 HOME 屏幕和一个复选框以将此操作设置为默认值。
我想知道当我选择“将此操作设置为默认”复选框并启动应用程序时设置“默认”主屏幕的代码。
我需要它以两种不同的模式以编程方式控制主屏幕。
问候, 普拉加
android - android从本机活动返回需要太长时间
我的 android 应用程序有两个活动:用 Java 编写的前端和 NativeActivity 游戏。我使用 Android NDK 示例 (samples\native-activity\jni\main.c) 作为参考来为游戏创建主 C++ 模块。当用户想从游戏返回到前端时,我调用ANativeActivity_finish(g_state->activity)
. 之后我观察到的情况如下:
APP_CMD_TERM_WINDOW
进入engine_handle_cmd
回调- 我通过调用做出反应
engine_term_display
(就像示例一样) - 出现前端活动。我可以按“播放”按钮再次启动游戏,但我一直在等待......
APP_CMD_STOP
进入engine_handle_cmd
回调APP_CMD_DESTROY
进入engine_handle_cmd
回调if (state->destroyRequested != 0)
在 main.cpp 的主循环中触发- 就像在示例中一样,
android_main
返回。现在,终于可以安全地再次启动游戏了……
我想强调第 3 步和第 4 步之间的时间间隔大约是 10 秒(至少在 DEBUG 模式下)!如果我在第 3 步和第 4 步之间从 FrontEnd 重新启动游戏,它将启动“垂死”活动而不是新活动。
我不知道 APP_CMD_TERM_WINDOW 和 APP_CMD_STOP 之间发生了什么以及为什么需要这么长时间。我有另一个具有相同架构的应用程序,步骤 3 和 4 之间大约需要 0.3 秒。也许 GC 在第一个应用程序中还有更多工作要做......我不知道。所以我的问题是:
- NativeActivity 需要这么长时间才能完成它的完成过程是正常的吗?
- 当用户从 FrontEnd 重新启动游戏时,我如何防止遇到垂死的活动?
更新
我进入 LogCat:
05-29 18:27:17.729: W/ActivityManager(476): 启动超时已过期,放弃唤醒锁!05-29 18:27:17.739: W/ActivityManager(476): ActivityRecord{4209b2d0 u0 blah.blah.MainActivity} 的活动空闲超时
就在第 3 步和第 4 步之间。
谷歌搜索后,我发现这条消息被认为是“非危险的”,但也许它可以解释什么?
android - Android 在 NativeActivity 中禁用屏幕变暗
我需要从 NativeActivity 禁用/启用屏幕调光(当渲染由 OpenGL 执行时)。我继承了 MyNativeActivity:
然后我使用 JNI 从我的本机代码中调用此方法。我在 LogCat 中看到的是:
然后glGetError()
(在我的渲染程序中)返回GL_INVALID_FRAMEBUFFER_OPERATION
并且屏幕变黑。
似乎 Android 终止或重新创建我的绘图窗口以响应getWindow().addFlags(...)
. 但我没有收到任何通知engine_handle_cmd
(即本机活动中的主要 C++ 消息回调)。我该如何处理或者我做错了什么?
更新
我试过了
但也导致
android - 加载本机活动时出现“dlopen:无效参数”
我正在使用以下引导代码来加载我的本机活动(jngl-test):
我收到以下错误消息:
这根本没有告诉我出了什么问题。有没有办法获得更多的调试输出?“无效参数”是什么意思?
android - Android OpenGL 口吃 - 垂直同步?
我的渲染循环有问题。在移动物体的过程中,我看到一个看起来像eglSwapBuffers
交换相同缓冲区两次的小口吃。我的 FPS 一直在 59 - 60 FPS 之间。该运动deltaTime
在计算新位置时考虑在内。
那会是什么???双缓冲能解决这个问题吗???
这是一个小视频(希望你能明白我的意思)。 http://youtu.be/bQYiqHUzPuI
这是我的渲染循环
这是更新功能
如果需要,我也可以发布我的EGL
和OpenGL
设置。
更新 1:
UINT32 定义为
typedef unsigned int UINT32;
这是 1 秒的增量时间
不确定,但我认为“ f32DeltaTime : 0.006349 ”这行可能是问题所在......但为什么 f32DeltaTime 在某些帧中如此之小?eglSwapBuffers 在这个 Frame 上什么都不做???但为什么 ???一问一答:)
android - 从本机代码统一访问文件
我的应用程序有两个数据源:标准资产文件夹和下载的文件。现在我使用等访问资产(来自C ++代码)。我使用good old等从下载的文件中读取数据AAssetManager_open
。是否可以使用统一的方式访问所有数据,东西?换句话说,我可以改变吗AAsset_read
fopen
fread
fopen
fread
到
android - NativeActivty 将无法启动 - 无法加载本机库
我创建了另一个问题,因为所有其他问题的答案都是相似但不相关的解决方案。我还确保这不是符号剥离问题。
我收到了可怕的错误:
一切编译和链接都很好。
我也有 app_dummy() 并且当我使用 objdump 运行时它会正确生成它:
如果重要的话,使用带有工具链 4.7.2 的 vs-android,针对 armv7-a 的 2.3.3 (android-10)。我有适当包含的库,并最终完全链接。
我仍然无法证明的一个理论是,我还需要将一些 .so 文件包含在 apk 中。我假设外部库(so)将与我自己的合并。如果不是这种情况,这可能会解释手头的问题。
我没有直接使用任何 makefile - vs-android 正在处理其中的大部分。我只能访问一些 .xml 和 .property 文件。
android - 从 Android 上的 NativeActivity fopen/fread APK 资产
我只能找到 2010 年或更早的解决方案。所以我想看看在这方面是否有更新的立场。
我想避免使用 Java 并纯粹使用 C++ 来访问存储在 APK 中的文件(一些小于或大于 1MB)。使用AssetManager
意味着我无法像其他所有操作系统(包括 iOS)上的所有其他文件一样访问文件。
如果没有,C++ 中是否有一种方法可以将 fopen/fread 映射到 AssetManager API?
android - 当 Native App 调用 eglSwapBuffers 时,Android MediaPlayer 不在 Scroll Plus 7 设备上显示视频
我有一个使用本机活动的应用程序,因为它主要是 C++ 代码(跨平台)。
我还需要播放视频和音频,所以还有另一个使用 MediaPlayer 播放视频和/或音频的 Activity。这与 Native Activity 结合使用,在 OpenGL 渲染的应用程序前播放视频。
MediaPlayer 活动基于 ApiDemos 示例中的活动,并且可以在大多数设备(Nexus 7/10、Galaxy S3/Tab2,甚至一些低成本设备,如 Fusion5)上正常工作。
但是在低成本的 Scroll Plus 7" 平板电脑上运行它 - 代码功能,但没有显示视频。
音频播放,视频控件显示并且可用。
注意:我实际上已经能够破解代码以显示视频 - 尽管这不是解决方案,但它可能会帮助某人识别问题。
在我的本机代码中,Open Gl 渲染调用eglSwapBuffers,如果我将此行注释掉视频显示。(我在android_main里面循环完成渲染)
显然,这意味着我需要在后台进行的 OpenGL 渲染停止工作,所以我无法以这种方式修复它。
设备: Scroll Plus 7" TABLET by Storage Options Jelly Bean 4.1 来自 LogCat 我相信它正在运行基于 CedarX 的媒体解码器/渲染器。
android - OpenGL ES错误到字符串
在 OpenGL ES 1.1 或 2.0 中是否有从glGetError()
(Android 和 iOS)和(Android)获取错误字符串的标准?eglGetError()
我正在使用这样的东西:
可以很好地增强它以向调试器提供文本,而不必手动查找 GLenum 中存储的返回值__gle
。