Manish Jung Thapa
Manish Jung Thapa

Reputation: 355

how to update inbox after receiving sms from broadcastReceiver? android

I am creating an SMS app, I am stuck in sms receiver, Here is my sms receiver codes

public class SmsReceiver extends BroadcastReceiver {

public static final String SMS_BUNDLE = "pdus";
@Override
public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        String smsMessageStr = "";
        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

            String smsBody = smsMessage.getMessageBody().toString();
            String address = smsMessage.getOriginatingAddress();

            smsMessageStr += "SMS From: " + address + "\n";
            smsMessageStr += smsBody + "\n";
        }
        Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();
        }
    }
}

It works fine making good toast, but it doesnt update inbox, how to update inbox? ( context://inbox)

Upvotes: 0

Views: 771

Answers (2)

Manish Jung Thapa
Manish Jung Thapa

Reputation: 355

finally I solved it, here is how its done, hope it helps someone

adding of contentValues and passing it via context.getContentResolver

public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        ContentResolver contentResolver = context.getContentResolver();
        String smsMessageStr = "";
        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

            String smsBody = smsMessage.getMessageBody().toString();
            String address = smsMessage.getOriginatingAddress();

            smsMessageStr += "SMS From: " + address + "\n";
            smsMessageStr += smsBody + "\n";

            /*creating the content values to pass to inbox*/
            ContentValues values = new ContentValues();
            values.put("address",address);
            values.put("body",smsBody);

            Uri uriSMSURI = Uri.parse("content://sms/inbox");
           //contentResolver.insert(uriSMSURI, values);

            /*push to inbo*/
            context.getContentResolver().insert(uriSMSURI,values);

        }
        Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();
    }
}

Upvotes: 2

Hussnain Azam
Hussnain Azam

Reputation: 358

add a receiver in your inbox Activity

class UpdateInboxBroadcast extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        updateInbox(); // custom implementation for updating inbox adapter
    }

}

then in your receiver send broadcast to your inbox activty

public void sendBroadcast(String message){

    Intent broadCastIntent = new Intent();
    broadCastIntent.putExtra("message", message);
    broadCastIntent.setAction("updateInbox");
    this.sendBroadcast(broadCastIntent);
    stopSelf();
}

public static final String SMS_BUNDLE = "pdus";
@Override
public void onReceive(Context context, Intent intent) {
Bundle intentExtras = intent.getExtras();
if (intentExtras != null) {
    Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
    String smsMessageStr = "";
    for (int i = 0; i < sms.length; ++i) {
        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])    sms[i]);

        String smsBody = smsMessage.getMessageBody().toString();
        String address = smsMessage.getOriginatingAddress();

        smsMessageStr += "SMS From: " + address + "\n";
        smsMessageStr += smsBody + "\n";
    }
    Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();
sendBroadcast(smsMessageStr);
    }
}
}

Upvotes: -1

Related Questions