воскресенье, 28 апреля 2013 г.

Первые впечатления от китайского чуда MK-802

Сегодня наконец-то получил прямиком из Китая необычное устройство - микрокомпьютер MK802 на платформе Android 4.0. Размер компьютера немного превышает размер мобильного USB-модема от Мегафон. Вот так он выглядит в коробке:

Вынимаем его и рассматриваем поблизости:
Как видим устройство имеет несколько интерфейсов: HDMI для подключения к телевизору, Miсro USB и USB. Всего устройство имеет два разъема Micro USB, один USB 2.0, HDMI и разъем для SD-карты. 
По спецификации устройство имеет модуль Wi-Fi, ARM-процессор Cortex-A8 1GHz (довольно неплохо для такого устройства), внутреннюю память размером 1 Гб. Можно расширить память SD-картой размером до 32 Гб.
В комплекте с устройством поставляется также USB-провод, HDMI-провод, переходник Micro USB - USB и инструкция по использованию.
Все упаковано в довольно неплохую брендированную удобную коробку. Вот все вместе:
Все характеристики железа указаны на обратной стороне упаковки:
Подключаем по USB к компьютеру и испытываем его софтину.
В ОС Ubuntu устройство сразу монтируется как накопитель и определяется внутренний накопитель и SD-карта. Здесь не так много интересного поэтому фотографии не прикладываю.
Гораздо интереснее попробовать его в режиме терминала. Для этого нужно использовать утилиту ADB (Android Device Bridge), входящую в состав Android SDK. Для подключения к устройству через ADB на Linux нужно создать набор правил устройства в специальном файле /etc/udev/rules.d/51-android.rules. Как это сделать подробно объяснено здесь. На всякий случай у меня получилась такая запись в 51-android.rules:
Теперь можно увидеть наше устройство через ADB:
Подключаемся к оболочке shell MK802:

Можно показать список установленных приложений:

Как видим установлено довольно много приложений включая все основные стандартные приложения, присутствующие на смартфонах на платформе Android.
Можно получить интерактивный вывод логов системы:

$ adb logcat


Здесь можно использовать любые команды, поддерживаемые ADB. Если получить права root, то здесь будет безграничная свобода действий.
В следующий раз расскажу о своих впечатлениях от обзора графического интерфейса Android на MK802. Есть две возможности испытать MK802 в действии: либо подключить устройство по порту HDMI к телевизору, либо к монитору компьютера, но во втором случае понадобится переходник для DVI. Я выбрал второй способ. На этом прошу откланяться.






воскресенье, 14 апреля 2013 г.

Установка Google apps на Buildroid в Virtualbox

В прошлой статье я рассказывал как можно установить виртуальную машину Buildroid с ОС Android 4.0 на Virtualbox. Данная виртуальная машина поддерживает сетевое подключение. Однако если вы установили сборку без установленных приложений Google вам не удастся установить приложения из Google Play. В этой статье я расскажу как можно установить приложения Google на уже установленную виртуальную машину.
Для этого нам потребуется предварительно установить несколько важных компонент:

  1. В случае отсутствия утилиты ADB (Android device bridge) вам нужно ее установить в составе Android SDK,
  2. Скачать Google apps здесь.
Когда все необходимое будет установлено откройте настройки Buildroid: Настройка > Сеть. Во вкладке Адаптер 1 выберите Тип подключения: NAT.


Разверните панель Дополнительно и нажмите кнопку Проброс портов. В открывшемся окне нажмите кнопку Добавить новое правило(Ins). Введите значения в поля Порт хоста и Порт гостя 5555 и нажмите кнопку ОК.


Сейчас запустите виртуальную машину Buildroid. 
Откройте приложение Buildroid VM Configuration, есл под надписью IP management вы увидели IP адрес то это означает, что все работает.
Найдите adb.exe в папке инструментов Android SDK, обычно это папка platform-tools внутри папки c:\android-sdk-windows\.
Откройте папку platform-tools в консоли и выполните следующую команду:

adb connect localhost

После этого скопируйте загруженный архив с приложениями Google в папку platform-tools и загрузите архив на SD карту устройства:

adb push buildroid-gapps-ics-20120317-signed.tgz /sdcard/

Как только архив будет скопирован на виртуальную машину выполните команды:

adb shell
su
mount -o remount,rw /system
tar -xvzf /sdcard/buildroid-gapps-ics-20120317-signed.tgz
mount -o remount,ro /system
reboot

Ваша виртуальная машина будет перезапущена и вы увидите установленные приложения Google включая и Play.

Вы может подключиться к своему аккаунту Google и получить все возможности без ограничений от Gmail и других сервисов Google.


Удачной настройки и экспериментирования с Android на виртуальной машине Virtualbox!


Запуск Android 4.0 на Virtualbox с поддержкой интернет-соединения

В этой статье я хотел бы рассказать о том, как запустить ОС Android 4.0 на виртуальной машине   Virtualbox. Те, кто уже создавал виртуальную машину с Android в Virtualbox, часто сталкивался с проблемой отсутствия поддержки сетевого соединения. Эту проблему решил Daniel Fages, который создал специальную виртуальную машину Buildroid for VirtualBox. В этой виртуальной машине уже включена поддержка сетевого подключения.
Для запуска виртуальной машины вам потребуется:
  1. Установить Virtualbox,
  2. Скачать версию Android 4.0.3_r1 (20120518 build)
    • Без Google apps и Play
      • vbox86p : Сборка для “телефона”, 480×800 разрешение по умолчанию
      • vbox86t : Сборка для “планшета”, 1024×600 разрешение по умолчанию
      • vbox86tp : Сборка для “планшета” с возможностями телефона, 1024×600 разрешение по умолчанию
    • С Google apps и Play
Среди установленных приложений включено приложение для конфигурации виртуальной машины - Buildroid VM Configuration. Здесь можно настроить разрешение экрана и плотность пикселей.
Для разрешения 1280х800 (для планшета) рабочий стол выгладит так:


Для разрешения 480х854:

Также можно настроить способ ввода по умолчанию, используемый в виртуальной машине: виртуальная клавиатура или физическая клавиатура компьютера:


Если вы установили вариант Buildroid без приложений Google, то по умолчанию на виртуальной машине будут установлены только стандартные приложения: Календарь, Браузер, Камера, Калькулятор, Галерея, Email.


В виртуальной машине добавлена поддержка навигации посредством клавиш:
Esc - переход назад по аппаратной кнопке,
Ctrl+Tab, Up, Down, Left, Right - навигация по иконкам приложений на рабочем столе,
Enter - открытие приложения, подтверждение выбора,
Alt+Tab - открыть выбор недавних приложений (Recent).
Если после некоторой паузы экран заблокируется нужно нажать клавишу Esc и сдвинуть кольцо мышкой для разблокирования. Можно отключить полностью блокировку экрана в настройках:
Settings > Developer options > включить Always stay awake.

Теперь вы можете попробовать все доступные возможности Android в Virtualbox.



четверг, 28 марта 2013 г.

Проигрывание аудио на устройстве Android

Работа с аудио в приложениях для Android не представляет особых трудностей. Можно воспроизводить аудио треки, хранящиеся в памяти устройства или с удаленного сервера, правда в последнем случае возможны проблемы с производительностью приложения при низкой скорости сетевого подключения (например, GSM), связанные с необходимостью загрузки трека на устройство при его воспроизведении.
Для реализации проигрывания аудио в приложении необходимо использовать пакет android.media. Главный класс, необходимый для работы с воспроизведением аудио - MediaPlayer. Данный класс предоставляет набор методов по управлению воспроизведением аудио:
  • start() - запуск воспроизведения аудио,
  • pause() - приостанавливает воспроизведение аудио,
  • stop() - завершает воспроизведение.
Для того, чтобы воспроизвести аудио трек из файла-ресурса в приложении нужно написать простой код:

MediaPlayer mediaPlayer;
mediaPlayer = MediaPlayer.create(this, R.raw.mediatest);
mediaPlayer.start();

В случае, если вы хотите проиграть трек с удаленного ресурса нужно немного изменить код:

MediaPlayer mediaPlayer = new MediaPlayer();

try {
   mediaPlayer.setDataSource(trackUrl);


   mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
       @Override
       public void onPrepared(MediaPlayer arg0) {
          arg0.start(); //Запускаем на воспроизведение
       }    
   });

   mediaPlayer.prepare();
   


Здесь мы с помощью метода setDataSource задаем источник аудио, затем устанавливаем обработчик на событие prepared для определения момента, когда медиаплеер будет готов к воспроизведению и с помощью метода prepare блокируем медиаплеер от воспроизведения до тех пор, пока он не будет готов.
Проверить состояния воспроизведения медиаплеера можно с помощью метода isPlaying().
Получить текущую позицию воспроизведения трека можно с помощью метода getCurrentPosition(), метод возвращает позицию в милиисекундах.
Если вы реализуете потоковое проигрывание аудиофайлов, то вам стоит использовать обработчик для события oncompletion для выполнения переключения на следующий трек после завершения воспроизведения текущего трека:

mediaPlayer.setOnCompletionListener(new OnCompletionListener(){
       @Override
       public void onCompletion(MediaPlayer mp) {
          //Запускаем на воспроизведение следующий трек
       }    
   });



Также важно учесть, что при переключении на другой трек нужно сбрасывать состояние медиаплеера на изначальное с помощью метода reset().
При выходе с экрана проигрывания аудио рекомендуется завершать работу с медиаплеером с помощью метода release():

public void onDestroy(){
   super.onDestroy();
   this.mediaPlayer.release();
}


Удачного программирования с использованием аудио в Android.

вторник, 5 марта 2013 г.

Чтение файлов на устройстве Android

Часто при разработке приложений под Android возникают задачи, требующие доступ к файловой системе мобильного устройства, например, если нужно сохранять данные локально в файл на устройстве пользователя. В таком случае необходимо воспользоваться API к файловой системе Android. API предоставляет возможности манипуляции файлами и директориями в файловой системе.
В системе Android существует два способа хранения данных в памяти: во внутренней памяти устройства и на внешнем носителе (SD-карте). Для записи данных во внешнюю память нужно  в файл манифеста приложения AndroidManifest.xml добавить соответствующее разрешение:

<permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></permission>

Я покажу как можно получить список файлов в определенной директории.
Для доступа к файлам и папкам в Android используется класс File из java.io. Конструктор класса File по умолчанию принимает путь до файла или папки:

File imagesPath = new File("/mnt/sdcard/Android/data/images");

Можно указать полный путь к файлу или папке. Также можно получить доступ к корневой директории SD-карты с помощью Environment.getExternalStorageDirectory():

File imagesPath = new File(Environment.getExternalStorageDirectory() + "images"); 

Перед тем, как начать работать с папкой, нужно проверить ее существование:

if(imagesPath.exists()){
   // Выполнение операций над папкой
}


Для того, чтобы получить список файлов в определенной папке в классе File реализован метод listFiles():

File[] images = imagesPath.listFiles();

Другие возможности класса File можно посмотреть в документации языка Java.
Приятного программирования с использованием API файловой системы Android!

суббота, 23 февраля 2013 г.

Проверка подключения устройства к сети

Довольно часто мобильные приложения используются для передачи данных по сети, например, для загрузки ленты новостей из внешних интернет-ресурсов, загрузки данных с собственного сервера, отправки сообщений из приложения в аккаунт пользователя в социальных сетях и т. д. Для таких приложений необходимо активное подключение к одному из доступных видов сети: GSM, GPRS, 3G, WiFi и другие.
Для корректной работы приложения нужно проверять текущее состояние подключения к сети, а затем при условии доступности сети выполнять дальнейшие операции.
Для получения состояния подключения к сети нужно добавить соответствующие разрешения в файл манифеста  AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

 Для проверки состояния сети предназначены классы ConnectivityManager и NetworkInfo. Следующий код определяет существует ли подключение к беспроводной сети:

 ConnectivityManager connMgr = (ConnectivityManager)
        getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        // Выполнить дальнейшие операции
    } else {
        // Показать сообщение об ошибке
    }



В классе NetworkInfo реализованы методы для определения типа сети, к которой в данный момент подключено мобильное устройство:
getType() - возвращает одно из значений перечисления: TYPE_MOBILE, TYPE_WIFI, TYPE_WIMAX, TYPE_ETHERNET, TYPE_BLUETOOTH,
getTypeName() - возвращает имя типа сети в читаемом для человека виде, например "WIFI".
Этой информации должно быть достаточно для выполнения различных действий при подключении к различным беспроводным сетям.
Удачного программирования!

понедельник, 18 февраля 2013 г.

Управление эмулятором Android через telnet

Не каждый разработчик приложений под Android имеет собственное реальное устройство, на котором можно тестировать приложения. Часто для тестирования приложений используется встроенный в Android SDK эмулятор. Иногда при разработке приложения необходимо проверить его работу при определенных условиях, например, при низком заряде батареи, при входящем вызове и т.д., а также протестировать геолокацию, доступ к которой на эмуляторе затруднен.
Для таких случаев можно управлять запущенным эмулятором посредством telnet. Для этого необходимо выполнить несколько простых действий:
  1. Включите telnet в случае если он отключен в списке компонент Windows: открыть Панель инструментов, открыть раздел Программы и нажать ссылку Включение и отключение компонентов Windows, где поставить галочку возле 
  2. Откройте командную строку и введите команду:
  3. > telnet localhost 5554
Заметьте, что 5554 - стандартный порт для эмулятора, его значение будет другим для других запущенных эмуляторов.
Telnet поддерживает набор команд, позволяющих управлять эмулятором:
help - выводит список команд
event - симулирует аппаратные события
geo - команды, связанные с геолокацией
gsm - команды, связанные с сетью GSM
kill - уничтожает экземпляр эмулятора
network - управляет настройками сети
power - управляет энергопотреблением
quit|exit - выходит из сессии
sms - команды, связанные с SMS

Например, для того, чтобы установить уровень заряда батареи нужно выполнить команду:
power capacity <percent>

Уровень заряда батареи установится на уровне значения percent в процентах.
Для эмуляции входящего звонка нужно выполнить команду:
gsm call <phone_number>

Для установки текущих координат абонента нужно выполнить команду:
geo fix <lat> <lng>


Приятного программирования с использованием telnet!