Android 当设备作为大容量存储器连接时,我如何检测和处理我的应用程序?

Android 当设备作为大容量存储器连接时,我如何检测和处理我的应用程序?,android,broadcastreceiver,sd-card,usb-mass-storage,Android,Broadcastreceiver,Sd Card,Usb Mass Storage,我正在用SD资源开发一个游戏。当我将设备连接为大容量存储时,设备会崩溃。这是因为当我将我的设备作为大容量存储器插入PC时,设备无法访问SD卡。所以我尝试了不同的解决方法 目前,我正在实现一个BroadcastReceiver,我正在处理ACTION_MEDIA_BAD_Remove(如果SD卡是手动卸下的)和ACTION_MEDIA_SHARED(如果设备作为大容量存储连接,它应该处理该操作,但它没有) 当检测到这两个动作时,我会发送一条错误消息并完成应用程序 当我手动取出SD卡时,它可以工作,

我正在用SD资源开发一个游戏。当我将设备连接为大容量存储时,设备会崩溃。这是因为当我将我的设备作为大容量存储器插入PC时,设备无法访问SD卡。所以我尝试了不同的解决方法

目前,我正在实现一个BroadcastReceiver,我正在处理ACTION_MEDIA_BAD_Remove(如果SD卡是手动卸下的)和ACTION_MEDIA_SHARED(如果设备作为大容量存储连接,它应该处理该操作,但它没有)

当检测到这两个动作时,我会发送一条错误消息并完成应用程序

当我手动取出SD卡时,它可以工作,但不能作为大容量存储

此外,在每一帧上,我用这种方法检查设备上的SD卡是否在每一帧上

 public int hasSDCard()
 {
    String state = Environment.getExternalStorageState();
        if(Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
                return 1;
    return 0;
 }
当为0时,它没有SD卡,我也会在那里发送错误消息并完成应用程序

但在USB大容量存储模式下,stills不起作用

我的问题是:如何检测设备何时作为USB大容量存储器连接

我应该使用什么类?


我可以实现哪些侦听器来调用我的错误消息活动并完成我的应用程序?

您应该使用
BroadcastReceiver
类。在开始时,为安装的<代码>动作媒体>或未安装的<代码>动作媒体>注册广播接收器。创建一个将重写
onReceive()
方法的类,该方法是处理装载/卸载的方法

作为额外信息,请阅读
ACTION\UMS\u CONNECTED


我没有工作。我将责任归咎于主要活动的onResume方法。它会在onReceive()之前尝试访问SD卡上的某些内容。您不能在onReceive()中执行此操作吗?如果不能,则将活动中的接收器实例化为类变量,而不是
扩展的类
BROnReceive仅在我手动移除SD卡时有效。如果我扩展它或者将它声明为变量,这是一样的。我将尝试其他方法,谢谢。您是否删除了调用onReceive方法时必须运行的代码?我指的是你提到的onResume()中的代码。好吧,我假设(根据你所说的)必须在SD上访问某些内容的代码在onResume()中,现在我告诉你尝试将其删除(或移动)到onReceive()方法,并在该方法中尝试访问SD卡。有道理吗?