Comments 61
Вот еще была бы возможность в список значений запихивать что-то кроме строк — не жизнь была бы, а малина…
А вообще, пытаюсь программировать под андроид и чем дальше, тем больше разочаровываюсь в нем. Столько всего позакрывали «во имя безопасности», что тошнит. Да и средства для разработки довольно убогие. :(
А вообще, пытаюсь программировать под андроид и чем дальше, тем больше разочаровываюсь в нем. Столько всего позакрывали «во имя безопасности», что тошнит. Да и средства для разработки довольно убогие. :(
-4
Расскажите, пожалуйста, поподробнее чего вам не хватает под Андроидом, что есть на других мобильных платформах. Пишу под Андроид ~полгода, возможностей вполне хватает. И про убогость средств разработки поподробнее пожалуйста.
0
Да, расскажите, пожалуйста, более подробно. Я сейчас работаю над портированием программы написанной под Windows Mobile на Андроид и первоначально мы, с коллегами, оценивали время портирования в 3-4 месяца т.к. опыта работы с Андроидом не было вообще. Сейчас уже видно, что укладываемся мы в 2-е меньшие сроки. Хотя у нас есть одно преимущество: мы точно знаем, что должны получить на «выходе», а также допускаем, что 1-я версия портированной программы еще будет требовать последующих улучшений, но все-же 3 месяца и 1, по крайней мере для меня, большая разница. Из самых больших сложностей, которые были, это привыкнуть к Эклипсу после VS (больше всего раздражали всплывающие подсказки, которые вылазят при малейшем движении мышкой и «нестандартные» шорткаты, но ко всему этому очень быстро привыкаешь и в студии уже постоянно жму ctrl+shift+f вместо ctrl+k,d :)
0
Вот еще была бы возможность в список значений запихивать что-то кроме строк
Уверен что есть такая возможность. Что-нибудь по аналогии с setListAdapter() у ListActivity, где можно указать свой адаптер, унаследованный от ArrayAdapter. Посмотрите в этом направлении.
0
Да и средства для разработки довольно убогие.
Попробуйте IntelliJ IDEA 10 Community Edition — я (и не только я) считаю идею лучшей IDE для Java-проектов, а Community Edition — это свободная версия с поддержкой разработки под Android.
+2
А каких полезных вещей, например, в эклипсе нет, но есть в идее?
0
Спасибо, попробую. Но у меня главные претензии не к IDE, а к эмулятору (см. ниже).
0
Эмулятор используется стандартный, из SDK. Сначала устанавливается SDK, скачиваются нужные версии эмуляторов, и собственно сами SDK для нужных платформ (1.6, 2.0, 2.1, 2.2 и т.п.), а идее нужно только показать где все это лежит. Там же, в SDK, создаются профили AVD, которые потом используются в идее при запуске или отладке приложений.
0
Вот этот-то стандартный эмулятор мне и не нравится. Например тем, что некоторые функции в нем работают не так, как на реальном железе. А еще многих функций просто нет. То есть, для написания интерфейса им можно пользоватся, а для чего-то более серьезного очень тяжело.
0
Логичным бы было, все таки приобрести устройство для тестов.
0
Устройство есть. Но в процессе написания программы удобнее было бы, все-таки, использовать эмулятор. Иначе для чего он вообще нужен?
0
Для простых тестов, в основном для теста интерфейса, там можно протестировать ВСЕ кроме железной части. Даже железная часть можно частично эмулировать и проверить.
Звонки, смс, gps, мобильный интернет, батарейка и тд…
Звонки, смс, gps, мобильный интернет, батарейка и тд…
0
Ну вот я раньше в вопросах, а потом тут чуть ниже привел пример того, как сообщение (программное — имитация нажатия кнопки на гарнитуре) по-разному обрабатывается в эмуляторе и на железяке. В телефоне оно просто отвечает на звонок, причем для срабатывания нужно сгенерировать и нажатие, и отпускание. А в эмуляторе для для ответа на звонок достаточно сообщения об отпускании кнопки, нажатие же запускает аудиоплеер. Казалось бы, программная часть, не железо. Что там может отличаться? Вот такие мелочи и раздражают. Получается, что код, проверенный на эмуляторе, отказывается работать в телефоне.
0
Хорошо, а что по этому поводу сказано в АПИ и офф доках?
0
А ничего. :) Это недокументированный способ ответить на звонок программно. Поскольку документированного не существует.
KEYCODE_HEADSETHOOK
Key code constant: Headset Hook key. Used to hang up calls and stop media.
KEYCODE_HEADSETHOOK
Key code constant: Headset Hook key. Used to hang up calls and stop media.
0
>Это недокументированный способ ответить на звонок программно
Тогда чему вы удивляетесь?
Тогда чему вы удивляетесь?
0
Я удивляюсь тому, что эмулятор и железо ведут себя по-разному. Сама по себе посылка сообщения — вполне нормальная операция. Обрабатывается она софтом, а не железом. И мне непонятно, почему результат этой обработки отличается в разных местах. Обратите внимание, про запуск плеера в документации тоже ничего нет. Представьте, что у вас обычная ОС (линукс или винда) работая в виртуалке начнет по нажатиям клавиш запускать непредсказуемые программы. Это вас удивит?
0
Запуск медиа плеера? Так их может быть сколько угодно используейте IntentChooser. Можно и стандартный запустить, но не факт что он будет на другом телефоне.
Если это не офф апи, то и расчитывать на то что оно будет одинаково работать на железе, явно не стоит. В офф блоге уже не раз об этом писали
Если это не офф апи, то и расчитывать на то что оно будет одинаково работать на железе, явно не стоит. В офф блоге уже не раз об этом писали
0
Вы не поняли. Мне как раз не надо, чтобы он запускался, мне нужно ответить на звонок (как это происходит на настоящем телефоне). А он запускается. На свежесозданном девайсе в эмуляторе. Где ничего не устанавливалось и не изменялось. Голый android 2.2.
0
Сложно сказать, что вы делаете не так. Да еще при использовании закрытого апи и хаков.
Сорсы открыты, посмотрите там, почему это происходит и как этого избежать.
Сорсы открыты, посмотрите там, почему это происходит и как этого избежать.
0
Так эту проблему я уже для себя решил. На телефоне все работает, а на эмулятор наплевать. В обработке этого сообщения на эмуляторе, на самом деле, есть и более веселые подробности.
Просто мне не нравится, что такая ситуация вообще возможна — это я и имел в виду, говоря об убогости средств разработки.
Просто мне не нравится, что такая ситуация вообще возможна — это я и имел в виду, говоря об убогости средств разработки.
0
Ага, протестируйте мне там Google Calendar…
0
Интересно учлышать о «во имя безопасности». А скажите, в iOS разве с этим попроще? Или там можно взять так и заюзать private API?
По средствам разработки: не нравится Eclipse, берите IntelliJ IDEA или NetBeans. Знаю человека, который вообще небольшой свой android-проект в vim'е написал
По средствам разработки: не нравится Eclipse, берите IntelliJ IDEA или NetBeans. Знаю человека, который вообще небольшой свой android-проект в vim'е написал
0
Вот даже не знаю, как теперь ответить всем минусующим сразу и чтобы не повторять по десять раз одно и то же. Отвечу здесь.
Во-первых, эклипс я, конечно, с трудом перевариваю. За идею спасибо, посмотрю. Но дело не в них, а в самом эмуляторе, который поддерживает очень ограниченный набор функций по сравнению с реальным устройством (например, гарнитуру на эмуляторе вы не протестируете). А то, что поддерживается, иногда работает совсем не так, как на реальном железе. Получается, сначала тратишь кучу времени, чтобы обойти ограничения API и добиться какого-то результата в эмуляторе, а потом начинаешь всю борьбу сначала на девайсе. Сейчас приведу пример.
Теперь про «во имя безопасности». Не знаю, как с этим обстоит в iOS. Но закрывать на телефоне (а андроид делался, прежде всего, под телефоны) функции работы с этим самым телефоном — не слишком правильное решение, на мой взгляд. Теперь обещанный пример. Если поискать в гугле способ ответить программно на входящий звонок, то окажется, что официально это невозможно. Не предусмотрено в API. Есть обходной путь — эмулировать нажатие кнопки на гарнитуре. И тут как раз оказывается, что эмулятор и железяка обрабатывают это сообщение совсем по-разному. Я недавно задавал вопрос по этому поводу в Q&A, ответа не дождался, но успел кое-что выяснить сам. Если интересно, можете найти вопрос и посмотреть подробнее.
А урезан в андроиде далеко не только телефонный API. Многие вещи, кажущиеся логичными, сделаны совершенно странно. Например, есть сообщение о подключении гарнитуры. Но оно посылается только при подключении проводного устройства. Для bluetooth извольте слушать совсем другое сообщение. Аналогично и с простой проверкой того, подключена гарнитура или нет.
И таких примеров очень много. Я начал пробовать андроид совсем недавно, но уже столкнулся с очень многими примерами того, как простейшие вещи либо совсем недоступны, либо требуют всевозможных хаков, которые с большой вероятностью перестанут работать в новых версиях.
Вот это я и называю убогостью средств разработки и ограничением функций «во имя безопасности». Хотя поначалу мне самому очень понравилась идеология API андроида.
Во-первых, эклипс я, конечно, с трудом перевариваю. За идею спасибо, посмотрю. Но дело не в них, а в самом эмуляторе, который поддерживает очень ограниченный набор функций по сравнению с реальным устройством (например, гарнитуру на эмуляторе вы не протестируете). А то, что поддерживается, иногда работает совсем не так, как на реальном железе. Получается, сначала тратишь кучу времени, чтобы обойти ограничения API и добиться какого-то результата в эмуляторе, а потом начинаешь всю борьбу сначала на девайсе. Сейчас приведу пример.
Теперь про «во имя безопасности». Не знаю, как с этим обстоит в iOS. Но закрывать на телефоне (а андроид делался, прежде всего, под телефоны) функции работы с этим самым телефоном — не слишком правильное решение, на мой взгляд. Теперь обещанный пример. Если поискать в гугле способ ответить программно на входящий звонок, то окажется, что официально это невозможно. Не предусмотрено в API. Есть обходной путь — эмулировать нажатие кнопки на гарнитуре. И тут как раз оказывается, что эмулятор и железяка обрабатывают это сообщение совсем по-разному. Я недавно задавал вопрос по этому поводу в Q&A, ответа не дождался, но успел кое-что выяснить сам. Если интересно, можете найти вопрос и посмотреть подробнее.
А урезан в андроиде далеко не только телефонный API. Многие вещи, кажущиеся логичными, сделаны совершенно странно. Например, есть сообщение о подключении гарнитуры. Но оно посылается только при подключении проводного устройства. Для bluetooth извольте слушать совсем другое сообщение. Аналогично и с простой проверкой того, подключена гарнитура или нет.
И таких примеров очень много. Я начал пробовать андроид совсем недавно, но уже столкнулся с очень многими примерами того, как простейшие вещи либо совсем недоступны, либо требуют всевозможных хаков, которые с большой вероятностью перестанут работать в новых версиях.
Вот это я и называю убогостью средств разработки и ограничением функций «во имя безопасности». Хотя поначалу мне самому очень понравилась идеология API андроида.
0
Лично мне кажется, что если позволять всем приложениям делать все, что они захотят — то это получится WM6 какой-то. Но тут мнения конечно расходятся.
По поводу эмулятора — как раз он и является «эталоном» работы Андроида. Если на девайсе работает не так, значит неправильно сделано на нем.
Свежий пример: есть такой баг в Samsung Galaxy (вероятно в каких-то прошивках) — когда вызываешь камеру (ACTION_CAPTURE_IMAGE), то он возвращает Intent = null, вместо Url к сфотканой картинке или data с самой картинкой. А это кстати документированная возможность.
И таких багов в разных девайсах — стотыщ. Потому что каждый производитель норовит переписать на что-то свое, вместо того, чтобы добавить.
Еще пример: в MIUI падает камера, когда запрашиваешь кроп фотки. И это все нужно учитывать.
А то, что у вас девайс неправильно кнопку обрабатывает — так это его проблемы, вы на других проверьте на всякий случай.
По поводу эмулятора — как раз он и является «эталоном» работы Андроида. Если на девайсе работает не так, значит неправильно сделано на нем.
Свежий пример: есть такой баг в Samsung Galaxy (вероятно в каких-то прошивках) — когда вызываешь камеру (ACTION_CAPTURE_IMAGE), то он возвращает Intent = null, вместо Url к сфотканой картинке или data с самой картинкой. А это кстати документированная возможность.
И таких багов в разных девайсах — стотыщ. Потому что каждый производитель норовит переписать на что-то свое, вместо того, чтобы добавить.
Еще пример: в MIUI падает камера, когда запрашиваешь кроп фотки. И это все нужно учитывать.
А то, что у вас девайс неправильно кнопку обрабатывает — так это его проблемы, вы на других проверьте на всякий случай.
0
В том-то и дело, что на эмуляторе ни гарнитурную кнопку, ни подключение гарнитуры вообще нельзя изобразить. Отлаживал я через другие события (подключение питания, кажется, вместо гарнитуры). Так что эмулятор в данном случае нельзя назвать эталоном. А на реальных устройствах оно есть и работает, только на разных по-разному.
0
Это ты конечно загнул про средства разработки… Одна Intellij Idea CE 10.0.1 чего стоит. Да и сама платформа Андройда только улучшается.
0
Я говорил не про IDE, а про эмулятор. Чуть выше написал. Кстати, на линуксе у меня этот эмулятор так и не запустился. Проблема известная, решения, насколько я знаю, пока нет.
0
Да ну, как же так? Как же он у меня работает на линуксе, вот уже полтора года? Загадка…
0
Не у всех эта проблема есть, но, судя по гуглю, встречается достаточно часто, чтобы авторам стоило озаботиться решением.
0
Запускал минимум на 5 разных компах/ноутбуках, ос (lin/win/mac), все ок. Может у вас что то с компом?
0
Ну попробуйте погуглить что-нибудь типа «android linux emulator hangs». Там будут и обсуждения на форумах, и андроидовский багтрекер, и еще много чего. Не только моя это проблема. А с компом у меня все нормально, других жалоб на него нет. :) И под виндой тот же эмулятор нормально запускается (только медленно очень).
0
Не нашел ничего особенного.
Так что за конфигурация, если даже на винде очень медленно запускается.
Так что за конфигурация, если даже на винде очень медленно запускается.
0
А у вас эмулятор стартует мнгновенно? У меня в линуксе грузится примерно пару минут. Другой вопрос что загрузить его достаточно только один раз, а потом просто загружать в него свежие сборки приложения, что делется практически мнгновенно.
0
Это разные конфигурации. На винде, в принципе, терпимо — там комп поновее, хотя тоже заметны тормоза. А линукс на стареньком ноуте, который, конечно, и не должен летать. Но эмулятор там не просто тормозит, а виснет наглухо. Кстати, похоже, это не только под линуксом встречается. Вот примеры жалоб, так что это не только моя проблема:
stackoverflow.com/questions/3103736/android-emulator-hanging-on-startup
stackoverflow.com/questions/2790772/android-virtual-device-freezing-during-its-loading
stackoverflow.com/questions/3959101/android-emulator-hangs-up
stackoverflow.com/questions/3103736/android-emulator-hanging-on-startup
stackoverflow.com/questions/2790772/android-virtual-device-freezing-during-its-loading
stackoverflow.com/questions/3959101/android-emulator-hangs-up
0
2 из 3 ссылки, что вы привели, связаны с билдом кастомного эмулятора. Мы же рассматриваем дефолтный в СДК.
Возможно надо использовать комп помощнее чем телефоны на андроиде.
Возможно надо использовать комп помощнее чем телефоны на андроиде.
0
Про дефолтный я тоже находил достаточно много, пока пытался побороть свой. Некоторым помогал совет запускать без поддержки аудио. У меня (и у многих других) это не сработало.
Комп не настолько убитый, чтобы эмулятор совсем не смог запуститься (P4 2.8GHz). Собственно, он и запускается, показывает гордую переливающуюся надпись «андроид» и перестает реагировать на внешние раздражители.
Комп не настолько убитый, чтобы эмулятор совсем не смог запуститься (P4 2.8GHz). Собственно, он и запускается, показывает гордую переливающуюся надпись «андроид» и перестает реагировать на внешние раздражители.
0
Как вариант можно посмотреть логи.
Но что то мне подсказывает проблема в старом компе (6-7лет?).
На стареньком макбуке Core Duo 2HGz, все нормально, на ноутбуке Lenovo 1,8Ghz, тоже все в порядке.
Но что то мне подсказывает проблема в старом компе (6-7лет?).
На стареньком макбуке Core Duo 2HGz, все нормально, на ноутбуке Lenovo 1,8Ghz, тоже все в порядке.
0
В логах ничего путного не видно. Последние строки такие:
…
I/ActivityManager( 60): Start proc android.process.acore for broadcast com.android.providers.contacts/.ContactsUpgradeReceiver: pid=104 uid=10000 gids={3003, 1015}
W/ActivityManager( 60): Process ProcessRecord{43f79718 104:android.process.acore/10000} failed to attach
I/Process ( 60): Sending signal. PID: 104 SIG: 9
W/ActivityManager( 60): Unattached app died before broadcast acknowledged, skipping
После этого ничего не происходит. Есть идеи почему?
…
I/ActivityManager( 60): Start proc android.process.acore for broadcast com.android.providers.contacts/.ContactsUpgradeReceiver: pid=104 uid=10000 gids={3003, 1015}
W/ActivityManager( 60): Process ProcessRecord{43f79718 104:android.process.acore/10000} failed to attach
I/Process ( 60): Sending signal. PID: 104 SIG: 9
W/ActivityManager( 60): Unattached app died before broadcast acknowledged, skipping
После этого ничего не происходит. Есть идеи почему?
0
Вы можете написать любого вида настройки, было бы желание. И делается это достаточно легко.
0
Есть ли стандартный способ показывать текущее значение настройки в summary, как в дефолтном приложении настроек телефона? Или нужно после каждого изменения ручками ставить?
0
Видимо только руками, как описывают в оветах на этот вопрос.
0
во всех «хавту» как-то скромно обходится — как добавить в список сгенерированные значения, а не готовый массив… для чайника как раз понятно, как готовый список вставить, пример посмотрел и все
я заполнял список списком :) установленных программ, может пригодится кому-то — fat-hamster.blogspot.com/2010/11/android-widget-part-01.html
я заполнял список списком :) установленных программ, может пригодится кому-то — fat-hamster.blogspot.com/2010/11/android-widget-part-01.html
0
Одно замечание к коду, не используйте табуляцию при форматировании. 4 пробела достаточно, и выглядеть будет все нормально. Сейчас у вас видимо 8.
Вот кстати вчера тема была про оформление кода:
habrahabr.ru/blogs/android_development/112042/
Вот кстати вчера тема была про оформление кода:
habrahabr.ru/blogs/android_development/112042/
0
Еще preferences очень удобно использовать для одноразовых диалогов\уведомлений. Показал диалог и положил через едитор true с идентификатором диалога. Что-то типо
потом просто проверять на этот флаг.
Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
editor.putBoolean(DIALOG_RECENT_CHANGES, true);
editor.commit();
потом просто проверять на этот флаг.
0
Sign up to leave a comment.
Настройки в Android-приложениях