找不到病根真是让人愁白了头;

今天写了一个startActivityForResult,开启一个Activity并拿到返回的结果,但是startActivityForResult刚走,onActivityResult就立即响应了,这我要这个onActivityResult有何用;

来看开启代码:

                        Intent intaentPermission = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intaentPermission.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intaentPermission.setData(Uri.parse( "package:"+getPackageName()));
startActivityForResult(intaentPermission,windowHintStartPermission);

这个是回调代码:

   @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == windowHintStartPermission){
if (Build.VERSION.SDK_INT >= 23) {
if (!Settings.canDrawOverlays(getActivity())) {
UIHelper.showToast("您未开启悬浮窗权限,遥控正在后台执行");
}else {
Intent intent = new Intent(getActivity(), TelecontrolQueryService.class);
intent.putExtra("id", "");
getActivity().startService(intent);
} }else {
Intent intent = new Intent(getActivity(), TelecontrolQueryService.class);
intent.putExtra("id","");
getActivity().startService(intent);
}
}
}

我真是日了狗了,开启代码刚执行结束,回调代码就走了;

来、划重点了:

经排查,发现这个提前回调跟Activity的启动模式有关(launchMode),举个栗子:Activity1使用startActivityForResult开启Activity2,Activity2的launchMode如果不是标准模式,就会出现提前回调的问题,onActivityResult立即执行;

我的解决方法:

                        Intent intaentPermission = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
// intaentPermission.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //把启动模式注释掉
intaentPermission.setData(Uri.parse( "package:"+getPackageName()));
startActivityForResult(intaentPermission,windowHintStartPermission);

还有就是,不要getActivity().startActivityForResult();在Fragment中开启Activity前面不要加getActivity(). ;不然你的onActivityResult方法会不执行;

Fragment onActivityResult提前响应,startActivityForResult执行后立即响应onActivityResult的解决方法的更多相关文章

  1. 【jquery】ajax 请求成功后新开窗口被拦截解决方法

    问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以 ...

  2. spring定时任务执行两次的原因与解决方法

    spring定时任务,本地执行一次,放到服务器上后,每次执行时会执行两次,原因及解决办法. http://blog.csdn.net/yaobengen/article/details/7031266 ...

  3. 网站启动SSL, http变为https后,session验证码错误解决方法

    网站启动SSL, http变为https后,session验证码错误解决方法   最近公司需要后台启动安全证书,证书安装完毕后,后台老提示 验证码错误,经过几天的研究,此问题已经得到有效解决,现把方法 ...

  4. 安装Wamp后 Apache无法启动的解决方法

    安装Wamp后 Apache无法启动的解决方法,网上的解决方案可以说是五花八门,有些说了一大推,一点作用都起不到. 其实解决方法只需两步: 1.安装路径不能包含有中文,这个我不知道为什么,总之如果安装 ...

  5. 安装Wamp后 Apache无法启动的解决方法

    安装Wamp后 Apache无法启动的解决方法,网上的解决方案可以说是五花八门,有些说了一大推,一点作用都起不到. 其实解决方法只需两步: 1.安装路径不能包含有中文,这个我不知道为什么,总之如果安装 ...

  6. 宝塔控制面板创建ftp后链接不上的解决方法

    很多的新手在安装宝塔面板并且创建完ftp管理后链接ftp居然链接不上?有许多朋友都不知道本站q302博客也是基于宝塔控制面板管理的,本站在安装网站完成后也和你们一样ftp链接不上,后面经过多次测试之后 ...

  7. 关于protel 99se 汉化后某些菜单消失的解决方法

    本人在使用protel 99se 画PCB时,遇到了好些问题,通过网上查资料基本都解决了. 下面给大家分享 关于protel 99se 汉化后某些菜单消失的解决方法. 其他的许多看不见的菜单也可以自己 ...

  8. 【Navicat】使用navicat执行sql 查询速度很慢解决方法

    ========================== Navicat 远程连接Mysql执行普通sql速度慢问题: 场景: navicat可以连接上 远程服务器的mysql.但是在navicat执行最 ...

  9. 【Qt开发】QScrollArea添加布局后没有出现滚动条的解决方法

    [Qt开发]QScrollArea添加布局后没有出现滚动条的解决方法 标签:[Qt开发] 说明:尝试利用滚动区域显示多张图片,为了能够动态地往滚动区域贴图,为滚动区域设置了布局,然后通过布局来添加wi ...

随机推荐

  1. Revit api 创建族并加载到当前项目

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. redis 的 docker 镜像使用

    redis 镜像使用: 创建容器(暴露端口:6379,使用 Redis 可视化界面工具(如:Fastoredis)连接 redis 时连接该端口): docker run -it -p 6379:63 ...

  3. Jmeter --- 组件执行顺序与作用域

    一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...

  4. TCP加速锐速SS(ServerSpeeder)破解版一键安装

    速(serverspeeder),是一款TCP加速程序,能够增强VPS/服务器连接的稳定性,且有效的提高服务器的带宽利用率,进而提高访问速度.老左经常看到论坛.群里有用户提到锐速这款软件可以提高VPS ...

  5. System Generator 参数优化

    System Generator 参数优化 通过命令行调试参数 然后编译,查看资源消耗.

  6. 阅读<All Digital VCXO Replacement for Gigabit Transceiver Applications>笔记(2)---XAPP589

    阅读<All Digital VCXO Replacement for Gigabit Transceiver Applications>笔记(2)---XAPP589 1. 2. 3. ...

  7. 学习java字符串编码总结

    http://blog.csdn.net/wikijava/article/details/5571953 系统不同部分的编码方式转换

  8. PHP echo()、print()、print_r()、var_dump()、var_export()的区别

    PHP中echo.print.print_r.var_dump.var_export的用法与区别 这些均为输出变量的内容: echo();不是函数.是PHP语句.没有返回值:输出一个或者多个字符串或者 ...

  9. C++之二阶构造模式

    前言:C++中经常会因为调用系统资源失败导致出现BUG,所以在类调用构造函数需要分配系统资源时会出现BUG,从而导致类对象虽然被创建,但是只是个半成品,为了避免这种情况需要使用二阶构造模式 二阶构造模 ...

  10. 字符串全部转换为大写用str.toUpperCase()方法

    var message="Hello world!"; var x=message.toUpperCase();