Принятый ответ не работает для меня
Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
В случае, если устройство имеет встроенную память, оно возвращает true; Мое решение заключается в том, что для проверки количества каталогов внешних файлов, если их несколько, устройство имеет sdcard.Это работает, и я проверил его на нескольких устройствах.
public static boolean hasRealRemovableSdCard(Context context) {
return ContextCompat.getExternalFilesDirs(context, null).length >= 2;
}