2011-04-05 18 views
5

Quiero bloquear SMS por contentObserver. Para eso, primero quiero obtener el número de teléfono del SMS. ¿Qué debo hacer para obtener el número? Este es el código que tengo, solo contando el número de SMS.Bloquear SMS salientes por contentObserver

package com.SMSObserver4; 
import android.app.Activity; 
import android.database.ContentObserver; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.provider.Contacts; 
import android.provider.Contacts.People.Phones; 

public class SMSObserver4 extends Activity { 
     /** Called when the activity is first created. */ 
    private static final String Address = null; 
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       setReceiver(); 
     } 

     private SmsSentCounter smsSentObserver = new SmsSentCounter(new Handler()); 
     private int sms_sent_counter = 0; 

     private void setReceiver() { 
       this.getContentResolver().registerContentObserver(
           Uri.parse("content://sms"), true, smsSentObserver); 
     } 
     class SmsSentCounter extends ContentObserver { 

       public SmsSentCounter(Handler handler) { 
         super(handler); 
         // TODO Auto-generated constructor stub 
       } 
       @Override 
       public void onChange(boolean selfChange) { 
         // TODO Auto-generated method stub 

        try{ 
        System.out.println ("Calling onChange new"); 
         super.onChange(selfChange); 
         Cursor sms_sent_cursor = SMSObserver4.this.managedQuery(Uri 
             .parse("content://sms"), null, "type=?", 
             new String[] { "2" }, null); 
         if (sms_sent_cursor != null) { 
           if (sms_sent_cursor.moveToFirst()) { 
             sms_sent_counter++; 
             System.out.println("test" + sms_sent_counter); 
           } 
         } 
         Uri phoneUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Address); 
         if (phoneUri != null) { 
          Cursor phoneCursor = getContentResolver().query(phoneUri, new String[] {Phones._ID, Contacts.Phones.PERSON_ID}, null, null, null); 
          if (phoneCursor.moveToFirst()) { 
          long person = phoneCursor.getLong(1); // this is the person ID you need 
          } 
         } 
       }catch(Exception e) 
       {} 
        } 
     } 
} 

Respuesta

6

He hecho muchas pruebas y esto me pareció imposible. Esto se debe a que cuando la aplicación de mensajería inserta un nuevo registro en el proveedor de contenido de SMS, ya está tratando de enviar el SMS. Por lo tanto, incluso si detecta el SMS en el URI content://sms/outbox, será demasiado tarde para detenerlo. De hecho, no hay forma de detenerlo ... todo depende de la aplicación SMS, que no puede interrumpir.

2

No, usted no puede. El observador entrará en vigencia después de que se haya modificado el conjunto de datos, para ese momento los sms ya estarán en camino de ser entregados. De hecho, de ninguna manera puedes bloquear los sms salientes.

Cuestiones relacionadas