web-dev-qa-db-fra.com

Suppression de Android SMS par programmation

Je veux supprimer certains certains SMS automatiquement dans mon Android. Par conséquent, j'ai une méthode qui fait exactement ce que je veux qu'elle fasse. Cependant, elle ne fonctionne si je déploie l'application directement sur mon téléphone depuis Eclipse. Ensuite, il supprime les SMS entrants. Cependant, cela ne fonctionne pas si l'application est téléchargée sur le marché. Mais il n'y a pas non plus d'erreur. Est-ce que quelqu'un sait comment je peux résoudre ce problème ou cela ne fonctionne-t-il que sur les appareils rootés?

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

En fait, le code dans mon message est correct à 100%. Le problème était que Android a besoin de temps pour stocker le SMS lors de sa réception. La solution consiste donc simplement à ajouter un gestionnaire et à retarder la demande de suppression de 1 ou 2 secondes.

Cela a en fait résolu tout le problème.

EDIT (merci à Maksim Dmitriev):

Veuillez noter que vous ne pouvez pas supprimer SMS messages sur les appareils avec Android 4.4.

En outre, le système autorise désormais uniquement l'application par défaut à écrire des données de message au fournisseur, bien que d'autres applications puissent lire à tout moment.

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

Aucune exception ne sera levée si vous essayez; rien ne sera supprimé. Je viens de le tester sur deux émulateurs.

Comment envoyer des messages SMS par programme

28
Florian

Veuillez considérer que vous ne pouvez pas supprimer SMS messages sur les appareils avec Android 4.4.

En outre, le système autorise désormais uniquement l'application par défaut à écrire des données de message au fournisseur, bien que d'autres applications puissent lire à tout moment.

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

Aucune exception ne sera levée si vous essayez; rien ne sera supprimé. Je viens de le tester sur deux émulateurs.

Comment envoyer des messages SMS par programme

14
Maksim Dmitriev

hey utilisez ce code pour supprimer les sms personnalisés 1. Par date 2. Par numéro 3. Par corps

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

Vous pouvez choisir quelle application est l'application par défaut SMS dans la version 4.4+ et si votre application est définie comme application par défaut, elle pourra également supprimer SMS).

4
Sites-For-Less.com

faire de l'application comme application par défaut voir ceci . Vérifiez si votre application est l'application sms par défaut avant de la supprimer. Utilisez l'URI fourni par la classe de téléphonie au lieu du codage en dur.

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
        }

   }

il supprime tout (boîte de réception, boîte d'envoi, brouillon) du SMS.

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

utilisez ce code .............

ou

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

si vous voulez recevoir un message et votre application sms, votre Android appareil n'a envoyé aucune notification, utilisez des SMS binaires (données). voir ce lien http://codetheory.in/Android-sms /

0
Mahdi Azadbar