在图库Gallery3D中旋转图片,然后用蓝牙分享失败

11 篇文章 0 订阅
11 篇文章 0 订阅

       最近测试提交了一个Gallery的bug,注:Android 2.3平台,都应该存在这个问题,此问题应该为原生问题。

问题描述:        

操作步骤:图库→选择一张图片→菜单向左或向右旋转后→使用蓝牙分享

结果:蓝牙分享失败


我小试了一下,发现为必现问题,现象是开始可以正常传输,当传输到百分之七八十的时候,发送端提示为发送图片,分析LOG,发现一句非常

可疑的LOG:E/BtOpp ObexClient( 4553): Error when sending file: java.lang.IndexOutOfBoundsException: index outof bound

竟然说发送文件的时候某个数组越界,真是怪异的现象。为什么图片的旋转方向会影响蓝牙的传输呢??


话说无意间发现,当在Gallery3D中的LocalDataSource.java的rotateItem()函数中,注释掉这一句:


蓝牙传输就会没有问题,但是会导致接受端的图片是没有进行转角度的图片。


后来发现,其实当图片进行转角度后,底层的库会修改图片的参数,并且转角后的照片文件大小会发生变化。图片文件有可能变大,也有可能变小。

此问题根本原因:

图片旋转后,图片文件大小发生变化,但是图库应用并没有更新数据库里的SIZE字段值,但是蓝牙客户端传输前会从数据库中取出此文件大小SIZE的值,

导致创建的BYTES数组大小和真正的文件大小不能匹配,因此出现LOG中数组越界的现象。


改法1.修改蓝牙中得到文件大小的方法:直接File f = new File(path); length = f.length; 的方法得到。但是可能影响效率。

改法2.当图片转化后,更新数据库中SIZE字段的值。




在此记录一下,希望对大家有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值