Если Вы серьезно относитесь к разработке, iPhone (или iPod touch) является необходимостью. Однако официальный SDK идет с очень полным "средством моделирования iPhone". Это позволит Вам получающий ощущение Objective C и всего рабочего процесса разработки. SDK требует Leopard.
Вам не нужен Mac для этого. Можно использовать OSX86 на ПК, или установленном на и загруженный от диска или до VmWare.
Это работает. На самом деле можно даже синхронизировать iPhone через Leopard, работающий в VMware.
Теперь, тестируя на реальном iPhone необходимость из-за производительности, использование памяти И т.д. Также, Вам нужен он для всей процедуры аутентификации, получая ключи и т.д. (если Вы хотите продать свой материал на Appstore), тестируя это действительно требует iPhone.
Это (Попытки удалить все субфайлы и подкаталоги включая предоставленный каталог) :
File
, удалите Empty Directory
, удалите Not Empty Directory
, вызов удаляет снова с подкаталогом, повторитесь 1 - 3 пример:
File externalDir = Environment.getExternalStorageDirectory()
Utils.deleteAll(externalDir); //BE CAREFUL.. Will try and delete ALL external storage files and directories
Для получения доступа к Внешнему Каталогу хранилища Вам нужны следующие полномочия:
(Использование ContextCompat.checkSelfPermission
и ActivityCompat.requestPermissions
)
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Рекурсивный метод:
public static boolean deleteAll(File file) {
if (file == null || !file.exists()) return false;
boolean success = true;
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
if (f.isDirectory()) {
success &= deleteAll(f);
}
if (!f.delete()) {
Log.w("deleteAll", "Failed to delete " + f);
success = false;
}
}
} else {
if (!file.delete()) {
Log.w("deleteAll", "Failed to delete " + file);
success = false;
}
}
} else {
if (!file.delete()) {
Log.w("deleteAll", "Failed to delete " + file);
success = false;
}
}
return success;
}