quarta-feira, 15 de janeiro de 2014

Como excluir novas mensagens SMS no Android

Olá pessoal! Percebí que, assim como eu, muitos tiveram problemas na hora de excluir uma nova mensagem SMS do seu telefone Android através de código. Vou explicar como excluir uma nova mensagem SMS e contar uma curiosidade que ocorreu quando estava tentando excluir tais mensagens. Então, vamos lá! Contextualizando a situação, temos um BroadcastReceiver para o recebimento de SMS. Este broadcast irá iniciar o serviço que irá excluir a nova mensagem, caso esta contenha o texto específico. Criaremos o método ExcluiSMS(String msg) no serviço. A string msg passada por parâmetro é a mensagem a ser localizada. Então, no meu caso, eu só chamo este método Excluir() se for uma mensagem que eu deseja excluir, e utilizo a string para localizar o id da mensagem a ser excluída.
private void ExcluiSMS(String m){
 
}
Utilizaremos um content provider para prover-nos as mensagens SMS.
private void ExcluiSMS(String msg){
try{
    /* Aguarda um tempo para que a nova mensagem SMS
    ** seja armazenada na base de dados do Android 
    ** Tempo de 5 segundos */
    Thread.sleep(5000);
 
    /* Cria o caminho para a caixa de 
    * entrada das mensagens SMS */
    Uri uri = Uri.parse("content://sms/inbox"); 
    ContentResolver contentResolver = getContentResolver();
 
    /* Cria um cursor e preenche-o
    * com as mensagens SMS não lidas */
    Cursor cursor = contentResolver.query(
    uri, null, "read=0", null, null);
 
    if (cursor != null){
        try{
            if (cursor.moveToFirst()){
                do{
                    /* Thread_id irá armazenar o id da
                    * mensagem SMS que iremos excluir */
                    long thread_id = 0;
                    if (cursor.getString(11).equals(msg)){
                        thread_id = cursor.getLong(0);
                        getContentResolver().delete(
                            Uri.parse("content://sms/"+
                            thread_id),
                            null, 
                            null);
                        break;
                    }
                } while (cursor.moveToNext());
            }
        }finally{
            cursor.close();
        }
    }
}catch(Exception e){
}
O que me aconteceu de estranho é que este código não estava localizando a primeira mensagem (no caso a nova mensagem SMS), mas sim as demais (“mensagens antigas”). Para corrigir isso, eu utilizei um delay (Thread.sleep()) de 5 segundos para que dê tempo do Android armazenar a nova mensagem na caixa de entrada.

Nenhum comentário:

Postar um comentário