web-dev-qa-db-ja.com

Android SMSプログラムで削除

私は特定のSMSを自動的にAndroidアプリケーションで削除します。したがって、私がやりたいことを正確に行うメソッドがあります。アプリケーションをEclipseから携帯電話に直接デプロイすると機能しますが、着信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());
    }
}
31
Florian

実際、私の投稿のコードは100%正しいです。問題は、Androidの受信時にSMSを保存するのに時間がかかることでした。そのため、解決策は、ハンドラーを追加して、削除要求を1〜2秒遅らせることです。

これで実際に問題全体が解決しました。

編集(Maksim Dmitrievに感謝):

SMS 4.4を搭載したデバイスでは、Androidメッセージを削除できないことを考慮してください。

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

http://developer.Android.com/about/versions/KitKat.html

試みても例外はスローされません。何も削除されません。 2つのエミュレータでテストしました。

プログラムでSMSメッセージを送信する方法

28
Florian

あなたができない削除SMS Android 4.4。

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

http://developer.Android.com/about/versions/KitKat.html

試みても例外はスローされません。何も削除されません。 2つのエミュレータでテストしました。

送信方法SMSプログラムによるメッセージ

14
Maksim Dmitriev

このコードを使用して、カスタマイズSMSを削除します1.日付2.番号3.本体

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

どのアプリがデフォルトのSMS 4.4+のアプリであるかを選択できます。アプリがデフォルトとして設定されている場合は、SMSも削除できます。

4

デフォルトのアプリとしてアプリを作成するには こちらを参照 。削除する前に、アプリがデフォルトのSMSアプリかどうかを確認してください。ハードコーディングの代わりに、テレフォニークラスによって提供されるURIを使用します。

public void deleteSMS(Context context,int position)
{
    Uri deleteUri = Uri.parse(Telephony.Sms.CONTENT_URI);
    int count = 0;
    Cursor c = context.getContentResolver().query(deleteUri, new String[]{BaseColumns._ID}, null,
            null, null); // only query _ID and not everything
        try {
              while (c.moveToNext()) {
                // Delete the SMS
                String pid = c.getString(Telephony.Sms._ID); // Get _id;
                String uri = Telephony.Sms.CONTENT_URI.buildUpon().appendPath(pid)
                count = context.getContentResolver().delete(uri,
                    null, null);
              }
        } catch (Exception e) {
        }finally{
          if(c!=null) c.close() // don't forget to close the cursor
        }

   }

sMSをすべて削除します(inbox、outbox、draft)。

2
Kishor N R
private int deleteMessage(Context context, SmsMessage msg) {
    Uri deleteUri = Uri.parse("content://sms");
    int count = 0;
            @SuppressLint("Recycle") 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;
}

このコードを使用してください.............

または

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

メッセージとSMSアプリを取得したい場合は、Androidデバイスの携帯電話は通知を送信しませんでした。バイナリ(データ)SMSを使用します。このリンクを参照してください http://codetheory.in/Android-sms /

0
Mahdi Azadbar