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 ArrayListsmsMessagesList = 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:
沒有留言:
張貼留言