7 страниц V  1 2 3 > »         
> Чтение файлов .sms, сделанных программой SMSBackUp, Уважаемые кодеры, есть просьба!
Doktor Кот
сообщение 26.3.2007, 6:05


Опытный
***

Группа: Пользователи
Сообщений: 106
Регистрация: 12.8.2006
Из: Красноярск
Пользователь №: 94 751
Модель телефона: ROKR E1 with ТП
Прошивка: Electro_R373...49R

Рейтинг: 4.5



Уважаемые кодеры, есть к Вам небольшая просьба! Я уверен, что все Вы знакомы с программой SMSBackup, встроенной в корелет от Valleo: MediaViewer. Она, по приходу смс, считывает ее, и сохраняет в файл на флешку с расширением .sms, в котором находится текст входящей смс. И данный бэкап так же просто можно восстановить в телефон при помощи MediaViewer. Хотелось бы увидеть программу, при помощи которой можно было бы читать эти резервные копии смс на компе! А если она еще и сохранять/восстанавливать будет уметь, то это будет просто классно! Ну что, возьмется кто-нибудь?

Сообщение отредактировал Doktor Кот - 26.3.2007, 6:11
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 26.3.2007, 7:28


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Если уважаемый Valleo поделится информацией о алгоритме созранения и восстановления смс, то реализовать это на компе будет не сложно.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Avton
сообщение 26.3.2007, 7:34


Ветеран
*****

Группа: Разработчики
Сообщений: 305
Регистрация: 12.8.2005
Пользователь №: 48 481
Модель телефона: Razr I

Рейтинг: 107.5



Цитата(Serg c650 @ Сегодня, 15:28)

уважаемый Valleo

не знает этой информации. Его уже оч. много раз спрашивали. Плагин просто отсылает команду ОС телефона: Сохранить смс. А в каком формате он ее сохранят пока неизвестно sad.gif

Сообщение отредактировал Avton - 26.3.2007, 7:36
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Doktor Кот
сообщение 26.3.2007, 8:12


Опытный
***

Группа: Пользователи
Сообщений: 106
Регистрация: 12.8.2006
Из: Красноярск
Пользователь №: 94 751
Модель телефона: ROKR E1 with ТП
Прошивка: Electro_R373...49R

Рейтинг: 4.5



Сейчас заметил, что PST работает с файлами с расширением sms, вот только что то не открывает sms от SMSBackup'а, пишет, что формат не опознал... Ну я считаю, если будет большое желание, то сделать можно все! Ведь еще не такие вещи сотворяли с нашей старушкой-моторолой!!
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 26.3.2007, 11:53


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Киньте сюда какой-нибудь файл *.sms
И чё там написано желательно тоже выложьте, поковыряю
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Valleo
сообщение 1.4.2007, 18:12


Гуру
******

Группа: Почетные МотоФаны
Сообщений: 728
Регистрация: 21.10.2005
Из: Находка
Пользователь №: 55 219
Модель телефона: Z3
Прошивка: 0DR

Рейтинг: 692.5



формат СМС очень странный =)
Если смс состоит из 1 части - из нее легко вытащить текст и все остальное.
Если уже из нескольких - то там уже начинаются траблы.

Собственно вот класс в прошивке, разбирающий СМС по частям (и работает он вроде тока для 1-составной смс, так как с многосоставними смс выскакивает ошибка)

Код

public class SMSMessage
{

    public static final byte m_TEXTB = 1;
    public static final byte m_MMSB = 3;
    private byte m_myVersionB;
    private byte m_myEndianB;
    private byte m_myDataaB[];
    private int m_myMsgSizeI;
    private int m_myHdrSizeI;
    private String m_myFolderString;
    private int m_myIdentifierI;
    private byte m_myTypeB;
    private Date m_myTimestampDate;
    private String m_myFromAddressString;
    private String m_myToAddressString;
    private byte m_myStateReadB;
    private byte m_myStateLockB;
    private String m_myBodyTextString;
    private int m_mySegmentaI[];
    static final byte m_CURRENT_VERSIONB = 1;
    static final byte m_BIG_ENDIANB = 1;
    static final byte m_LITTLE_ENDIANB = 2;

    public SMSMessage(byte message[])
        throws IOException, IllegalArgumentException, SecurityException
    {
        m_myDataaB = new byte[message.length];
        System.arraycopy(message, 0, m_myDataaB, 0, m_myDataaB.length);
        int cursor = 0;
        m_myVersionB = m_myDataaB[cursor];
        cursor++;
        if(1 != m_myVersionB)
            throw new IllegalArgumentException("Message representation of version " + m_myVersionB + " is not supported");
        m_myEndianB = m_myDataaB[cursor];
        cursor++;
        if(1 != m_myEndianB)
            throw new IllegalArgumentException("Message data endianess number " + m_myEndianB + " is not supported");
        m_myMsgSizeI = _getShortII(cursor);
        cursor += 2;
        if(m_myMsgSizeI + 4 != message.length)
            throw new IllegalArgumentException("Incorrect message size " + message.length + ", shall be " + (m_myMsgSizeI + 4));
        m_myHdrSizeI = _getShortII(cursor);
        cursor += 2;
        m_myFolderString = getString(cursor);
        cursor += 1 + m_myDataaB[cursor];
        m_myIdentifierI = _getShortII(cursor);
        cursor += 2;
        m_myTypeB = (byte)(m_myDataaB[cursor] & 0xff);
        cursor++;
        if(1 != m_myTypeB && 3 != m_myTypeB)
            throw new IllegalArgumentException("Incorrect type of message " + m_myTypeB);
        long timestamp = getLong(cursor);
        cursor += 8;
        m_myTimestampDate = 0L != timestamp ? new Date(timestamp) : null;
        m_myFromAddressString = getString(cursor);
        cursor += 1 + m_myDataaB[cursor];
        m_myToAddressString = getString(cursor);
        cursor += 1 + m_myDataaB[cursor];
        m_myStateReadB = m_myDataaB[cursor];
        cursor++;
        m_myStateLockB = m_myDataaB[cursor];
        cursor++;
        int count = _getShortII(cursor);
        cursor += 2;
        m_myBodyTextString = null;
        if(count > 0)
        {
            if(1 == m_myTypeB)
                m_myBodyTextString = getString(cursor, count);
            cursor += count;
        }
        count = m_myDataaB[cursor] & 0xff;
        cursor++;
        m_mySegmentaI = new int[count];
        for(int index = 0; index < count;)
        {
            m_mySegmentaI[index] = _getShortII(cursor);
            index++;
            cursor += 2;
        }

    }

    private final int _getShortII(int cursor)
    {
        return (m_myDataaB[cursor + 0] & 0xff) << 8 | m_myDataaB[cursor + 1] & 0xff;
    }

    private final long getLong(int cursor)
    {
        long value = 0L;
        for(int index = 0; index < 8; index++)
        {
            value <<= 8;
            value |= m_myDataaB[index + cursor] & 0xff;
        }

        return value;
    }

    private final String getString(int cursor, int length)
    {
        length >>= 1;
        if(0 == length)
            return null;
        char chars[] = new char[length];
        for(int index = 0; index < length; index++)
            chars[index] = (char)_getShortII(cursor + (index << 1));

        return new String(chars);
    }

    private final String getString(int cursor)
    {
        return getString(cursor + 1, m_myDataaB[cursor] & 0xff);
    }
}


Попробуйте разобраться wink.gif Мож что выйдет.
Тестовую СМС прилагаю (извращенцам не стоит пытаться отыскать там мой номер - изменил в хексе =)) )

Собственно прошивка позволяет делать бэкап исхоящих СМС =) Но их восстановить невозможно.

Сообщение отредактировал Valleo - 3.4.2007, 9:16
Прикрепленный файл 07_12_43.zip   ( 538 байт ) Кол-во скачиваний: 324
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 2.4.2007, 10:49


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Valleo, спасибо за код, но яву я не знаю(( Щас попробую в файлике поковыряться
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
dvsdigiman
сообщение 2.4.2007, 15:13


Интересующийся
**

Группа: Пользователи
Сообщений: 96
Регистрация: 21.11.2006
Пользователь №: 107 629
Модель телефона: V3i
Прошивка: 03.05R

Рейтинг: 12



А этот код для восстановления смс из файла?
Он предназначен и для длинных смс, т.е. других кусков кода в проше больше нет?

Valleo,[OFF] я конечно не сюда запостил, но добавь все-таки бэкап исходящих...[/OFF]


p/s/ щас попытаюсь разобраться с алгоритмом...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
dvsdigiman
сообщение 2.4.2007, 19:59


Интересующийся
**

Группа: Пользователи
Сообщений: 96
Регистрация: 21.11.2006
Пользователь №: 107 629
Модель телефона: V3i
Прошивка: 03.05R

Рейтинг: 12



Код простенький, только вроде не хватает чего-то... Все обрывается...

Valleo, может есть еще немножко кода? И еще если есть таблицу кодировки Unicode BigEndian...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Valleo
сообщение 3.4.2007, 7:13


Гуру
******

Группа: Почетные МотоФаны
Сообщений: 728
Регистрация: 21.10.2005
Из: Находка
Пользователь №: 55 219
Модель телефона: Z3
Прошивка: 0DR

Рейтинг: 692.5



Serg c650,
Ну С++ тоже самое все )

dvsdigiman, Это парсер СМС - т.е. он парсит СМС на составляющие, и ему не важно односоставная или несколькисостовная смс. Но с несколькисоставными он не фурычит - так как не возвращает текст. В том то и дело что этим кодом тока односоставные смс читать.


dvsdigiman,
Я выдрал кусок из класса который касается именно парсинга смс по составляющим. Остальные вспомогательные функции, такие как getText() которая вернет m_myBodyTextString, я убрал так как для вас они не важны.
таблиц таких у меня нет
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Чтение файлов .sms, сделанных программой SMSBackUp, Уважаемые кодеры, есть просьба! · Программы для работы с смс, справочником и другими файлами · Forum
 

7 страниц V  1 2 3 > » 
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 17.11.2017, 17:29

Форум живёт: