Авторские статьи Создаем php-скрипты для Android

Discussion in 'Статьи' started by radioked, 23 Dec 2010.

  1. radioked

    radioked New Member

    Joined:
    22 Dec 2010
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    0. Вступление

    На пике популярности умных телефонов каждый пользователь смартфонов хотел бы писать приложения для собственного аппарата. К сожалению для большинства начинающих программистов установка и настройка SDK, не говоря уже о самом кодинге, может вызвать кучу проблем. Ко всему этому требуется знать хотя бы основы языка программирования для нужной платформы. Некоторые могут поспорить, сказав что на рынке программных продуктов уже появились предложения, дающие возможность создания приложений на других языках, как например MonoDroid. Но и это не исключает множество подводных камней для начинающих кодеров.

    Однажды мне понадобилось написать небольшое приложение для моего телефона c Android, для автоматизации некоторых действий. Так как я не наделен обширными знаниями ни в одной области программирования, было решено найти простой способ выполнить требуемую задачу. После недолгих поисков я нашел возможность создавать и запускать php-скрипты прямо с моей трубки, что показалось мне гораздо привликательнее, чем разбираться c java =)

    В данной статье я расскажу о создании и запуске на аппаратах c Android скриптов написанных при помощи популярного языка PHP. Хотелось бы избежать холиваров на тему никчемности и "чемности" данного языка, так как данная статья просто рассказывает о реализации такой возможности.

    1. Установка и настройка требуемых пакетов.

    Для начала нам потребуется скачать и установить два пакета: SL4A environment и PHP for Android APK . По очереди установите их на свой аппарат, после чего запустите PHP for Android и нажмите кнопку Install. Приложение выкачает и распакует из интернета несколько требуемых архивов. В реале уже можно создавать скрипты прямо с вашего аппарата, но не стоит торопиться, так как гораздо удобнее работать прямо с вашего компьютера, проверяя работоспособность на эмуляторе. Надо сказать что SL4A поддерживает не только php, но и несколько других скриптовых языков, в частности мой любимый perl =)

    Что бы настроить эмулятор, вам потребуется скачать Java SE Runtime Environment и Android SDK . Установить первое и распаковать второе в любую удобную вам папку, пусть это будет "С:\android-sdk-windows" (если конечно вы используете Windows). Затем запустите SDK Setup.exe. Вам предложат скачать и установить кучу пакетов, но если вы не желаете тратить траффик или время, просто нажмите "Cancel". После проделанных оппераций перейдите на вкладку "Available packages" и выберите нужную платформу, в моем случае это "SDK Platform Android 2.1, API 7, revision 1 \ Archive for Windows", так как именно такая ось стоит на моем аппарате. Жмем "Install selected" и ждем окончания загрузки и установки требуемых пакетов.

    Теперь вам потребуется создать новое устройство на вашем компьютере. Для этого запускаем SDK Manager.exe, переходим на вкладку "Virtual devices" и нажимаем на кнопку "New". Вводим название нашего устройства и выбираем требуемую платформу в поле находящемся ниже. Указываем размер сзодаваемой SD - карточки, например пусть это будет 10 мегобайт. Можно конечно подключить некоторые аппаратные средства на вашем компьютере, например микрофон, но на данном этапе нам это не требуется. Затем нажимаем "Create AVD" и получаем готовое виртуальное устройство. Запустить его можно кнопкой "Start".

    На этом наши действия по настройке рабочей платформы не заканчиваются. Вам потребуется установить наши apk пакеты на только что созданный эмулятор. Для этого перейдем в папку с нашим Android SDK, а затем в папку tools (или platform-tools). В данном каталоге находится требуемая нам утилита, а имеенно adb.exe. Запускается она слеующим образом:

    Code:
    c:\android-sdk-windows\platform-tools>adb install [путь к установочному пакету]
    Запусите установку наших пакетов и ищите установленные приложения на вашем эмуляторе.

    Для передачи файлов на нашу виртуальную флэш карту мы воспользуемся ddms.bat, находящийся в папке tools. Запустите его при работающем эмуляторе, выберите нужное виртуальное устройство, нажмите "Devices"->"File Explorer" и перейдите в папку "/sdcard/sl4a/scripts". В эту папку мы и будем загружать наши скрипты, нажимая на маленькую иконку сверху (вторая слева).

    2. Создание самого приложения.

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

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

    toast:Hello!:1292957649 - где toast - команда приказывающая вывести всплывающее окно с текстом Hello!, а 1292957649 - время создания данной команды, создаваемой функцией php time() . Время нам требуется для того, что бы скрипт на телефоне не выполнял одну и ту же комманду несколько раз, как все это работает, вы поймете позже. Как сами видите, для разделения атрибутов используется двоеточие.

    Скрипт производящий запись будет выглядеть следующим образом (записывать будем в файл 1.php):


    PHP:
    <form action='' method=POST>
    <input type=text name='command' size='20'>
    <input type=submit value='Command!'>
    </form>

    <?
    if ($_POST['command']) {
    echo $_POST['command'];
    $fp = fopen("1.php", 'w+');
    flock($fp, LOCK_EX); 
    fwrite($fp, $_POST['command'] . ":" . time());
    flock($fp, LOCK_UN); 
    fclose($fp);
    }
    ?>
    Комманды будем вводить в следующем виде:

    команда:атрибут, например toast:Hello!. Время добавится автоматически.

    Скрипт на нашем телефоне будет поддерживать следующие комманды

    Code:
    [B]toast:message[/B] - всплывающее окно с тектом [message]
    [B]vibrate[/B] - заставить телефон вибрировать
    [B]sms:number|message[/B] - отправить sms на номер [number] с текстом [message], обратите внимание что телефон и сообщение разделяются символом "|"
    [B]recaudio:rectime[/B] - начать запись с микрофона, где rectime - время записи в секундах
    Теперь перейдем к основному нашему скрипту.

    PHP:
    <?php

    // (c) radioked

    // Настройки

    $url "http://yor_host/1.php"// url управляющего скрипта
    $sleeptime 60// время в секундах, на которые засыпает скрипт перед повторным обновлением

    // Вывести тост =)
    function toast($message) {
        global 
    $droid;
        
    $droid -> makeToast($message);
    }

    // Вибрация
    function vibrate() {
        global 
    $droid;
        
    $droid->vibrate();
    }


    // Посыл смс
    function sendsms($atr) {
        global 
    $droid;
        list(
    $phone$text) = explode ("|"$atr);
        echo 
    "Number: " $phone " Text: " $text "\n";
        if (
    $droid->smsSend($phone$text)) {
            echo 
    "Sms sended!\n";
        }
    }

    // Запись с микрофона в айдифайл на sd-карту
    function recmic($rectime) {
        global 
    $droid;
        
    $droid -> recorderStartMicrophone("/sdcard/audio" time() . ".amr");
        
    sleep($rectime);
        
    $droid -> recorderStop();
    }



    set_time_limit(0);
    $time time();


    while (
    1) {
        
        
    $result file_get_contents($url);
        
        echo 
    "===== Data start ===== \n";
        echo 
    $result "\n";

        list(
    $c$a$t) = explode (":"$result);
        
        echo 
    $c " = " $a " Time = " $t "\n";

        if (
    $t != $time) {
        
        switch(
    $c)
        {

            case 
    "toast" :
             
    toast($a);
            break;
            
            case 
    "vibrate" :
             
    vibrate();
            break;
            
            case 
    "sms" :
             
    sendsms($a);
            break;
            
            case 
    "recaudio" :
             
    recmic($a);
            break;
            
            default:
            break;

        }
        
        
    $time $t;
        
        }
        
        echo 
    "===== Data end ===== \n\n";
        
    sleep($sleeptime);
    }

    ?>
    Думаю в данном коде все должно быть понятно, я затрану лишь ключевые моменты. Обратим внимание на строки:

    PHP:
    require_once("Android.php"); 
    $droid = new Android();
    Как видим мы подключаем класс Android.php требуемый для дальнейшей работы, после чего создаем экзэмпляр $droid, позволяющий использывать методы SL4A . Например:

    PHP:
    $droid -> makeToast("Hello!");
    который выведет всплывающее окно с текстом Hello!. Или:

    PHP:
    $droid->smsSend("+7xxxxxxxxxx""Hello!"); 
    который отправит смс на номер +7xxxxxxxxxx с содержанием Hello!.

    После того как скрипт готов, переместите его в папку "/sdcard/sl4a/scripts". Затем запустите SL4A и выберите в списке наш php-файл. Если все правильно, вы должны увидеть результат правильной работы.

    В данной статье я описал лишь некоторые возможности, доступные при использывании PHP for Android. Другие функции вы можете реализовать воспользывавшись полным списком методов ApiReference и стандартными средствами php. Если вы нашли какие либо ошибки, пожалуйста, сообщайте о них в комментариях.

    3. Список ссылок приведенных в статье:

    Code:
    SL4A environment - http://android-scripting.googlecode.com/files/sl4a_r3.apk
    PHP for Android APK - http://php-for-android.googlecode.com/files/phpforandroid.apk
    Java SE Runtime Environment 6u16 - https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/[email protected]_Developer
    Android SDK - http://developer.android.com/sdk/index.html
    API Reference - http://code.google.com/p/android-scripting/wiki/ApiReference
    Php For Android - http://www.phpforandroid.net
    Scripts collection - http://www.phpforandroid.net/manual/en/index/scripts
    Несколько скриптов - http://www.phpforandroid.net/scripts
     
    #1 radioked, 23 Dec 2010
    Last edited: 23 Dec 2010
    1 person likes this.
  2. HBWS

    HBWS Member

    Joined:
    26 Nov 2010
    Messages:
    232
    Likes Received:
    21
    Reputations:
    0
    Очень интересно. А как проверить что за ОC стоит, с помощью РНР?
     
    #2 HBWS, 29 Dec 2010
    Last edited: 1 Jan 2011
  3. PIN

    PIN Member

    Joined:
    25 Jul 2010
    Messages:
    53
    Likes Received:
    7
    Reputations:
    1
    PHP:
    <?php
    phpinfo
    (1);
    ?>
    на клиентской части яваскриптом
    Code:
    document.write(navigator.platform);
    
     
Loading...