terça-feira, 8 de maio de 2012

Android: SMS Content Provider

Olá povo,

Para utilizar o ContentProvider da aplicação de mensagens, você deve adicionar as permissões no AndroidManifest.xml, para ler e escrever/excluir SMS:

<uses-permission 
android:name="android.permission.READ_SMS"/>
<uses-permission
android:name="android.permission.WRITE_SMS"/>
Depois é só acessar o ContentProvider:
/* Essa URI traz as informações das mensagens, 
mas sem o corpo da mensagem.*/
Uri uriSms = Uri.parse("content://sms/inbox");

/* Já essa URI traz as informações 
de uma mensagem específica.*/ Uri uriSms = Uri.parse("content://sms/1");
Depois é só abrir um cursor com a URI desejada
Cursor c = getContentResolver().query(
  uriSms, null,null,null,null);
O código abaixo, lista todos os dados de todas as colunas do cursor, aí é só observar chave/valor.
int columns = c.getColumnCount();
while (c.moveToNext()){
  for (int i = 0; i < columns; i++) {
    System.out.println(
      c.getColumnName(i) +"="+ 
      c.getString(i));
  }
  System.out.println("--");
}
Para apagar uma mensagem, é só usar o código abaixo:
getContentResolver().delete(
  Uri.parse("content://sms/1"), null, null);

getContentResolver().delete(
  Uri.parse("content://sms/inbox"), 
  "address=88998899", null);
4br4ç05,
nglauber

Um comentário:

Unknown disse...

Eu estava testando o código aqui citado
getContentResolver().delete(
Uri.parse("content://sms/inbox"),
"address=88998899", null);
Sei que o ContentResolver retorna com uma conexão com o banco de dados do celular

Mas em meus testes tive alguns problemas quanto ao código aqui citado, um deles foi que eu não conseguir filtrar usando o segundo parâmetro do "delete" nem o do "query" por motivos estranho.

Não sei o que causou tal erro pois eu seguir exatamente o que esta posto

O erro que apresentava era que a query executada estava errado

Obs: estou usando API 10 com pacote do google