Я хочу автоматически удалять некоторые 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());
}
}
На самом деле, код в моем сообщении на 100% корректен. Проблема заключалась в том, что Android требуется некоторое время для хранения SMS после его получения. Поэтому решение состоит в том, чтобы просто добавить обработчик и задержать запрос на удаление на 1 или 2 секунды.
Это действительно решило проблему.
EDIT (спасибо Максиму Дмитриеву):
Следует учитывать, что на устройствах с Android 4.4 удаление SMS-сообщений невозможно.
Кроме того, теперь система позволяет записывать данные о сообщениях провайдеру только приложению по умолчанию, хотя другие приложения могут читать их в любое время.
http://developer.android.com/about/versions/kitkat.html
При попытке не будет выброшено исключение, ничего не будет удалено. Я только что протестировал это на двух эмуляторах.
Пожалуйста, считайте, что вы можете'т удалить SMS-сообщений на устройствах с Android 4.4.
кроме того, система теперь позволяет только приложения по умолчанию для записи данных сообщение к провайдеру, хотя другие приложения могут читать в любое время.
http://developer.android.com/about/versions/kitkat.html
Никакое исключение не будет выдано, если вы попробуете, ничего не будут удалены. Я просто проверял на двух эмуляторах.
используйте этот код для удаления пользовательских смс
По дате
По номеру
По телу
try { Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = context.getContentResolver().query( uriSms, new String[] { "_id", "thread_id", "address", "person", "дата", "тело" }, "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("Удаление SMS с 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.
чтобы сделать приложение в качестве приложения по умолчанию см. Это. Проверить, если ваше приложение по умолчанию 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
}
}
это удалить все(входящие,исходящие,черновики) в СМС.
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);
если вы хотите получить сообщение и приложение SMS вашего телефона Android устройство не'т отправить любое использование бинарных уведомления (Сведения) СМС. смотрите по этой ссылке http://codetheory.in/android-sms/