I am trying to delete the SMS inside my emulator. But after trying all examples here, it still doesn't work.
I dont even get an error.
Inside my activity I create a BroadcastReceiver
, which reacts to incoming SMS.
Then when the processing is done, the SMS should be deleted.
But I am not able to delete any message, even if I try to delete them all.
But I can read the content.
Maybe someone has an idea? Here's my code so far:
@Override
public void onResume() {
super.onResume();
//registerReceiver(mMessageReceiver, new IntentFilter(Constants.BROADCAST_SMS));
// IntentFilter customIntentFiler = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//customIntentFiler.setPriority(1000);
registerReceiver(mMessageReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
// registerReceiver(mMessageReceiver, customIntentFiler);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mMessageReceiver);
}
//This is the handler that will manage to process the broadcast intent
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Extract data included in the Intent
Bundle bundle = intent.getExtras();
if (bundle != null) {
Log.d("[" + Constants.SERVICE_SMS + "] " + "SMS received");
Object[] pdus = (Object[])bundle.get("pdus");
SmsMessage sms = SmsMessage.createFromPdu((byte[])pdus[0]);
//check if SMS content
Log.d("[" + Constants.SERVICE_SMS + "] " + "SMS data:" + sms.getMessageBody().toString());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String[] smsParts = sms.getMessageBody().toString().split(";");
//ToDo filter logic
}
}
};
private void DeleteSMS(Context context, Intent intent){
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);
Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS" + uriSms);
//getContentResolver().delete(Uri.parse("content://sms/1"), 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);
Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS ID"+ id);
Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS threadID" + threadId);
Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS address" + address);
Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS body" + body);
getContentResolver().delete(Uri.parse("content://sms/inbox/" + id), null, null);
//getContentResolver().delete(Uri.parse("content://sms/inbox/" + threadId), null, null);
} while (c.moveToNext());
}
} catch (Exception e) {
// mLogger.logError("Could not delete SMS from inbox: " +
// e.getMessage());
Log.d(Constants.TAG, "[" + Constants.SERVICE_SMS + "] " + "Deleting SMS failed");
}
}
The start of my Manifest looks like this:
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
If you are trying this application after kitkat it won't work.
http://android-developers.blogspot.com.tr/2013/10/getting-your-sms-apps-ready-for-kitkat.html?m=1
See sms blockers in play store, they will inform you the same thing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With