Dialog not displaying when calling from JNI

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这是一篇非常有用的问答,将其复制到这里。

I have a native C function (with JNI of course) that should callback a java method to display a dialog but this dialog is never displayed.

This is how this works:

  1. C code calls a java method
  2. The java method logs something
  3. Then it calls showDialog(SOME_ID)
  4. The onCreateDialog(SOME_ID) is called
  5. The dialog is constructed using AlertDialog.Builder
  6. When I call AlertDialog alert = builder.create() the application just stops right there (without crashing or freezing) but only when this call starts from the C code.

The code is as follows:

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case SOME_ID:
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Message");
        builder.setPositiveButton(...);
        builder.setNegativeButton(...);

        AlertDialog alert = builder.create();
        System.out.println("...Never called from JNI");
        return alert;
    }
    return null;
}

In 6 I mean that I log something before and after calling builder.create() but the log after the create method is never called so the method never returns and the dialog is never created. I have a button to trigger the dialog and, as expected, it works.

I did another test, I printed getApplicationContext() calling directly from onCreate() and from onCreateDialog() (called from C code) and it is the same, because one of the first things I thought was that the onCreateDialog() was being called from another Context or something.

Do you have any idea why the dialog is not displaying?

share | improve this question
  

1 Answer

up vote 1 down vote accepted

The problem was that when calling back from JNI the application wasn't on UI Thread so the dialog was never shown. To fix it I used a Handler (on Activity):

public final Handler dialogHandler = new Handler(){     
    public void handleMessage(Message msg){
        showDialog(SOME_ID);
    }   
};

So instead of directly call showDialog() I do it by calling dialogHandler.sendMessage().

share | improve this answer
  

Your Answer















 
or

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.


Android弹窗安全:从PopupWindow与Dialog机制差异看蓝队防御策略 在Android应用开发中,UI组件是实现人机交互的基础,其底层机制直接影响应用的安全边界。窗口管理机制决定了组件如何附着于界面层级,其中关键参数如WindowManager.LayoutParams.FLAG_SECURE控制着屏幕截图与录屏的防护能力。理解这些原理对于构建安全的应用至关重要,它能防止敏感信息泄露和UI欺骗攻击。从技术价值看,深入掌握UI组件的生命周期、事件分发和焦点管理,是保障客户端交互逻辑完整性的核心。在移动安全领域,这些知识直接应用于权限请求、支付确认等敏感场景的防护。本文聚焦于An 阅读详情

相关推荐

Unity调用Android原生功能:JNI原理、AAR集成与性能优化实战

在移动应用开发中,跨平台引擎与原生系统的交互是实现功能扩展的关键技术。其核心原理基于Java Native Interface(JNI),这是一种允许Java代码与本地C/C++代码相互调用的标准机制。通过JNI,开发者可以突破运行时环境的限制,实现跨语言通信,这对于需要访问平台特定硬件功能(如NFC、传感器)或系统服务(如通知、支付)的应用场景具有重要价值。在Unity引擎中,这一机制被封装为AndroidJavaObject和AndroidJavaClass类,使C#脚本能够动态调用Android的Ja

weixin_34150830的博客 421

Android Jni反射Java方法,弹出对话框

1、创建页面/** * @描述 C语言调用java反射方法 * @项目名称 App_imooc * @包名 com.android.imooc.jni * @类名 ReflectActivity * @author chenlin * @date 2012年6月9日 上午8:49:35 */public

lovoo的博客 2221

一个简单的jni显示Dialog的例子

http://blog.csdn.net/lgl1170860350/article/details/51006595 一个简单的jni显示Dialog的例子

各种风格的安卓dialog

本篇文章为大家介绍一些常用的安卓dialog,各种风格都有,相信应该能满足广大读者的需求 第一个是最普通的dialog,弹出一个提示对话框,用户可以选择确定,继续操作,或者点取消,取消操作 private void showDialog() { AlertDialog.Builder builder = new Builder(MainActivity.this); buil

huangchangsheng123的博客 1589

jni备忘:jni调用java方法显示一个Dialog

jni备忘:jni调用java方法显示一个Dialog 之前研究过jni,发现一段时间不用就基本忘干净了,现在在这里通过一个简单的例子记录一下。

LGL的专栏 2285

通过JNI实现对话框

一、具体步骤 1、创建Cocos2d-x v3.3-RC0工程; 2、ADT与XCode分别导入工程; 3、Xcode的Class目录下添加JniTest类; JniTest.h代码如下(JniTest.cpp暂时没有代码): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Flight_Forever的博客 597

android 设置系统dialog 样式

现在随着短视频,抖音,快手的流行NDK模块开发也显得越发重要,需要这块人才的企业也越来越多,随之学习这块的人也变多了,音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。

bfhye16552的博客 1107

cocos2D通过jni 与andriod交互

转自:http://www.myexception.cn/operating-system/1444129.html cocos2dx 与android函数的相互调用及使用jni 哈喽大家好 ,之前一阵子一直在忙项目,没怎么发过博文,挺想看看cocos2dx与安卓是如何交互的,所以就学习了一下(因为我是小菜嘛 想多学点东西 嘻嘻!!!)做了这么一个小test,虽然不多代码但小菜弄了许久,发

cc_fire的专栏 614

cocos2dx jni 调用java,cocos2dx 与android函数的互相调用及使用jni

cocos2dx 与android函数的相互调用及使用jni哈喽大家好 ,之前一阵子一直在忙项目,没怎么发过博文,挺想看看cocos2dx与安卓是如何交互的,所以就学习了一下(因为我是小菜嘛 想多学点东西 嘻嘻!!!)做了这么一个小test,虽然不多代码但小菜弄了许久,发上来给大家分享下如果有什么错误或建议欢迎大家为我指出来啊 小菜感激不尽。。。其实一开始是在想如何在cocos2dx中加入广告及第...

weixin_39782433的博客 195

Android开发dialog内存泄露,Android中导致内存泄漏的竟然是它----Dialog

一. 内存泄漏的 Bug 猛增最近在 App 进行 mokey 测试的时候检测到一些内存泄漏问题。在前天的测试中,楼主一瞬间收到了4个这样的 Bug 单,瞬间心理无比纠结,真有千万只羊驼向我奔来。登录页面出现内存泄漏??!!楼主的代码是如此的***而无懈可击,这么可能出现这么多泄漏的问题?插播什么是 Activity 泄漏:Android 中 Activity 代表一个页面,拥有一段生命周期,生...

weixin_36228334的博客 1508

JNI笔记

  由于要做一个能够加红字体的dialog,而cocos2d中的CCMessageBox是系统内带的,我无法修改其字体颜色。事实上是可以修改的,通过观察发现CCMessageBox被调用后,在安卓平台中会调用org.cocos2dx.lib.Cocos2dxHandler类中的showDialog方法,结果发现Cocos2dx使用AlertDialog来实现的,贴上代码: private ...

weixin_34099526的博客 107

AppErrorsTracking 捕获 Native 层崩溃:JNI/C++ 异常堆栈追踪实战指南

AppErrorsTracking 是一款基于 Xposed 生态的 Android 应用崩溃捕获工具,不仅能记录 Java 层异常,更能抓取 **Native 层崩溃**,为开发者提供完整的 **JNI/C++ 异常堆栈追踪**信息——无需连接电脑、无需 ADB,在手机上即可快速定位崩溃根源。 ## 为什么 Native 崩溃堆栈很难排查? 当 App 通过 JNI 调用 C/C++ 代码,

gitblog_00399的博客 1045

android JNI cocos2dx调用对话框

1、c++部分(Dialog.h)/* * Dialog.h * * Created on: 2015-5-13 * Author: lin */#ifndef DIALOG_H_ #define DIALOG_H_#include <jni.h> #include "cocos2d.h" #include "platform/android/jni/JniHelper.h"#

lin 431

cocos 时间函数需要什么引用_cocos2dx 与android函数的互相调用及使用jni

cocos2dx 与android函数的相互调用及使用jni哈喽大家好 ,之前一阵子一直在忙项目,没怎么发过博文,挺想看看cocos2dx与安卓是如何交互的,所以就学习了一下(因为我是小菜嘛 想多学点东西 嘻嘻!!!)做了这么一个小test,虽然不多代码但小菜弄了许久,发上来给大家分享下如果有什么错误或建议欢迎大家为我指出来啊 小菜感激不尽。。。其实一开始是在想如何在cocos2dx中加入广告及第...

weixin_39956182的博客 183

cocos2dx 与android函数的相互调用及使用jni

哈喽大家好 ,之前一阵子一直在忙项目,没怎么发过博文,挺想看看cocos2dx与安卓是如何交互的,所以就学习了一下(因为我是小菜嘛 想多学点东西 嘻嘻!!!)做了这么一个小test,虽然不多代码但小菜弄了许久,发上来给大家分享下 如果有什么错误或建议欢迎大家为我指出来啊 小菜感激不尽。。。 其实一开始是在想如何在cocos2dx中加入广告及第三方sdk,出于这个原因而学习了这个,好啦,开始

five50的专栏 3434

2024最新网易Android面试题目,PopupWindow和Dialog区别

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上我整理的几十套腾讯、字节跳动,京东,小米,头条、阿里、美团等公司19年的Android面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。由于篇幅有限,这里以图片的形式给大家展示一小部分。

VIP129370的博客 963

cocos2dx 与android函数的互相调用及使用jni

cocos2dx 与android函数的相互调用及使用jni 哈喽大家好 ,之前一阵子一直在忙项目,没怎么发过博文,挺想看看cocos2dx与安卓是如何交互的,所以就学习了一下(因为我是小菜嘛 想多学点东西 嘻嘻!!!)做了这么一个小test,虽然不多代码但小菜弄了许久,发上来给大家分享下 如果有什么错误或建议欢迎大家为我指出来啊 小菜感激不尽。。。 其实一开始是在想如何在cocos

兴趣是最好的老师 1040

cocos2d-x 通过JNI实现c/c++和Android的java层函数互调

转自:http://blog.csdn.net/kepoon/article/details/8454498 本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后传递给c++层函数。 (2)通过c++函数调用Android的java层函数,显示一个对话框,点击按钮退出程序。 1. 首先来简单学习一下JNI的相关知

Gabriel的专栏 1552

一、android studio JNI 的简单编写使用。

jni网上资料挺多的。好吧好吧,感觉坑点有点多。敢不敢写的详细点啊。只能自己写写了。 首先就是先创建一个项目了。这个不用说了。然后新建一个类。写一个native 方法 ,如 public class JniTest { public native String getHelloJniString(); } 然后build  make project项目。我们从build/in

songzhaoju的博客 341
上一篇: Cocos2d-x调用Java最终实例代码
下一篇: Cocos2d-x 调用 Android 代码的后续
垃圾桶
博客等级 码龄14年 20粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值