testReadSms.java
public class testReadSms extends BodyFragment{
private SmsBroadcastReceiver receiver = new SmsBroadcastReceiver(new SmsBroadcastReceiver.UpdateSmsEvent() {
@Override
public void updateSms(String sms) {
newMsg.setText(sms);
}
});
private ArrayList smsMessagesList = new ArrayList();
private ListView smsListView;
private ArrayAdapter arrayAdapter;
private TextView newMsg;
@Override
public void onStart() {
super.onStart();
//regist sms receiver
Log. e("registerReceiver", "registerReceiver");
receiver.registerSmsReceiver(activity);
}
@Override
protected View fragmentLayout(LayoutInflater inflater, ViewGroup container) {
return inflater.inflate(R.layout.test_body_sms, container, false);
}
@Override
protected void setupComponents(View fragmentView) {
newMsg = (TextView) fragmentView.findViewById(R.id. new_msg);
smsListView = (ListView) fragmentView.findViewById(R.id. SMSList);
arrayAdapter = new ArrayAdapter( activity, android.R.layout.simple_list_item_1 , smsMessagesList);
smsListView.setAdapter(arrayAdapter);
smsListView.setOnItemClickListener( this);
refreshSmsInbox();
}
@Override
public void onDestroy() {
super.onDestroy();
//activity.unregisterReceiver(receiver);
}
public void refreshSmsInbox() {
ContentResolver contentResolver = activity.getContentResolver();
Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null , null, null);
int indexBody = smsInboxCursor.getColumnIndex( "body");
int indexAddress = smsInboxCursor.getColumnIndex( "address");
if (indexBody < 0 || !smsInboxCursor.moveToFirst()) return;
arrayAdapter.clear();
do {
String str = "SMS From: " + smsInboxCursor.getString(indexAddress) +
"\n" + smsInboxCursor.getString(indexBody) + "\n";
arrayAdapter.add(str);
} while (smsInboxCursor.moveToNext());
}
public void updateList(final String smsMessage) {
arrayAdapter.insert(smsMessage, 0);
arrayAdapter.notifyDataSetChanged();
}
public void updateNewMsg(final String msg) {
newMsg.setText(msg);
}
}
SmsBroadcastReceiver.java
public class SmsBroadcastReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";
public Activity activity;
public UpdateSmsEvent updateSmsEvent;
public interface UpdateSmsEvent{
void updateSms(String sms);
}
public SmsBroadcastReceiver(UpdateSmsEvent inte){
updateSmsEvent = inte;
}
public void onReceive(Context context, Intent intent) {
Bundle intentExtras = intent.getExtras();
if (intentExtras != null) {
Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
String smsMessageStr = "";
String smsMessageBody= "";
for (int i = 0; i < sms. length; ++i) {
SmsMessage smsMessage = SmsMessage. createFromPdu((byte[]) sms[i]);
String smsBody = smsMessage.getMessageBody().toString();
String address = smsMessage.getOriginatingAddress();
//smsMessage.getTimestampMillis() is current time
smsMessageStr += "SMS From: " + address + "\n" ;
smsMessageStr += smsBody + "\n" ;
smsMessageBody = smsMessage.getMessageBody().toString();
}
Toast.makeText (context, smsMessageBody, Toast.LENGTH_SHORT).show();
smsMessageBody = smsMessageBody.replaceAll("\\D+","" );
//this will update the UI with message
updateSmsEvent.updateSms(smsMessageBody);
activity.unregisterReceiver(this);
}
}
public void registerSmsReceiver(Activity activity){
this.activity = activity;
IntentFilter filter = new IntentFilter();
filter.setPriority(999 );
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
activity.registerReceiver(this, filter);
}
}
main ref:
ref: