code: protected synchronized File getExternalStorageDirectory() {
  
          File externalStorageDirectory;
          if (Build.VERSION.SDK_INT >= 8 && mContext != null) {
              externalStorageDirectory = mContext.getExternalCacheDir();
          } else {
              externalStorageDirectory = Environment.getExternalStorageDirectory();
          }
  
          if (externalStorageDirectory != null) {
              if (!externalStorageDirectory.exists()) {
                  if (!externalStorageDirectory.mkdirs()) {
                      externalStorageDirectory = null;
                      Log.e(TAG, "mkdirs failed on externalStorageDirectory "
                              + externalStorageDirectory);
                  }
              }
          }
          return externalStorageDirectory;
      }
docs: Android 1.6-2.1 used {@link android.os.Environment#getExternalStorageDirectory()} to
  return the (root) external storage directory. Folders in this subdir were
  shared by all applications and were not removed when the application was
  deleted. Starting with andriod 2.2, Context.getExternalFilesDir() is
  available. This is an external directory available to the application
  which is removed when the application is removed.
  <p/>
  This implementation uses Context.getExternalFilesDir() if available, if
  not available uses {@link android.os.Environment#getExternalStorageDirectory()}.
  
  @return a File object representing the external storage directory used by
  this device or null if the subdir could not be created or proven
  to exist