程序启动的时候打开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卡的状态,然后给出相应的处理
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
通过监听“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卸载。