Dialog not displaying when calling from JNI

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

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

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.


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

相关推荐

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

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

通过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的博客 600

MOBsf联动雷电模拟器(在docker国内库撤销后)

MobSF (全称:Mobile Security Framework,中文名:移动安全框架) 是一个自动化的移动应用程序(Android / iOS / Windows)开源测试工具,该工具采用Python开发,能够执行静态,动态和恶意软件分析。MobSF提供了很多自动化分析功能,尤其适用于Android应用。安装必备(默认已准备好)docker(kali) 现在的国内镜像源都已经下架了只能开代理下载桌面版然后给pull到本地。

qq_48149564的博客 1600

各种风格的安卓dialog

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

huangchangsheng123的博客 1592

西门子交换机环网冗余设置(实战篇2.2)

MRP的重组时间为 200ms 因此 PROFINET 通信必须选择大于 200ms 的看门狗时间,看门狗。ET200SP默认为 2ms*3=6ms) MRP 的重组时间为 200ms 故系统会报出看门狗超时。更新,默认是 3 个周期,超出设置的周期数就会报 IO 设备故障。时间不是直接配置的,而是作为没有 IO 数据可接受的更新周期,也就是允许几个周期没有数据。来达到大于 200ms 的看门狗时间的要求(看门狗时间 可接受更新周期数 更新时间)。是IO 控制器和 IO 设备)

weixin_42580591的博客 364

【鸿蒙实战开发】HarmonyOS申请调试签名证书过程

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

HarmonyOS_002的博客 3561

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

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

LGL的专栏 2291

银河麒麟系统完美安装EasyConnect

Kylin V10桌面版完美安装EasyConnect

weixin_53874797的博客 1万+

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

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

lovoo的博客 2223

DEM高程数据的获取、合并与坐标转换

DEM高程数据的获取、合并与坐标转换一、DEM数据的获取二、数据合并三、投影转换方法一四、投影转换方法二 今天用DEM数据做了一个坡度分析,数据使用过程中涉及到投影坐标转换,由于不是很熟悉所以费了一番功夫。经过一番折腾总结出两个方法,方法一自认为比较便捷的方法,即通过BIGMAP软件中工具列表中的投影转换功能进行。方法二为传统方法,即在Arcgis中用投影栅格工具进行转换。 一、DEM数据的获取 在地理空间数据云网站下载DEM数据(精度包括30米和90米),数据格式为tif格式或img格式,坐标为WGS_1

weixin_48625651的博客 1万+

2024年上半年试题二:论性能测试方法及其应用

2025年1月,我以系统分析师的身份参与了公司OA系统的开发与建设。该系统包含的功能有打卡签到、公文流转、工资查询等。我们吸取了之前由于系统使用人数激增暴露出的短时间卡顿等问题,所以在本次开发中,我们非常重视系统的性能测试。通过自动化的测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样,常见的负载测试和压力测试都属于性能测试。

银帅 548

android 设置系统dialog 样式

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

bfhye16552的博客 1112

Joule 终于会说 ABAP 了:从 ADT 提效到 ABAP AI SDK + ISLM 自建企业级 AI 场景的落地路线

生成结构化摘要(故障现象、初步原因、处理动作、备件消耗)自动给出建议分类(电气、机械、软件、网络)把摘要回写到工单抬头,方便后续统计与知识沉淀如果你用 CAP 来做这类服务,通常会在 Node.js 层封装一个对 AI Hub 的调用,再通过 OData 或 Event 把结果写回 SAP。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

cocos2D通过jni 与andriod交互

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

cc_fire的专栏 615

雷达方程从零开始的详细推导及实现

通过以上六步,我们从最基本的物理图像出发,完整地推导出了雷达方程。初学者可以按照这个逻辑,自己在纸上一步步重现整个过程。Python实现。

VectorShift的博客 335

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

weixin_39782433的博客 199

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

weixin_36228334的博客 1510

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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的博客 1049

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的博客 184

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

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

five50的专栏 3435

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

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

VIP129370的博客 966

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

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

兴趣是最好的老师 1041

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

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

Gabriel的专栏 1554

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值