领导的一台双卡双待的Samsung Grand DUOS(i9082)联通合约手机前一阵子突然坏了,按开机键之后,显示Woo和三星商标,喊一句“欢迎进入Woo的世界”,就开始在Woo动画和三星动画之间循环,系统无法进入了!
手机没花钱,是充话费送的,但是里面的通讯录没有备份!将近两千个号码啊……虽然换了个小米继续顶着,但是领导一直就这个通讯录问题碎碎念……
于是昨天下定决心给她解决这个问题。
首先是确定一个原则,就是没有拿出数据之前,都不能刷机或者重置手机到初始状态,因为那都会把已有数据覆盖掉。
我先尝试用数据线连接手机和Windows,在手机启动后,Windows上安装的腾讯应用宝识别出有安卓设备连接了。这是一个好消息!但是应用宝无法完成手机型号的识别和最终的连接,也就无法导出通讯录。
因为应用宝推荐了一个刷机精灵,抱着试试看的心态,安装了它,然后它也能连接手机,但无法识别型号,在手工选择型号后,也无法导出通讯录等数据。不过这个软件自带了ADB工具(用于通过命令行操作安卓系统),它也能很方便的将手机启动到Recover模式。当然我认为自己装一个ADB应该也可以。
那么就启动ADB命令行窗口,经过一系列的google和试验,通过下面的步骤可以将通讯录、短信和通话记录导出,当然你也可以用类似的步骤导出其它你想要的文件。
1. 拷贝通讯录、短信和通话记录数据库文件到存储卡
ADB pull命令可以把安卓系统里的文件下载到本地,但是对于系统文件,直接下载会报无权限错误(Permission Denied),那么我们需要先将系统文件拷贝到sdcard上,然后再下载。但由于安卓系统里把拷贝(cp)命令阉割了,所以必须用其它办法拷贝。有人说可以通过安装busybox来获得cp命令,但是经过测试,在三星这台机上是安装不上的。以下是ADB命令行过程,我们使用cat和重定向来实现拷贝:
> adb shell shell@android:/ $ su shell@android:/ # cd /data/data/com.android.providers.telephony/databases shell@android:/data/data/com.android.providers.telephony/databases/ # cat mmssms.db > /sdcard/mmssms.db shell@android:/data/data/com.android.providers.telephony/databases/ # cat telephony.db > /sdcard/telephony.db shell@android:/data/data/com.android.providers.telephony/databases/ # cd /data/data/com.android.providers.contacts/databases shell@android:/data/data/com.android.providers.contacts/databases/ # cat contacts2.db > /sdcard/contacts2.db shell@android:/data/data/com.android.providers.contacts/databases/ # exit shell@android:/ $ exit
2. 拷贝通讯录、短信和通话记录数据库文件到本地
> adb pull /sdcard/mmssms.db 2191 KB/s (163840 bytes in 0.073s) > adb pull /sdcard/telephony.db 1798 KB/s (168930 bytes in 0.092s) > adb pull /sdcard/contacts2.db 1809 KB/s (699790 bytes in 0.377s)
这样几个数据库文件就都备份出来了。可以用sqlite3命令行(请自行下载)或用Firefox的SQLite Manager来查看一下
> sqlite3 contacts2.db SQLite version 3.7.13 2012-07-17 17:46:21 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables _sync_state status_updates _sync_state_metadata stream_item_photos accounts stream_items agg_exceptions v1_settings android_metadata view_contacts calls view_contacts_restricted contacts view_data data view_data_restricted data_usage_stat view_data_usage_stat default_directory view_dialer_keypad_lookup dialer_keypad_lookup view_entities directories view_entities_restricted emergency view_groups groups view_raw_contacts mimetypes view_raw_contacts_restricted name_lookup view_raw_entities nickname_lookup view_raw_entities_restricted packages view_stream_items phone_lookup view_stream_items_restricted photo_files view_v1_contact_methods properties view_v1_extensions raw_contacts view_v1_group_membership search_index view_v1_groups search_index_content view_v1_organizations search_index_docsize view_v1_people search_index_segdir view_v1_phones search_index_segments view_v1_photos search_index_stat visible_contacts settings voicemail_status speed_dial sqlite> select * from contacts; ...................(内容略去)
3. 进入Recover模式并重置手机到出厂状态
可以用前面提到的刷机精灵,也可以先关机,然后同时按住音量上键、Home键和开关机键,这样都能进入Recover模式。
先后用音量键选择wipe data/factory和wipe cache,按开关机键确认,这样就擦除了所有数据并重置成出厂状态。
然后重启手机。
4. 导入备份的通讯录、短信和通话记录数据库文件到手机
将重置完成的手机开机后连上数据线到Windows,打开ADB命令行窗口,进入备份目录,然后使用ADB push命令将备份文件传送到sdcard上(此时sdcard已被重置,原来房子上面的数据都不再存在)
> adb push mmssms.db /sdcard/ > adb push telephony.db /sdcard/ > adb push contacts2.db /sdcard/ > adb shell shell@android:/ $ su shell@android:/ # cd /data/data/com.android.providers.telephony/databases shell@android:/data/data/com.android.providers.telephony/databases/ # mv mmssms.db mmssms.db.orig shell@android:/data/data/com.android.providers.telephony/databases/ # mv telephony.db telephony.db.orig shell@android:/data/data/com.android.providers.telephony/databases/ # rm *.db-shm *.db-wal shell@android:/data/data/com.android.providers.telephony/databases/ # cat /sdcard/mmssms.db > mmssms.db shell@android:/data/data/com.android.providers.telephony/databases/ # cat /sdcard/telephony.db > telephony.db shell@android:/data/data/com.android.providers.telephony/databases/ # cd /data/data/com.android.providers.contacts/databases shell@android:/data/data/com.android.providers.contacts/databases/ # mv contacts2.db contacts2.db.orig shell@android:/data/data/com.android.providers.contacts/databases/ # rm *.db-shm *.db-wal shell@android:/data/data/com.android.providers.contacts/databases/ # cat /sdcard/contacts2.db > contacts2.db shell@android:/data/data/com.android.providers.contacts/databases/ # exit shell@android:/ $ exit
上面同样是用cat加重定向实现了cp功能,删除了原来的.db-shm文件和.db-wal文件,这两个文件在sqlite3访问数据库时会自动生成。
再重启一遍手机,打开通讯录,是不是都回来了?:)
更多推荐
无法进入系统的三星Android手机恢复联系人、短信数据并重置手机的过程
发布评论