0

onReceive メソッドでキャプチャした同じメッセージを削除する方法を教えてください。実際、onReceiveメソッドでメッセージを受信したときに、最初にオフにして使用した後に削除することを望みますが、どうすればよいかわからないので、助けてください。私が使用しているコードも、このスレッドでタグ付けします。

  @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();
    }
    }
4

2 に答える 2

0

このメソッドを試して、何が起こるか教えてください。メッセージの送信元のコンテキストと番号を渡すだけです。

ノート:-

これは、特定の番号の完全なスレッドを削除するために使用されます

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();
    }

また、Thread の遅延の後にこのメソッドを呼び出します。

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(2000);
            removeMessage(mContext, "From_number");
        } catch (InterruptedException e) {
            e.printStackTrace();
             }
于 2012-04-12T07:43:28.810 に答える