有关onActivityResult提前调用的问题(转)

2024-09-01 11:32

本文主要是介绍有关onActivityResult提前调用的问题(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.cnblogs.com/cottychiu/p/3262328.html

一、

今天准备在自己的游戏中加入蓝牙功能,于是将Android SDK Sample中的BluetoothChat看了看,发现基本上大部分的代码都可以复用,于是乎乾坤大挪移了一番,总算没有错误了,可是在我的Nexus上一运行,悲剧了,蓝牙明明打开了,可是却不能进入到DeviceListActivity,看了看代码,我是在onActivityResult中判断蓝牙打开成功后,才会启动DeviceListActivity,难道这么简单的代码都会出错吗?没办法只好调试一下了,一调试才发现,原来调用startActivityForResult(enableIntent, REQUEST_ENABLE_BLUETOOTH)后,请求开启蓝牙的对话框刚弹出来,onActivityResult函数就已经被调用了,而且其resultCode还是Activity.RESULT_CANCELED,而当在对话框上选择开启蓝牙后,onActivityResult函数反而不会被调用了,我了个擦,这是怎么回事。

仔细对比了一下自己的代码和BluetoothChat的代码,并没有发现什么可疑之处,直到比较了一下AndroidManifest.xml文件,才发现我的工程多了一处属性:android:launchMode=”singleInstance”,去掉之后一切正常了,后来在google上发现也有同胞发现了类似的问题,他是多加了一句代码:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);也会导致一样的结果,回过头来翻了翻开发指南,才恍然大悟,里面有句话是这么说的:一个“singleInstance”模式的activity将会是它所在的任务中唯一的activity。如果它启动了别的activity,那个activity将会依据它自己的加载模式加载到其它的任务中去──如同在intent中设置了FLAG_ACTIVITY_NEW_TASK 标记一样的效果。是的,也就是说这两种情况下,新开启的Activity一定在新的任务(进程)中,和原来的Activity不在同一进程中,我想这应该就是onActivityResult函数表现异常的原因吧,看来自己还是基本功不够扎实啊。

http://blog.csdn.net/danericola/article/details/7532425

二、

android pad 获取联系人时,在没有选择任何联系人的情况下,onActivityResult()方法就已经执行了,第三个参数为空,查找了多种原因,在这里http://www.eifr.com/article.PHP?id=1464看到一篇文章,先记下来,明天去上班待验证,
奇怪问题 startActivityForResult() 后直接调用 onActivityResult()
开发人员都知道,可以通过使用 startActivityForResult() 和 onActivityResult() 方法来传递或接收参数。
然而在“轻听”项目中,还没等到被调用的 Activity 返回,onActivityResult() 就被执行了。
找了很久,终于通过小道消息得知,这与 Activity 的加载模式(launchMode)有关,该属性可以在 AndroidManifest.xml 中设置。
原先将其设为 singleInstance,经测试,所有需要传递或接收的 Activity 不允许设置该属性,或只能设为标准模式,否则系统将在 startActivityForResult() 后直接调用 onActivityResult()。

调用startActivityForResult后,onActivityResult无响应的问题
两个activity传递数据和返回数据时,请求方的onActivityResult始终无响应,通过debug调试模式也没见调用该方法。查看了各种配置和程序代码,均未发现有错误之处。后面找了很多资料,总算看到一个朋友说是调用startActivityForResult的参数问题,即调用时这样:
startActivityForResult(intent, 0);
是第二个参数的问题,该参数必须大于0才能在返回值,并激活onActivityResult方法。
我最开始是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发现,该常量的值为-1,当然没法激活 onActivityResult方法了,随后随便修改为一个大于0的整数,程序即通跑成功。
startActivityForResult(intent, 1); //这样就行了

1.startActivityForResult(Intent intent, Int requestCode);

2.setResut(int resultCode, Intent intent);

3.onActivityResult(int requestCode, int resultCode, Intent intent);

注意事项:

1.最近使用startActivityForResult,出错,跟踪后发现activity并没有被启动,而是直接执行 onActivityResult。后查看日志发现

“05-19 02:11:19.822: WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result.”

原来是我把要启动的activity的launchmode设置成singleTask了。

把目标activity的launchmode去掉,正确。

总结:目标activity的launchmode不能设置成singleTask。

2.requestCode值>=0,否则,startActivityForResult就变成了 startactivity

http://xiwangliujiao.blog.163.com/blog/static/36195760201355111124919/

这篇关于有关onActivityResult提前调用的问题(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126815

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动