当前位置: 代码迷 >> Android >> 文件读写,SD卡卸载时程序自动关闭解决思路
  详细解决方案

文件读写,SD卡卸载时程序自动关闭解决思路

热度:35   发布时间:2016-05-01 21:00:37.0
文件读写,SD卡卸载时程序自动关闭



  程序启动的时候打开sd卡上面的一个文件, 在关闭该文件之前(不管有没有读写操作),卸载sd卡(通过“打开USB存储设备”方式,SD卡在PC上可见)时,程序自动关闭,force close对话框都没有。
  
  大家看看有没有什么好的方法来处理这个问题,只要能保证这个时候程序不会自动关闭即可。

  谢谢。

------解决方案--------------------


监听SD卡相关的广播,sdcard状态改变时通知应用程序,或者每次操作sdcard判断一下sdcard是否存在
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

Java code
SdcardReceiver = new BroadcastReceiver() {   @Override        public void onReceive(Context context, Intent intent) {         if(intent.getAction().equals(Intent.ACTION_MEDIA_SHARED)){            do somethings         }         else if(intent.getAction().equals(Intent.ACTION_MEDIA_EJECT)){            do somethings         }         ....}创建时注册广播IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);//intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);//intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);//intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);intentFilter.addDataScheme(“file”);registerReceiver(SdcardReceiver , intentFilter);程序结束 unregisterReceiver(SdcardReceiver);
------解决方案--------------------
一楼的方法会抛出异常,导致弹出对话框,force close的
还是二楼的方法好,需要监听SD卡的状态,然后给出相应的处理
------解决方案--------------------
探讨
监听SD卡相关的广播,sdcard状态改变时通知应用程序,或者每次操作sdcard判断一下sdcard是否存在
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)


Java code

SdcardReceiver = new BroadcastR……

------解决方案--------------------
探讨
我想 知道仅仅这样就可以解决插拔SD卡程序关闭问题? LZ你确认解决了么?
SD卡上打开一个文件,是普通文本文件还是mp3、mp4类文件是不一样的吧。还有即使监听到了,处理响应怎么写?不让退? 我播放着一半的mp3没了也能播?


------解决方案--------------------
探讨
监听SD卡相关的广播,sdcard状态改变时通知应用程序,或者每次操作sdcard判断一下sdcard是否存在android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)


Java code

SdcardReceiver = new BroadcastR……

------解决方案--------------------
通过监听“android.intent.action.MEDIA_SHARED”广播,可以在打开USB存储设备时候,造成的SD卸载。
通过监听“android.intent.action.MEDIA_BAD_REMOVAL”广播,可以监听到SD卡的拔出操作。如果考虑到音乐文件播放等问题,在真机上由于缓存的存在,在SD卡拔出后,一般都能再播放音乐10~30秒不等的时间(具体时间看机器配置而定)。在接收到“android.intent.action.MEDIA_BAD_REMOVAL”广播后,马上停止音乐播放应该可以防止AP崩溃。
------解决方案--------------------
通过监听“android.intent.action.MEDIA_SHARED”广播,可以在打开USB存储设备时候,造成的SD卸载。
  相关解决方案