bug-Android拍照onActivityResult的奇怪BUG

问题描述

Android拍照onActivityResult的奇怪BUG
这个BUG是一个很奇怪的问题,调用系统相机拍照(在别人的手机上还有美颜相机,美颜相机很容易出这个问题,系统相机不太容易出)
第一次遇到这种特别奇葩的问题,完全跟踪不到,无论如何都没有任何错误输出,没有任何提示无征兆的闪退。
具体就是传入一个指定文件作为拍照文件。如下:

         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        if (picturesUploadAndEditView != null){            picturesUploadAndEditView.dissmissDialog();        }        tempPhotoPath = getTempImage();        if (tempPhotoPath == null || tempPhotoPath.trim().equals("""")){            Toast.makeText(MyApplication.getInstance() getResources().getString(R.string.sd_error) Toast.LENGTH_LONG);            return;        }        File tempFile = new File(tempPhotoPath);        Uri imageUri = Uri.fromFile(tempFile);        intent.putExtra(MediaStore.EXTRA_OUTPUT imageUri);        startActivityForResult(intent ACTION_TAKE_PHOTO);

getTempImage()是一个自动生成照片保存路径的方法。
但是拍照完毕后 大概有20%左右几率,程序会直接闪退。经过调试发现是tempPhotoPath变成了null.加了try catch捕获异常并加Toash提示却无效,Toash根本不出程序就直接闪退了。后来我甚至把整个onActivityResult都加try里面了,但是还可能闪退,奇怪的是,闪退没有任何的错误输出,后来我在代码里逐行加调试输出跟踪,发现只要执行了return,就没有然后了,执行完了,程序不是回到原来的地方而是闪退出去,没报错信息。后来加了UncaughtExceptionHandler试图捕获错误输错却根本没进入到那里面去。求解,彻底没有任何思路了。

解决方案

测试了半天,经过查找资料终于发现问题。
在调用相机过后,拍照时候可能原来的应用已经被回收了。尤其是同事用美颜相机测试,可能占用内存过大,直接kill掉了。
我发现在这种情况下,返回原activity的onActivityResult,返回数据都正常的,照片也确实拍到了找得到,只是原来activity内的成员变量都没了,或者说,整个application貌似都销毁了,所有数据都没了。
所以看似好像就是程序彻底闪退一样。其实并没有发生异常,只是APP都没了还玩个毛线啊。

解决方案二:
问题应该是oom

解决方案三:
网页卡了,抱歉。。。

解决方案四:
那就是说明getTempImage中有可能获取不到图片,Android系统不同,获取相机返回数据的方法也不一样,有的getData是null,另外,照相可能会引起activity的横竖屏转换,你最好把activity的横屏禁止掉

解决方案五:
感觉有可能是照片过大,导致照片为空,看需不需要对照片进行裁剪或者压缩。

解决方案六:
这个还是要分析 getTempImage() 为什么返回空?
对于同一款手机,是否每次都正确、或者错误?如果不是,可能是系统接口或者图片大小的问题;但如果不是,则情况可能会比较复杂,因为接口和图片大小已经确定,不可能是这两方面的原因。
程序可能存在其它问题,建议你单独(另外写一个简单的程序)对拍照的接口进行测试,而不是在你的应用中进行测试。

解决方案七:
是不是你的文件夹创建没成功啊

时间: 2024-12-03 03:30:16

bug-Android拍照onActivityResult的奇怪BUG的相关文章

java-Android自定义控件时遇到的奇怪bug:

问题描述 Android自定义控件时遇到的奇怪bug: <第一行代码--Android>第三章 3.4 自定义控件 问题 示例代码需要新建一个布局:title.xml 我进行了如下操作: (1) (2) title.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" andr

android 压力测试测出的bug

问题描述 android 压力测试测出的bug 自定义控件MyButton,已经实现了三个构造函数,希望哪位大神帮帮忙查看下,给些意见,感激不尽 FATAL EXCEPTION: main 01-02 00:32:39.600 E/AndroidRuntime( 6275): Process: com.simple.zjx.main, PID: 6275 01-02 00:32:39.600 E/AndroidRuntime( 6275): java.lang.RuntimeException:

android复制粘贴的奇葩BUG

问题描述 android复制粘贴的奇葩BUG 如题,写安卓APP 现在剩下一个问题一直没解决.复制粘贴的不对. 复制:setTextIsSelectable(true);,奇葩问题是有的手机上可以,而在我的手机上,长按复制,屏幕会快速闪烁一下,闪烁的一瞬间我看到了复制的光标,但是一瞬间就没了. 粘贴:类似复制,也是这个问题,会出现"粘贴"的标签,但是有的手机上是一旦松手,粘贴标签就消失了.有的手机上是屏幕闪烁一下,然后看不到粘贴标签. 另外,这个问题是有时候出现有时候没有的.对应的te

android开发-android中播放器的bug,求解决

问题描述 android中播放器的bug,求解决 再做一个关联后台的手机app ,里面主要是无线广播这一块儿,mms://222.90.232.44:8082/fm999_audio 不能播放.是因为加端口号了么 解决方案 Android很全的资料http://download.csdn.net/album/detail/1121

小米3用上Android 5.0 注意有Bug

期待已久的米3版Android 5.0终于来了,开发者依然是@秋叶随风ivan.@秋叶随风ivan表示,该ROM仅适用于联通版小米手机3,且春节前不会再更新了.目前已知的Bug包括录像不能保存.NFC无效以及偶尔自动重启等.之前@秋叶随风ivan还曾承诺近期会发布一个适用于小米手机2A的Android 5.0刷机包,但不保证功能完善,尤其是NFC部分.小米3用上Android 5.0 注意有Bug

[Android] 拍照、截图、保存并显示在ImageView控件中

    最近在做Android的项目,其中部分涉及到图像处理的内容.这里先讲述如何调用Camera应用程序进行拍照,并截图和保存显示在ImageView控件中以及遇到的困难和解决方法.     PS:作者购买了本<Android第一行代码 著:郭霖>,参照里面的内容完成(推荐该书,前面的布局及应用非常不错).网上这类资料非常多,作者仅仅分享给初学者同时在线记录些内容,希望对大家有所帮助.    首先,设置activity_main.xml为LinearLayout布局且 android:ori

android5.1手机项目中使用fragment,调用拍照onactivityresult无反应

问题描述 android5.1手机项目中使用fragment,调用拍照onactivityresult无反应 android5.1手机项目中使用fragment,调用拍照onactivityresult点击保存不会调用,但是点击取消能调用onactivityresult,android4.4以下的可以,求哪个大神帮下忙 解决方案 应该还是你的方法不对,换一个Intent试试,android提供的Intent有多种,我之前用的方法都测试过,都可以,刚还帮你测了一次5.1,没啥问题. 解决方案二:

简单的 Android 拍照并显示以及获取路径后上传

简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view) { destoryBimap(); String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent("android.media.act

Android拍照或从图库选择图片并裁剪_Android

今天看<第一行代码>上面关于拍照和从相册选取图片那一部分,发现始终出不来效果,所以搜索其他资料学习一下相关知识,写一个简单的Demo.  一. 拍照选择图片 1.使用隐式Intent启动相机 //构建隐式Intent Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用系统相机 startActivityForResult(intent, 1); 2.处理相机拍照返回的结果 //用户点击了取消 if(data ==