Android Leia mensagens SMS recentes na linha de comando

18

Recentemente, quebrei a tela do meu Android. (Novamente)

É um T-Mobile G2

Tentar acompanhar minha vida ocupada relacionada à tecnologia já é bastante difícil sem perder meu vínculo com todos.

Enraizei o telefone e a depuração USB já está ativada.

Alguém sabe como eu verificaria meu SMS Messaged recente a partir do shell adb para que eu possa acompanhar o trabalho enquanto economizo para obter um novo telefone ou uma tela de substituição.

Obrigado por qualquer pessoa que tenha alguma informação sobre isso.

EDITAR

Resposta a eldarerathis

C:\android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
sqlite3: permission denied
$

não posso chmod o arquivo. você sabe realmente onde fica?

$ chmod +x sqlite3
chmod +x sqlite3
Bad mode
$

su me deixa com apenas comandos básicos

$ su
su
# cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
sqlite3: not found
#

Corrigido

sqlite não foi instalado

C:\android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>

Também para acessar o banco de dados, eu precisava ser root.

C:\android-sdk\platform-tools>adb shell
$ su
# cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite>

Muito obrigado eldarerathis

Este link ajudou

The Lazy Coder
fonte
Parece que você não tem o sqlite3binário no seu dispositivo. O primeiro link na minha resposta tem instruções para ajudá-lo a instalá-lo /system/bin. Aqui está um link para o próprio binário.
Eldarerathis 18/07

Respostas:

10

Isso é realmente feio, mas você pode lê-los na linha de comando usando sqlite3para visualizar as entradas do banco de dados. Você provavelmente precisará desenterrar um binário para isso, a menos que tenha uma ROM personalizada instalada. Existem algumas instruções para instalar o referido binário nesta questão do Stack Overflow , e o SuperOneClick vem com ele (uma cópia do próprio binário pode ser encontrada aqui ).

Se você precisar instalar o binário, use mount(sem parâmetros) para determinar onde sua /systempartição está fisicamente localizada (a minha é /dev/block/mtdblock3, por exemplo). Siga as instruções no primeiro link acima e comece remontando-o no modo de leitura / gravação com o comando:

mount -o rw,remount /your/system/partition /system

Depois sqlite3de abrir adb shell, deseje abrir um , alterne para o root sue faça o seguinte:

# cd /data/data
cd /data/data
# cd com.android.providers.telephony/databases ***
cd com.android.providers.telephony/databases
# sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT * FROM sms WHERE read=0;

Isso exibirá todas as linhas da tabela para todas as mensagens não lidas. As colunas na tabela são definidas assim (para que você possa aparar SELECT):

CREATE TABLE sms (_id INTEGER PRIMARY KEY,thread_id INTEGER,address TEXT,
  person INTEGER,date INTEGER,protocol INTEGER,read INTEGER DEFAULT 0,
  status INTEGER DEFAULT -1,type INTEGER,reply_path_present INTEGER,
  subject TEXT,body TEXT,service_center TEXT,locked INTEGER DEFAULT 0,
  error_code INTEGER DEFAULT 0,seen INTEGER DEFAULT 0);

*** Nota para a linha marcada: isso pode ser um pouco diferente dependendo do seu dispositivo e da versão do Android, motivo pelo qual incluí este cdcomando separadamente. Eu acho que costumava ser com.android.providers/telephony/databasesem dispositivos mais antigos, mas eu não me lembro muito bem. Use lspara procurar o caminho adequado aqui.


Como alternativa, você pode tentar copiar o arquivo .db no seu cartão SD (ou puxá-lo com adb pull) e depois lê-lo no seu computador com o sqlite.

eldarerathis
fonte
Eu tentei isso e parece que sqlite3 tem permissão negada
ele diz modo ruim
@ Jason: Você precisa ser root para ler esse diretório (basta executar suantes).
Eldarerathis 18/07
@ Jason: Hm, use chmod 0755 sqlite3, então. Talvez o chmodbinário de ações não goste do +xparâmetro.
Eldarerathis 18/07
assim que eu executar su. ele age como não existem comandos
3

Graças à bela dica acima de eldarerathis, eu apenas faço

DB=/data/data/com.android.providers.telephony/databases/mmssms.db
echo 'select address,body from sms;' | ./sqlite3 -csv $DB 

para ler meus SMSs no prompt raiz.

Como eu não tinha o sqlite3, primeiro tive que fazer o download com

curl http://dl.dropbox.com/u/16958605/sqlite3
chmod a+x sqlite3

Ou consulte o instalador do SQLite3 no Google Play (se você não confia na fonte da caixa de depósito).

user23548
fonte
11
Um URL dl.dropbox.com para esse binário não parece seguro. Você pode fornecer uma fonte oficial?
Pzkpfw 26/10/12
1

Caso você esteja interessado em mais detalhes do que apenas remetente e mensagem (como nesta resposta ), acabei de encontrar um bom artigo sobre o tópico: Leia SMS diretamente do banco de dados Sqlite no Android . Veja também: A estrutura de dados da mensagem .

Melhor ainda, dê uma olhada no Github: ANDROID-SMS é uma ferramenta escrita em Python que recupera todas as mensagens SMS e as organiza em conversas por SMS com estatísticas fornecidas. Ele também recupera todas as mensagens MMS e as organiza em Conversas MMS, com os respectivos arquivos. Eu ainda não tentei (ainda) há alguns minutos, mas parece bem legal.

Obviamente, este programa não funciona diretamente no dispositivo Android - mas no seu computador (onde requer Python 2.7 com SQLite3 para Python). Portanto, você precisará primeiro extrair o banco de dados do dispositivo. Todas as etapas necessárias estão descritas na página principal do Github do projeto.

Izzy
fonte
0

Outra solução que inventei utiliza um aplicativo no telefone que reage ao SMS e o salva em um arquivo que você pode ler com o ADB.

  • Instale qualquer aplicativo do tipo Tasker, eu fiz com o E-Robot
  • Criar novo comando
  • Adicionar Evento Contact=>SMS
  • Adicionar ação Memory=>Write file, lá você pode salvar o SMS em um novo arquivo sempre ou no mesmo com separador. De qualquer forma, salve-o em / sdcard ou em qualquer caminho acessível via ADB.
  • Monitore esse caminho com o ADB e leia o conteúdo do SMS.
Fr0sT
fonte