Автор Даниил задал вопрос в разделе Мобильная связь
эмуляция sd карты памяти, как убрать? и получил лучший ответ
Ответ от Roman[эксперт]
По подробней, где и как и что?))
Alex
(705)
Похоже на косяк прошивки.
Надо делать ROOT и ставить Link2SD вроде так назвалась прога.
Ответ от Џрослав Ганусов[новичек]
Многие замечали в директории монтирования устройств такую картину:
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/
И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:
создаем StringBuilder
записываем в него общий размер устройства и размер используемого пространства устройства
обходим содержимое корня устройства
записываем имя каталога
записываем имя файла и размер
вычисляем hash
Своя функция расчета хэша calcHash
private int calcHash(File dir) {
StringBuilder tmpHash = new StringBuilder();
tmpHash.append(dir.getTotalSpace());
tmpHash.append(dir.getUsableSpace());
File[] list = dir.listFiles();
for (File file : list) {
tmpHash.append(file.getName());
if (file.isFile()) {
tmpHash.append(file.length());
}
}
return tmpHash.toString().hashCode();
}
Пример использования
/* Получаем базовый путь */
if (!mPreferences.contains(PREFS_BASEBATH)) {
// Если еще не сохранялся в настройках, то пытаемся найти карты
// памяти
ArrayList storages = StorageHelper.getInstance()
.getRemovableMountedDevices();
// проверяем съемные карты памяти
if (storages.size() != 0) {
setBasePath(storages.get(0).getPath() + mAppPath);
} else if ((storages = StorageHelper.getInstance() // Проверяем
// внутреннюю
// память
.getExternalMountedDevices()).size() != 0) {
setBasePath(storages.get(0).getPath() + mAppPath);
}
} else {
// Вытаскиваем из сохранненых настроек
mBasePath = mPreferences.getString(PREFS_BASEBATH, context
.getFilesDir().getParent());
}
Многие замечали в директории монтирования устройств такую картину:
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/
И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:
создаем StringBuilder
записываем в него общий размер устройства и размер используемого пространства устройства
обходим содержимое корня устройства
записываем имя каталога
записываем имя файла и размер
вычисляем hash
Своя функция расчета хэша calcHash
private int calcHash(File dir) {
StringBuilder tmpHash = new StringBuilder();
tmpHash.append(dir.getTotalSpace());
tmpHash.append(dir.getUsableSpace());
File[] list = dir.listFiles();
for (File file : list) {
tmpHash.append(file.getName());
if (file.isFile()) {
tmpHash.append(file.length());
}
}
return tmpHash.toString().hashCode();
}
Пример использования
/* Получаем базовый путь */
if (!mPreferences.contains(PREFS_BASEBATH)) {
// Если еще не сохранялся в настройках, то пытаемся найти карты
// памяти
ArrayList storages = StorageHelper.getInstance()
.getRemovableMountedDevices();
// проверяем съемные карты памяти
if (storages.size() != 0) {
setBasePath(storages.get(0).getPath() + mAppPath);
} else if ((storages = StorageHelper.getInstance() // Проверяем
// внутреннюю
// память
.getExternalMountedDevices()).size() != 0) {
setBasePath(storages.get(0).getPath() + mAppPath);
}
} else {
// Вытаскиваем из сохранненых настроек
mBasePath = mPreferences.getString(PREFS_BASEBATH, context
.getFilesDir().getParent());
}
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: эмуляция sd карты памяти, как убрать?