Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написать программу со следующими требованиями, Возможно ли? 
:(
    Опции темы
vegstr
Дата 21.6.2012, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



Возникло желание написать приложение с определенными требованиями. В программировании не силен. На Java никогда не писал. Немного работал с Pascal/Delphi. Поэтому для начала хотел бы узнать - возможно ли в принципе написать такое. 
  
 Требования следующие: 
 Программа должна по расписанию через определенные промежутки времени записывать звук с микрофона и уметь его проигрывать. Так же крайне желательно, чтоб записанное можно было скидывать на комп. Прога не должна мешать обычному использованию телефона (звонки/смс/инет и т.п). Необходима возможность настраивать время начала и конца записи, интервал между записями и их длительность. Например - записывать с 08:00 до 23:00 через каждые 30 минут длительностью 10 мин. 
  
 Прога нужна для телефонов Nokia 5310 и Samsung GT-S5230. 
  
 Просьба к знающим людям, подскажите, возможно ли такое на этих телефонах?
PM   Вверх
Kalisnik
Дата 21.6.2012, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.6.2011

Репутация: нет
Всего: нет



007 не стал бы использовать J2Me, потому что получится в 02 раза дороже. IMHO, я бы пересмотрел форму подачи вопроса(ов).

Это сообщение отредактировал(а) Kalisnik - 21.6.2012, 16:32
PM MAIL   Вверх
vegstr
Дата 21.6.2012, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



Все намного прозаичнее. 007 и 02 тут абсолютно ни при чем. smile Проверка одной теории насчет работы человеческой памяти. На научное исследование не тянет, конечно. Так... Баловстово.

Прога не должна скрываться. Надо чтобы она НЕ МЕШАЛА пользоваться телефоном.
PM   Вверх
Kalisnik
Дата 21.6.2012, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.6.2011

Репутация: нет
Всего: нет



честно говоря я не совсем компетентен, но надеюсь форумчане меня поправят. 

1.     Не мешать прога будет только в свернутом виде - но эту функцию поддерживают не все телефоны и нет гарантий ее стабильной работы, т.к. всеми java-приложениями управляет собственно телефон, и если он посчитает что ему не хватает ресурсов, он может запросто Ваше приложение пришлепнуть.  На счет  Nokia и Samsung не знаю, но в SE свернуть мидлет возможно (ну может в самых древних моделях такая функция отсутствует).

2.     Записывать то можно, только хранилище телефона (постоянное хранение данных) не резиновое. На карту памяти телефона java-приложение не пишет на сколько мне известно (может конечно и существуют такие модели телефонов, но это исключение), и на каждой модели телефона размер хранилища данных индивидуален (определяется производителем). Не рассчитывайте на бесчисленные мегабайты памяти - все много скромнее. Так что записывать с 8:00 до 23:00 может просто физически не хватить памяти. И на ПК записанное Вы сможете сбросить только через саму (написанную Вами) программу. Т.к. все данные в телефоне приложение сохраняет в байт-коде и не на всех телефонах доступ к хранилищу телефона открыт пользователю через обычное подключение телефон-компьютер (есть конечно методы выдергивания этих данных и т.д., но это все костыли). И даже если Вы выдерните этот байт-код, то получить из него информацию в оригинальном виде тоже будет непросто - так как методы кодирования данных у каждого производителя телефона свои собственные. smile В общем довольно муторно будет, если Вы не в курсе чего и как делать smile

Я бы порекомендовал диктофон и 1 день Вашего времени - это будет быстрее чем параллельно с написанием программы изучать java. Если такой вариант все же неприемлем, то советую Android smile

Это сообщение отредактировал(а) Kalisnik - 21.6.2012, 21:40
PM MAIL   Вверх
oxigen
Дата 22.6.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 12.4.2010

Репутация: 4
Всего: 4



Соглашусь насчет Android. Если нужно именно решить конкретную задачу, то самое простое - поискать уже готовый диктофон с таймером под андроид.

А под MIDP столкнетесь с довольно большими сложностями и не факт, что в итоге вообще будет работать на этих моделях.
PM MAIL   Вверх
vegstr
Дата 22.6.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



Согласен, что на Android или с каким-либо аппаратным диктофоном было-бы проще. Но дело в том, что в данном случае это просто баловство, своего рода хобби. Если не получится - ничего страшного не произойдет. smile И тратить деньги нет возможности\желания. Так что я все-таки попробую. Хотя-бы немного Java изучу. Все польза.

Оба телефона поддерживают File Connection API. Я правильно понимаю, что писать на карту памяти они умеют?
PM   Вверх
Kalisnik
Дата 22.6.2012, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.6.2011

Репутация: нет
Всего: нет



Цитата(vegstr @  22.6.2012,  13:05 Найти цитируемый пост)
Оба телефона поддерживают File Connection API. Я правильно понимаю, что писать на карту памяти они умеют? 


Да, умеют.

P.S. Видимо поддерживающих File Connection API телефонов не так уж и мало, как мне казалось. )

Это сообщение отредактировал(а) Kalisnik - 22.6.2012, 13:29
PM MAIL   Вверх
vegstr
Дата 27.6.2012, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



Пытаюсь разобраться с запуском мидлета с помощью PushRegistry.

Правильно ли я понял, что невозможно просто указать определенное время, в которое приложение будет запускаться каждый день, а требуется указать конкретные дату и время запуска и в дальнейшем каждый раз обновлять дату (+1 день например)?


Код

/**
 *  Schedule this MIDlet's launch.
 *  @param deltatime the length of time in
 *  milliseconds before expiration.
 */
private void scheduleMIDlet(long deltatime)
    throws ClassNotFoundException,
        ConnectionNotFoundException,
       SecurityException {

    String cn = this.getClass().getName();
    // Get the current time by calling Date.getTime()
    Date alarm = new Date();
    long t = PushRegistry.registerAlarm(cn,
         alarm.getTime()+deltatime);
}


Объясните, плз, как правильно вычислять deltatime в вышеуказанном коде? Допустим надо запустить приложение в 10:00 следующего дня.
Описание класса Date читал. Но что-то пока никак не соображу.  smile


Это сообщение отредактировал(а) vegstr - 28.6.2012, 09:27
PM   Вверх
math64
Дата 28.6.2012, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



При использовании File Connection API мидлет должен быть подписан - иначе он перед каждой записью на карту памяти будут просить разрешения.
Если в телефоне симкарта с безлимитным интернетом, можно на компьютере запустить сервер, который будет принимать данные с телефона через интернет.
deltatime вычислять не надо - нужно просто указать время запуска приложения (предватительно проверив что это время ещё не наступило)
При использовании сервера на компьютере можно возложить планирование записей на компьютер - компьютер посылает на телефон запрос, телефон записывает данные с микрофона и отсылает на компьютер.

PM   Вверх
vegstr
Дата 28.6.2012, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



Цитата

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

Я в курсе. Он и про использование микрофона спрашивает.
Цитата

можно на компьютере запустить сервер, который будет принимать данные с телефона через интернет.
 
Спасибо за совет. В данной ситуации не особо нужно. Телефон всегда со мной и записи больше на нем нужны, чем на компе.
Цитата

deltatime вычислять не надо - нужно просто указать время запуска приложения (предватительно проверив что это время ещё не наступило)

Можно по-подробнее? Желательно с примером кода.  Заранее огромное спасибо! smile
PM   Вверх
math64
Дата 28.6.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Код

Calendar calendar = Calendar.getInstance();
calendar.set(YEAR, year);
calendar.set(MONTH, month);
calendar.set(DATE, date);
calendar.set(HOUR_OF_DAY, hour);
calendar.set(MINUTE, min);
calendar.set(SECOND, sec);
calendar.computeTime();
long t = PushRegistry.registerAlarm(cn,  calendar.getTimeInMillis());


PM   Вверх
vegstr
Дата 3.7.2012, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



math64
Спасибо за помощь. С этим разобрался.

Теперь возникла другая проблема. Нижеприведенный код нормально работает на Nokia 5310. Создается нормальный аудиофайл, который можно прослушать на компе или телефоне. На Samsung GT-S5230 создается файл нулевой длины, а приложение, когда запись останавливается, выдает ошибку: java.io.IOException: I/O error occurs during commit.

Код

protected void recordAudio() {
        StringItem errorItem;
        Player p;    
        errorItem = new StringItem("", "");
        mainForm.append(errorItem);
    
try {
              // Создание файла на флешке
              FileConnection fc = (FileConnection) Connector.open(createFileName());
              if(!fc.exists()) {    
                    fc.create();
              }
              p = Manager.createPlayer("capture://audio");
              p.realize();
              RecordControl rc = (RecordControl)p.getControl("RecordControl");
              OutputStream output = fc.openOutputStream();
    rc.setRecordStream(output);
    rc.startRecord();
              p.start();
              Thread.currentThread().sleep(30000); // Записывать 30 сек
              rc.commit();
              p.close();
    fc.close();
        } catch (IOException ioe) {
            errorItem.setLabel("Error");
            errorItem.setText(ioe.toString());
        } catch (MediaException me) {
            errorItem.setLabel("Error");
            errorItem.setText(me.toString());
        } catch (InterruptedException ie) {
            errorItem.setLabel("Error");
            errorItem.setText(ie.toString());
        }
}


Заработало smile
Вместо setRecordStream() использовал setRecordLocation()

Это сообщение отредактировал(а) vegstr - 3.7.2012, 16:25
PM   Вверх
vegstr
Дата 17.7.2012, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.6.2012

Репутация: нет
Всего: нет



Люди добрые, подскажите! Нижеприведенный код нормально работает в эмуляторе. Процедура записи запускается таймером через равные промежутки времени. На телефоне (Samsung s5230) тоже работает в активном приложении. А вот в свернутом состоянии выдает исключение:

    javax.microedition.media.MediaException: unable to realize - initialize fail

При этом файлы создаются нормально, но нулевой длины. Никак не могу понять в чем дело :(

Код

protected void recordAudio() {
        StringItem errorItem;
        Player p;

        errorItem = new StringItem("", "");
        mainForm.append(errorItem);

        try {
            // Создание файла на флешке
            FileConnection fc = (FileConnection) Connector.open(createFileName());
            if(!fc.exists()) {    
                fc.create();
            }
            // create the Player object
            p = Manager.createPlayer("capture://audio");
            p.realize();
            // get the RecordControl over this Player
            RecordControl rc = (RecordControl)p.getControl("RecordControl");
            p.prefetch();
            rc.setRecordLocation(fc.getURL());
            // start recording
            rc.startRecord();
            p.start();
            Thread.currentThread().sleep(300000); // Записывать 5 мин
            rc.stopRecord();
            rc.commit();
            p.close();
            fc.close();
        } catch (IOException ioe) {
            errorItem.setLabel("Error");
            errorItem.setText(ioe.toString());
        } catch (MediaException me) {
            errorItem.setLabel("Error");
            errorItem.setText(me.toString());
        } catch (InterruptedException ie) {
            errorItem.setLabel("Error");
            errorItem.setText(ie.toString());
        }
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1704 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.