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

hslinux 2011-06-11 04:30:51



程序启动的时候打开sd卡上面的一个文件, 在关闭该文件之前(不管有没有读写操作),卸载sd卡(通过“打开USB存储设备”方式,SD卡在PC上可见)时,程序自动关闭,force close对话框都没有。

大家看看有没有什么好的方法来处理这个问题,只要能保证这个时候程序不会自动关闭即可。

谢谢。
...全文
525 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxiao4 2012-06-12
  • 打赏
  • 举报
回复
如果定义一个service, 在xml里配置process号,在logcat里会有这样一条日志,process xxx has died,表示程序crash了,即使在读写时使用try..catch也没有用。还是想问如何才能在读写过程中卸载sd卡,并能保证程序不crash?
yxing2000 2011-11-03
  • 打赏
  • 举报
回复
同问题 求解
wyx100 2011-06-15
  • 打赏
  • 举报
回复
通过监听“android.intent.action.MEDIA_SHARED”广播,可以在打开USB存储设备时候,造成的SD卸载。
a220315410 2011-06-15
  • 打赏
  • 举报
回复
通过监听“android.intent.action.MEDIA_SHARED”广播,可以在打开USB存储设备时候,造成的SD卸载。
通过监听“android.intent.action.MEDIA_BAD_REMOVAL”广播,可以监听到SD卡的拔出操作。如果考虑到音乐文件播放等问题,在真机上由于缓存的存在,在SD卡拔出后,一般都能再播放音乐10~30秒不等的时间(具体时间看机器配置而定)。在接收到“android.intent.action.MEDIA_BAD_REMOVAL”广播后,马上停止音乐播放应该可以防止AP崩溃。
hslinux 2011-06-15
  • 打赏
  • 举报
回复

有没有办法禁止在系统中卸载SD卡?也就是说希望能做到要卸载SD卡只有关闭把物理卡取走这个途径。

不考虑定制系统这个情况。
wenzheng38 2011-06-13
  • 打赏
  • 举报
回复
一楼的方法会抛出异常,导致弹出对话框,force close的
还是二楼的方法好,需要监听SD卡的状态,然后给出相应的处理
木不且八 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fontlose 的回复:]
监听SD卡相关的广播,sdcard状态改变时通知应用程序,或者每次操作sdcard判断一下sdcard是否存在android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)


Java code

SdcardReceiver = new BroadcastR……
[/Quote]
fontlose 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yiyaaixuexi 的回复:]
我想 知道仅仅这样就可以解决插拔SD卡程序关闭问题? LZ你确认解决了么?
SD卡上打开一个文件,是普通文本文件还是mp3、mp4类文件是不一样的吧。还有即使监听到了,处理响应怎么写?不让退? 我播放着一半的mp3没了也能播?

[/Quote]
我也想知道,确实 即使收到也可能异常了,一般的用try catch就不会自动关闭了,还是不行试试定义个Service,在xml里可以设 process 属性可以分配单独进程。
念茜 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fontlose 的回复:]
监听SD卡相关的广播,sdcard状态改变时通知应用程序,或者每次操作sdcard判断一下sdcard是否存在
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)


Java code

SdcardReceiver = new BroadcastR……
[/Quote]
我想 知道仅仅这样就可以解决插拔SD卡程序关闭问题? LZ你确认解决了么?
SD卡上打开一个文件,是普通文本文件还是mp3、mp4类文件是不一样的吧。还有即使监听到了,处理响应怎么写?不让退? 我播放着一半的mp3没了也能播?
fontlose 2011-06-11
  • 打赏
  • 举报
回复


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


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);
hslinux 2011-06-11
  • 打赏
  • 举报
回复

就是创建一个activity的项目,在onCreate()里面加了如下代码:

		File file = new File(
android.os.Environment.getExternalStorageDirectory(),
"Text.log.txt");
try {
FileOutputStream fileOutputStream = new FileOutputStream(file, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

80,356

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧