mikelsv (mikelsv) wrote,
mikelsv
mikelsv

Categories:

Android SDK Create Service

На днях я осиливал создание сервиса для андроида. Я вообще сейчас активно осиливаю андроид и не только SDK, но и NDK. И кто бы мог сказать, что я начну писать на джаве? Кажется я не переносил одно ее название, но как говориться профессионал специалист должен может научиться писать на всем. Была бы мотивация. Она внезапно есть и вот результат.

Скажу честно, я банально спер пример отсюда: http://marakana.com/forums/android/examples/60.html . Он настолько потрясающий, что я не стал переписывать это творение. Это сервис с проигрывателем музыки. Тема сложная: форматы, организация... Пхэ. Как оказалось на андроиде это всего три строчки: открыть музыкальный файл, запустить проигрывание и остановить его. Сам сервис тоже не сложен в понимании. Это класс, который по идее будет все время висеть в памяти.

Ну что, поехали.
Качаем мой исходник http://source.centerix.ru/source/android/ServicesDemo.zip и его брэйнкэнди http://marakana.com/static/tutorials/braincandy.m4a или берем свой музыкальный файл.

Щас я быстренько поправлю его исходник для сборки под мой Android 2.3 - API 10. В моем исходнике исправления уже внесены. И тут я не буду рассказывать очевидные вещи по настройке системы.
Обновляем файлы: android update project -p ./ --target android-10.
Запускаем ant debud и правим ошибки:
Добавляем import android.R; в MyService.java.
Добавляем import android.net.Uri; и заменяем R.raw.braincandy на Uri.parse("file:///sdcard/braincandy.m4a") в MyService.java.
Ок.

Собираем проект.
Если у вас музыка не в /sdcard/braincandy.m4a поправьте эту строчку, указав путь к существующему файлу. К сожеланию я не понял, как правильно запихнуть музыкальный файл в ресурсы. И был бы рад это узнать. И чтобы долго не искать воспользовался подвернувшейся конструкцией Uri.parse();

Запускаем: ant debug. Записываем на устройство. Устанавливаем. Запускаем. Жмем Start. Слушаем музыку. У меня заиграла.
Если нет думайте, что пошло не так и на каком шаге влезла проблема. Лично я долго сравнивал свой сервис с этим и наконец нашел разницу: в моем классе сервиса был конструктор class UseFuse extends Service ... public UseFuse(Context context){ } . Из-за него при запуске сервиса программа падала. В чем связь я так и не понял.

Поздравляю, у вас есть готовый работающий сервер, от которого можно плясать. Это не то же самое, что писать с нуля, не понимая, что же из написанного не работает.

И как бонус коротенькое описание работы сервиса, как я это увидел.
При запуске программы или в момент запуска сервиса запускается MyService.onCreate();
ServicesDemo.startService() запускает MyService.onStart(); Сервис запускается.
ServicesDemo.stopService() запускает MyService.onStop(); Сервис останавливается.

На на сегодня все, а сегодня кончится через пару минут и можно будет начать завтрашние дела.
Tags: android, java, sdk, service
Subscribe

  • Android JNI return class

    Не могу молчать, решив еще одну задачку в андроиде. Надо бы рассказать и про другие решения, например код того же xml парсера, использующего…

  • Взгляд внутрь apk. Склерозу на заметку.

    Вариант первый. 1. качаем dex2jar и JD-GUI и apktool. 2. Запускаем dex2jar file.apk 3. Открываем полученный file.jar в jd-gui. Filse->Save All…

  • Android SDK + NDK. Интеграция классов

    Довольно давно потребовалось написать XML парсер для андроида. А под рукой как раз был парсер на c++. С тех пор возникла задача объединить класс на…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments