2011-12-23 13 views
26

Androidアプリケーションで特定のSMSを自動的に削除したいと考えています。それゆえ、私はそれがしたいことを正確に行う方法を持っています。ただし、Eclipseから直接自分の電話機にアプリケーションをデプロイする場合にのみ機能します。その後、着信SMSを削除します。しかし、アプリケーションが市場からダウンロードされた場合は動作しません。しかし、エラーもありません。誰かが私がこれを解決する方法を知っていますか、これはrootedデバイスでのみ動作しますか?Android SMSをプログラムで削除する

public void deleteSMS(Context context, String message, String number) { 
    try { 
     mLogger.logInfo("Deleting SMS from inbox"); 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(uriSms, 
      new String[] { "_id", "thread_id", "address", 
       "person", "date", "body" }, null, null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 

       if (message.equals(body) && address.equals(number)) { 
        mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
         Uri.parse("content://sms/" + id), null, null); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     mLogger.logError("Could not delete SMS from inbox: " + e.getMessage()); 
    } 
} 
+0

[Androidの受信ボックスからSMSをプログラムで削除するにはどうすればいいですか?](http://stackoverflow.com/questions/419184/how-to-delete-an-sms-from-the-inbox-in -android-programmatically) –

+1

@Marclin両方の質問が異なります。この質問では、EclipseがMarkrtの場所からではなくEclipseから直接展開されている場合、SMSは削除されます。 –

+0

@SunilKumarSahoo:あなたは正しいです。コードは完璧に動作しますが、デバイスがPCに接続されている場合にのみ、マーケットからダウンロードされているのではなく、なぜそれを理解しようとしていますか? – Florian

答えて

24

実は、私のポスト内のコードは、100%正しいです。問題はAndroidがそれを受け取ったときにSMSを保存するためにある程度の時間が必要だということでした。したがって、解決策は、ハンドラを追加し、削除要求を1秒または2秒間だけ遅延させることです。

これは実際問題全体を解決しました。

EDIT(マクシム・ドミトリエフのおかげで):

あなたは、Android 4.4のデバイスにSMSメッセージを削除することはできませんことをご検討ください。

また、デフォルトのアプリだけがプロバイダにメッセージデータを書き込むことができるようになりました。他のアプリはいつでも読むことができます。

http://developer.android.com/about/versions/kitkat.html

あなたがしようとした場合も例外はスローされません。何も削除されません。私は2つのエミュレータでそれをテストしました。

How to send SMS messages programmatically

+0

メッセージを送信する方法はありませんし、アンドロイド4.4で受信トレイに表示しないでください? –

+0

@Florianあなたの問題を解決しましたか? – Erum

1
private int deleteMessage(Context context, SmsMessage msg) { 
    Uri deleteUri = Uri.parse("content://sms"); 
    int count = 0; 
    Cursor c = context.getContentResolver().query(deleteUri, null, null, 
      null, null); 
    while (c.moveToNext()) { 
     try { 
      // Delete the SMS 
      String pid = c.getString(0); // Get id; 
      String uri = "content://sms/" + pid; 
      count = context.getContentResolver().delete(Uri.parse(uri), 
        null, null); 
     } catch (Exception e) { 
     } 
    } 
    return count; 
} 

use this code............. 

または

getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); 
+0

私のコードをよく見ていれば、これは私がやっていることとまったく同じです。デバイスがADBを使用してPCに接続されていて、直接展開すると、私のコードは完全に機能します。 – Florian

7

ちょっと体

try { 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(
       uriSms, 
       new String[] { "_id", "thread_id", "address", "person", 
         "date", "body" }, "read=0", null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 
       String date = c.getString(3); 
       Log.e("log>>>", 
         "0--->" + c.getString(0) + "1---->" + c.getString(1) 
           + "2---->" + c.getString(2) + "3--->" 
           + c.getString(3) + "4----->" + c.getString(4) 
           + "5---->" + c.getString(5)); 
       Log.e("log>>>", "date" + c.getString(0)); 

       ContentValues values = new ContentValues(); 
       values.put("read", true); 
       getContentResolver().update(Uri.parse("content://sms/"), 
         values, "_id=" + id, null); 

       if (message.equals(body) && address.equals(number)) { 
        // mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
          Uri.parse("content://sms/" + id), "date=?", 
          new String[] { c.getString(4) }); 
        Log.e("log>>>", "Delete success........."); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     Log.e("log>>>", e.toString()); 
    } 
+0

これは、Stackoverflow.comのベストコードです。あなたのタンク。 –

9

では数 3で日付 2.してSMS 1をカスタマイズ削除するには、このコードを使用しますがSMSを削除することはできませんことをご検討くださいAndroid 4.4搭載デバイスのメッセージ

また、システムは、他のアプリケーションがいつでも読むことができるが、プロバイダに メッセージデータを書き込むために、デフォルトのアプリケーションを可能にします。

http://developer.android.com/about/versions/kitkat.html

あなたがしようとした場合も例外はスローされません。何も削除されません。私は2つのエミュレータでそれをテストしました。

How to send SMS messages programmatically

+0

こんにちは、私はその時間を探していました。ありがとう! –

2

あなたがアプリを選択することができますは、4.4以降では、デフォルトのSMSアプリで、アプリがデフォルトとして設定されている場合、同様にSMSを削除することができます。

2

デフォルトのアプリとしてアプリを作成するsee this

public void deleteSMS(Context context,int position) 
{ 
    Uri deleteUri = Uri.parse("content://sms"); 
    int count = 0; 
    Cursor c = context.getContentResolver().query(deleteUri, null, null, 
      null, null); 
    while (c.moveToNext()) { 
     try { 
      // Delete the SMS 
      String pid = c.getString(0); // Get id; 
      String uri = "content://sms/" + pid; 
      count = context.getContentResolver().delete(Uri.parse(uri), 
        null, null); 
     } catch (Exception e) { 
     } 
    } 
    } 

SMSをすべて削除します(受信トレイ、送信トレイ、下書き)。

+0

単純に 'context.getContentResolver()。delete(deleteUri、null、null);'もすべてのSMSを削除しませんか? –

関連する問題