您的位置:首页 > 移动开发 > Android开发

Android N系统CTS verifier中cross profile相关测试项fail的解决方案

2016-11-16 21:48 1156 查看
         测试环境简介:CTS verifier apk是对应Android N的版本。系统是Android N。

         测试项名称:camera support cross profile video capture (without extra output path)

         测试过程:点击该项测试时,会调用到手机中安装的相机拍摄视频。拍摄视频后返回到CTS verifier apk的界面进行视频播放。如果能够正常拍摄及播放视频,则该测试项通过;否则,该测试项fail。

          测试结果:能够正常拍摄视频,但是拍摄后回到CTS verifier apk界面不能正常播放,提示“cann't play the video”。

问题分析:仔细读该测试项的名字,cross profile的意思是跨工作资料,这里的工作资料应该是指跨应用程序。用"exception"为关键词搜索发生该问题的log,可能会发现的Log有“Security Exception”、“Permission Denial”,"can't read the uri"等。这些关键词告诉我们是由于权限问题导致了视频的uri读取不了所以导致视频不能播放。

          解决方案:Android N增加了应用间文件共享的权限检查,通过uri分享文件变得更加严格。我们可以想到,CTS verifier apk先是通过startActivityForResult启动了相机应用拍摄视频。而相机应用会把拍摄下来的视频的uri通过函数setResut(int
resultCode, Intent intent)返回给CTS verifier应用。这里就涉及到了跨应用的文件共享。这里会将uri数据存储到intent中。在Android N之前的系统这么写是没有问题的,而由于新增加了安全检查,如果是Content Uri,这里要在相机应用里给intent加一个flag以授予读取权限。

 
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);


通过增加该flag,CTS verifier即可正常访问uri。该测试项也就能pass了。

上述方法只能针对Uri是Content Uri的情况,如果是File Uri,就需要用到FileProvider将File类型的Uri转换成Content Uri,再通过上述方式授予读取权限。具体转换方式网上有很多描述的文章,这里不再赘述。

      感谢你的阅读,欢迎你也能访问我的网易博客。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐