在android2.2的时代,貌似有两种办法可以监控SD的状态。
    1. 注册BroadcastRecerver,监听广播(Intent.ACTION_MEDIA_MOUNTED,Intent.ACTION_MEDIA_EJECT,Intent.ACTION_MEDIA_REMOVED等)
    2. 在StorageManager上挂StorageEventListener监听。
    但是怎么从3.0开始,这两种方法都没法用了呢?那现在我应该如何来监控SD卡的状态?总不能跑个死循环,一直调用Environment.getExternalStorageState ()吧?

解决方案 »

  1.   

         void startWatchingExternalStorage() {
            mExternalStorageReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    Log.i("test", "Storage: " + intent.getData());
                    updateExternalStorageState();
                }
            };
            IntentFilter filter = new IntentFilter();
            filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
            filter.addAction(Intent.ACTION_MEDIA_REMOVED);
            registerReceiver(mExternalStorageReceiver, filter);
            updateExternalStorageState();
        }
    http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.html
      

  2.   

      android 的东西很诡异··变一个版本···就变一种方法···
      

  3.   

        恩,我目前用的是Android3.1的系统调试的。不过源码的确有可能被我们公司别的项目组改过,不知道被改了哪些东西。反正我试验的时候,Intent.ACTION_MEDIA_SHARED,Intent.ACTION_MEDIA_SCAN_FINISHED,这两个通知我可以接收到,但是别的广播像是Intent.ACTION_MEDIA_MOUNTED,Intent.ACTION_MEDIA_REMOVED,Intent.ACTION_MEDIA_BAD_REMOVED,Intent.ACTION_MEDIA_MOUNTED都接收不到
      

  4.   

        你是说漏掉了这句:filter.addDataScheme("file")是么?
      

  5.   

        OK,联系了一下BSP组,问题解决了,因为他们把广播改掉了,所以我按照google的API来,怎么也收不到这些广播。