Передача сообщений на Android из sqlite db на моем ноутбуке

Я новый пользователь андроида. Только сегодня перешел с нокии на андроид. Я искал различные решения для передачи моих смс (только текстовые сообщения) с моей старой Nokia на мой новый Android (Galaxy Ace с Android 2.3).

Изучив свой ноутбук, я обнаружил, что синхронизированные (с использованием Nokia PC Suite) смс хранятся в AppData в виде файла sqlite.

Могу ли я перенести все это на свой новый Android? Любое приложение для этого?

Ответы (2)

Ну я решил проблему. Документирование решения здесь для будущих ссылок.

Используя любой менеджер sqlite (я использовал плагин firefox - SQlite Manager), экспортируйте базу данных в формат XML (как правило, любой менеджер баз данных имеет опции для экспорта базы данных в форматы csv, xls и xml).

Если ваш sqlite был сгенерирован с помощью синхронизации nokia pc-suite, вы получите xml, например:

<?xml version="1.0" encoding="utf-8"?>
<!--
- sqlite-manager XML Dump
- version 0.7.1
- http://sqlite-manager.googlecode.com
-
- Generation Time: Sun, 08 Jul 2012 14:12:42 GMT
- SQLite version: 3.7.10
-->

<!-- Database: msg_db.sqlite -->
<sm_xml_export version="2.0">
  <database name="msg_db.sqlite">
    <table name="messages">
      <column name="msg_txt" type="3">Your message body</column>
      <column name="msg_address" type="3">+919203487229</column>
      <column name="msg_folder" type="1">1</column>
      <column name="msg_time" type="1">1305483332</column>
      <column name="msg_imei" type="3">355940045825435</column>
      <column name="msg_status" type="1">36</column>
      <column name="msg_uid" type="3">{c33eb602-1456-4542-a755-268dc3728638}</column>
      <column name="msg_address_substr" type="3">4487229</column>
      <column name="msg_subject" type="3"/>
      <column name="msg_attachments" type="3"/>
      <column name="msg_type" type="1">0</column>
      <column name="msg_binary_path" type="3"/>
      <column name="msg_attachment_tns" type="3"/>
      <column name="msg_sent_frompc" type="1">0</column>
    </table>
    <table name="messages">
      <column name="msg_txt" type="3">Hi gopi, how are you? ;)</column>
      <column name="msg_address" type="3">+919582821300</column>
      <column name="msg_folder" type="1">1</column>
      <column name="msg_time" type="1">1305516490</column>
      <column name="msg_imei" type="3">355940045825435</column>
      <column name="msg_status" type="1">36</column>
      <column name="msg_uid" type="3">{15a0d257-2318-4baa-b764-dd14c1aa1fb5}</column>
      <column name="msg_address_substr" type="3">2821300</column>
      <column name="msg_subject" type="3"/>
      <column name="msg_attachments" type="3"/>
      <column name="msg_type" type="1">0</column>
      <column name="msg_binary_path" type="3"/>
      <column name="msg_attachment_tns" type="3"/>
      <column name="msg_sent_frompc" type="1">0</column>
    </table>
  </database>
</smses>

Затем вы можете использовать следующий php-скрипт, чтобы выполнить преобразование для создания сценария формата xml, необходимого для приложения резервного копирования и восстановления SMS .

<?php

$file=fopen("sms-20120708160401.xml", "w");
$xml=simplexml_load_file("messages.xml");
echo $xml->getName()."<br/><br/>";
$begin="<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>\n";
$begin.='<?xml-stylesheet type="text/xsl" href="sms.xsl"?>'."\n";
$begin.='<smses count="">'."\n";
fwrite($file,$begin);
$start='  <sms protocol="0" ';
$finish='/>';
$i=1;
$j=0;

foreach($xml->children()->children() as $table) {
    echo $i++."  ";
    $read=1;
    $msg_status=$table->column[5];
    $msg_folder=$table->column[2];
    if($msg_status=="34") {
        $type=1;
        $read=0;
    }
    else if($msg_status=="36") {
        if($msg_folder=="4294967295") {
            $type=3;
        }
        else {
            $type=1;
        }
    }
    else if($msg_status=="1" || $msg_status=="5") {
        if($msg_folder=="4294967295") {
            $type=3;
        }
        else {
            $type=2;
        }
    }
    else {
        echo "<br/>".$msg_status."; ".$msg_folder."<br/><br/>";
    }
    $body=htmlspecialchars($table->column[0]);
    $body=str_replace("\n", '&#10;', $body);
    $address=$table->column[1];
    if(strlen($address)==11) {
        $address="+91".substr($address,1);
    }
    else if(strlen($address)==10) {
        $address="+91".$address;
    }
    else if($address=="") {
        $i--;
        continue;
    }

    $sms=$start;
    $sms.='address="'.$address.'" ';
    $sms.='date="'.$table->column[3].'000" ';
    $sms.='type="'.$type.'" ';
    $sms.='subject="null" ';
    $sms.='body="'.$body.'" ';
    $sms.='toa="null" ';
    $sms.='sc_toa="null" ';
    $sms.='service_center="null" ';
    $sms.='read="'.$read.'" ';
    $sms.='status="-1" ';
    $sms.='locked="0" ';
    $sms.='date_sent="null" ';
    $sms.=$finish."\n";

    fwrite($file, $sms);
}

$end='</smses>';
fwrite($file, $end);
fclose($file);

?>

Следует отметить один момент:

Вы должны вручную написать countатрибут в smsesтеге. Просто проверьте количество строк в сгенерированном xml-файле и вычтите из него 4 ИЛИ просто напишите последнее эхо-целое число скриптом

Теперь просто отправьте это на свой Android и восстановите с помощью приложения SMS Backup & Restore . Бинго! вы сделали!

Это не так просто, как скопировать базу данных SQLite на новое Android-устройство, так как внутренние структуры будут различаться (даже между версиями Android). В магазине Play есть множество приложений для резервного копирования/восстановления SMS на Android с использованием определенных API -вызовов для извлечения/восстановления сообщений с/на ваше устройство Android. Но к сожалению я не видел ни одного способного конвертировать из других форматов. Поскольку некоторые из них хранят резервную копию SMS в формате XML, вы можете вручную создать такой XML-файл для импорта (хотя я думаю, что это требует больших накладных расходов).

Хорошо. Так есть ли другой способ перенести мои сообщения с нокии на андроид?
Некоторые устройства поставляются с «помощником миграции». Не уверен насчет Ace и не знаю, как он называется в панели приложений... Возможно, вы захотите взглянуть на инструмент SBP Migration, который утверждает, что переносит контакты, смс и закладки с устройств Windows Mobile и Symbian на Android.
в любом случае спасибо. Думаю, мне придется сгенерировать xml из sqlite..