今天在项目中发现出现一个bug:下载文件到SD卡时,如果连接数据线至PC,并且手机选择大容量存储模式的时候,软件就崩溃了。
修改很简单,在选择大容量存储模式,及离开的时候系统会发送一个广播来通知的,只要监听接收这个广播就行。
查阅资料之后,得知与之相关的action是:
Intent.ACTION_UMS_CONNECTED;
Intent.ACTION_UMS_DISCONNECTED;
查看常量的介绍:Apps should listen for ACTION_MEDIA_MOUNTED and ACTION_MEDIA_UNMOUNTED broadcasts to be notified when the SD card file system is mounted or unmounted。
就是说在广播接收器的IntentFilter中应该监听:
Intent.ACTION_MEDIA_MOUNTED;
Intent.ACTION_MEDIA_UNMOUNTED;
然后就开始写demo测试,可是换了N个手机都发现在onReceiver中并没有捕捉到这两个广播,百思不得其解,之后继续查资料,发现了缘由,原来在IntentFilter中还需要对filter设置一个参数:
filter.addDataScheme("file");//重要的一句
参考:http://www.eoeandroid.com/thread-29804-1-1.html
http://blog.csdn.net/silenceburn/article/details/6083375 为什么加这句话的原因
然后重新测试,这次就可以正常的接收进入与退出大容量存储模式的广播了。