对红米手机调用系统相机拍照功能的研究:
一:启动模式需要注意。
Activity的启动模式会影响到
public void onActivityResult(int
requestCode, int
resultCode,
Intent data)方法的调用流程。如果调用相机的Activity的启动模式是singleInstance模式,那么在小米的系统中,当你设置好相机调用参数后,不管你有没有设置照片的输出位置uri,是通过何种方法设置的uri(不管是来源于文件的uri还是来源于自定义的contentProvider的uri)。只要一执行到
startActivityForResult(intent,REQUEST_CODE_TAKE_PICTURE);
这行代码,小米系统就不等你开始拍照就直接开始调用
onActivityResult方法返回结果,这个时候返回的结果当然是空了。并且当你拍完照了,点击对号按钮返回调用相机的界面的时候,
onActivityResult方法偏偏这个时候它不执行了。呵呵。并且不管你是在Fragment中start的还是在activity中start的,甚至是把点击事件传递到activity中的,都不能阻止它无脑的没等你拍照就调用
onActivityResult 的流程。当我换了一种启动模式后,这个问题就不再出现了,但是我程序的界面跳转流程就需要有很大的改动。某米真坑。
二:某些操作会影响到返回结果。
我们知道,正常情况下,经过调用系统相机拍照成功返回后resultCode的值应该为-1,既常量RESULT_OK的值。但是小米系统中有些操作也会影响到
public void onActivityResult(int
requestCode, int
resultCode,
Intent data) 方法中resultCode的值。比如当你的Activity承载有Fragment的时候,对Fragment的一些切换操作就会使resultCode的返回值为0而不是-1。照常理来说这是不应该的,但是小米就是这么坑爹。让你错了都不知道具体是什么原因。只能更改其他地方代码的写法。