2012-04-12 10 views
0

erfasst wurde Bitte sagen Sie mir, dass, wie ich die gleiche Nachricht löschen kann, die ich auf der OnReceive-Methode erfasst wurde. Ich wünsche mir, dass wenn eine Massage auf onReceive-Methode empfangen wird, es zuerst aus und nach Gebrauch gelöscht wird, aber wie ich nicht weiß, also bitte helfen Sie mir im Fall. Code, den ich benutze auch mit diesem Thread tag.So löschen Sie die gleiche SMS, die auf onReceive Methode

@Override 
    public void onReceive(Context context,final Intent intents){ 
    if (intents.getAction().equals(ConstantClass.SMS_RECEIVED)) { 
    new Thread(){ 
    Context context; 
    Thread Set(Context ctx){ 
    this.context=ctx; 
    return this; 
    } 
    public void run(){ 
    try{ 
    Bundle bundle = intents.getExtras();    
    if (bundle != null) { 
    Object[] pdus = (Object[]) bundle.get("pdus"); 
    SmsMessage[] messages = new SmsMessage[pdus.length]; 
    for (int i = 0; i < pdus.length; i++) 
    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
    String msg=null; 
    String address = null; 
    for (SmsMessage message : messages) { 
    msg = message.getMessageBody(); 
    address = message.getOriginatingAddress(); 
    } 
    dba.Open(); 
    int id = dba.getCordiId(address); 
    int count = dba.getDeviceCount(ConstantClass.dbName[1]); 
    if(count<=0){ 
    dba.InsertCurrentCoord(id,id); 
    }else{ 
    Strsql = new String("UPDATE " + ConstantClass.dbName[1] + " SET " + DataBaseAdapter.Key_ReceiverCoord + " = " + 
    Integer.toString(id) + " WHERE " + DataBaseAdapter.Key_ID + " = ?"); 
    dba.UpdateQuery(Strsql, Integer.toString(id)); 
    } 
    dba.Close(); 
    ////////////sending to SMSSync class////////////// 
    MainThread th = new MainThread(sync,msg); 
    try{ 
    th.thread.join(); 
    }catch(Exception e){ 
    Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
    if(msg.substring(3, 4).equals("2")) 
    ConstantClass.isAuditrequestSend = true; 
    } 
    /*******after receiving the sms opening the Main Screen.*****************/ 
    Intent intent = new Intent(context,ZigbeeActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 
    abortBroadcast(); 
    /************Now deleting the SMS from the Inbox*********************/ 
    Uri uriSms = Uri.parse("content://sms"); 
    Cursor c = context.getContentResolver().query(uriSms, null,null,null,null); 
    int trId= c.getInt(0); 
    int thread_id =c.getInt(1); 
    context.getContentResolver().delete(Uri.parse("content://sms/conversations/" + thread_id),null,null); 
    }catch(Exception e){ 
    dlg = new ExceptionDialog(context,"On Sms Receiver",e.getMessage()); 
    dlg.show(); 
    } 
    } 
    }.Set(context).start(); 
    } 
    } 
+0

Paste Code mit gut Vertiefung löschen komplette Gewinde für eine bestimmte Anzahl verwendet. Ich habe versucht, es zu formatieren, aber nicht Einzug. –

+0

Warum Sie zuerst die SMS speichern und dann löschen können Sie direkt einschränken, bevor Sie in Ihrem onreciev speichern – vipin

Antwort

0

versuchen, diese Methode und lassen Sie mich wissen, was passiert, geben Sie einfach den Kontext und die Anzahl von wo aus die Nachricht kam, hat

Hinweis: -

Diese

private void removeMessage(Context context, String fromAddress) { 

     Uri uriSMS = Uri.parse("content://sms/inbox"); 
     Cursor cursor = context.getContentResolver() 
             .query(uriSMS, null, null, null, null); 
     cursor.moveToFirst(); 
     if(cursor.getCount() > 0){ 
      int ThreadId = cursor.getInt(1); 
      Log.d("Thread Id", ThreadId+" id - "+cursor.getInt(0)); 
      Log.d("contact number", cursor.getString(2)); 
      Log.d("column name", cursor.getColumnName(2)); 

      context.getContentResolver().delete(Uri. 
        parse("content://sms/conversations/"+ThreadId), "address=?", 
                new String[]{fromAddress}); 
      Log.d("Message Thread Deleted", fromAddress); 
     } 
     cursor.close(); 
    } 

Auch rufen Sie diese Methode nach einer Verzögerung von Themen wie,

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      Thread.sleep(2000); 
      removeMessage(mContext, "From_number"); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
      } 
0

kann möglich sein, Sie vor dem Erreichen in Inbox eine SMS zu löschen versuchen, oder vor dem in der Datenbank-Tabelle eingefügt werden, um ein ContetObserver für registrieren content://sms beobachten und wenn SMS im Posteingang erreicht dann it.see Beispiel löschen here

Verwandte Themen