вторник, 6 декабря 2011 г.

Использование библиотеки Yandex MapKit в приложении для платформы Android. Видео урок

Здравствуйте!

У многих возникают проблемы с интегрированием библиотеки Yandex MapKit в приложение для платформы Android, столкнулся с ними и я. Надеюсь этот видео урок поможет решить некоторые из них.

В видео не показана вставка API-ключа в разметку Activity.

Скриншот


Скачать библиотеку и пример Yandex MapKit

суббота, 3 декабря 2011 г.

Мигание вспышки при входящем вызове. Приложение для платформы Android

Функции
  • Программа активирует вспышку при входящем звонке по заданному пользователем алгоритму
Установка
  • установите apk-файл из архива
Версии
1.3 Скачать apk-файл
  • добавлена поддержка новых устройств
  • добавлен новый тэг в скрипт - r+число, описание в программе
  • при тестировании скрипта теперь задействуется вспышка, а не анимация на форме, как в версии 1.2
1.2 Скачать apk-файл
  • добавлена возможность тестирования скрипта в окне настроек, остановка тестирования повторным нажатием кнопки
1.1 Скачать apk-файл
  • при исходяшем вызове активировалась вспышка, ошибка исправлена, кто считает, что это не ошибка, а забавная особенность может использовать версию 1.0
1.0 Скачать apk-файл

Совместимость
  • Android 2.1 и выше
Скриншоты


Видео


Билеты ПДД категории "А" и "В" Россия от 20.11.2010 приложение для платформы Android

Функции
  • Статистика, сколько раз пройден билет и процент неправильных ответов. Статистика фиксируется при завершении прохождения теста по билету. Обнуление статистики из меню
  • Масштабирование картинки, мультитач. Нажмите на картинку. Для возврата к вопросу нажмите кнопку "Назад"
  • Результаты прохождения теста с возможностью перехода к неправильным/правильным ответам. Выбрать номер вопроса в окне результатов, для возврата в окно результатов выберите любой ответ(в этом режиме ответ не фиксируется в статистике и не учитывается). Перейти к выбору билетов можно с помощью меню, если билет не пройден результаты не участвуют в статистике.
  • Комментарии к вопросам, нажмите на текст вопроса
  • Режим выбора вопросов по ключевому слову, которое встречается в вопросах или комментариях. Чтобы выбрать вопросы нажмите в меню "Найти" и введите ключевое слово, в начале и конце слова поставьте знак %, например, %ереезд%. Совет - не пишите первую букву вашего ключевого слова, например, вместо %переезд% пишите %ереезд%. В этом режиме статистика не ведется. При повороте экрана восстановление состояния происходит с небольшой задержкой. Если ключевое слово цифра от 1 до 20(без знаков %), то отбираются вопросы с указанным номером из всех билетов.
Установка
  • установите apk
  • в корне внешней памяти создайте папку free.pdd.rus и распакуйте в нее базу из архива
Совместимость
  • Android 1.5 и выше
Скриншоты




четверг, 1 декабря 2011 г.

Карты в приложении для платформы Android

Здравствуйте!

Существует много способов отображения различной информации на карте в приложении для платформы Android, например, Google Maps или Яндекс Карты, но, пожалуй, самым быстрым и  гибким способом является использование библиотеки osmdroid, т.к. для ее использования не потребуется получения API-ключа, исходный код библиотеки открыт, есть возможность отображать карты из различных источников (например, OpenStreetMap и др.), добавлять новые без существенной доработки исходного кода библиотеки или вовсе без доработки. Загруженные карты сохраняются на карте памяти и доступны без подключения к сети Internet.

В этой заметке, рассмотрим:
  1. Добавление библиотеки в проект (Eclipse, Windows)
  2. Размещение карты в разметке
  3. Добавление нового источника карт
  4. Переключение между поставщиками карт, изменение масштаба, центра карты
  5. Вывод информации на карту
1. Добавление библиотеки в проект (Eclipse, Windows)
Скачаем основную библиотеку и вспомогательную, которая требуется для работы основной и добавим их в наш проект.

В манифест добавим разрешения для нашего приложения
"android.permission.INTERNET" 
"android.permission.WRITE_EXTERNAL_STORAGE" "android.permission.ACCESS_COARSE_LOCATION" "android.permission.ACCESS_FINE_LOCATION" "android.permission.ACCESS_NETWORK_STATE"
"android.permission.ACCESS_WIFI_STATE" 

2. Размещение карты в разметке
Разметка нашей Activity с картой будет динамической, т.е. создадим ее в процессе выполнения приложения в методе onCreate
private MapView mMap;
@Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  final RelativeLayout rl = new RelativeLayout(this); // разметка  mMap = new MapView(this, 256); // наша карта  //разрешаем встроенные кнопки изменения масштаба  mMap.setBuiltInZoomControls(true);  // добавим карту в разметку  rl.addView( mMap, new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,    LayoutParams.FILL_PARENT));  setContentView(rl); }



3. Добавление нового источника карт
Чтобы добавить новый источник создадим новый класс наследник XYTileSource и добавим в наш пакет.

public class myNoYandexTileSource extends XYTileSource{

 public myNoYandexTileSource(String aName, string aResourceId,
   int aZoomMinLevel, int aZoomMaxLevel, int aTileSizePixels,
   String aImageFilenameEnding, String... aBaseUrl) {
  super(aName, aResourceId, aZoomMinLevel, aZoomMaxLevel, aTileSizePixels,
    aImageFilenameEnding, aBaseUrl);
  // TODO Auto-generated constructor stub
 }

 @Override
 public String getTileURLString(MapTile aTile) {
  // TODO Auto-generated method stub
  return String.format(getBaseUrl(), aTile.getX(), aTile.getY(), aTile.getZoomLevel());
 }

}
И создадим экземпляры этого класса

 //Google Maps

final ITileSource tileSourceGoogleMap=new myNoYandexTileSource("Google-Map", null, 0, 23, 256, ".png",

  "http://mt0.google.com/vt/lyrs=m&hl=ru&x=%s&y=%s&z=%s&s=Galileo",

  "http://mt1.google.com/vt/lyrs=m&hl=ru&x=%s&y=%s&z=%s&s=Galileo",

  "http://mt2.google.com/vt/lyrs=m&hl=ru&x=%s&y=%s&z=%s&s=Galileo",

  "http://mt3.google.com/vt/lyrs=m&hl=ru&x=%s&y=%s&z=%s&s=Galileo");   

mTileSources.add(tileSourceGoogleMap);

/Google Maps Sat

final ITileSource tileSourceGoogleSat=new myNoYandexTileSource("Google-Sat", null, 0, 23, 256, ".png",

  "http://khm0.google.ru/kh/v=95&x=%s&y=%s&z=%s&s=Galileo",

  "http://khm1.google.ru/kh/v=95&x=%s&y=%s&z=%s&s=Galileo",

   "http://khm2.google.ru/kh/v=95&x=%s&y=%s&z=%s&s=Galileo",

   "http://khm3.google.ru/kh/v=95&x=%s&y=%s&z=%s&s=Galileo");
4. Переключение между поставщиками карт, изменение масштаба, центра карты
Отображать Google Maps Карты
mMap.setTileSource(tileSourceGoogleMap);
Отображать Google Maps Спутник
mMap.setTileSource(tileSourceGoogleSat);
Отображать OpenStreetMap
mMap.setTileSource(TileSourceFactory.MAPNIK);
Изменение масштаба
mMap.getController().setZoom(10);
Перемещение центра карты
GeoPoint p = new GeoPoint(55.786438, 49.122458);
mMap.getController().animateTo(p);

5. Вывод информации на карту


final ArrayList items = new ArrayList(); 
items.add(new OverlayItem("Казань", "Татарстан", new GeoPoint(55.786438, 49.122458)));
ItemizedIconOverlay MyLocationOverlay = new ItemizedIconOverlay(this, items, null);          
mMap.getOverlays().add(MyLocationOverlay);





Замечу, что Яндекс Карты добавленные описанным способом будут отображаться неверно из-за того, что библиотека не поддерживает нужной проекции. В следующих заметках постараюсь описать, как это исправить без изменения кода библиотеки и доработав код.