Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.a100585.assignmentsection2;
- import android.content.BroadcastReceiver;
- import android.content.ContentResolver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteException;
- import android.net.Uri;
- import android.provider.ContactsContract;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.telephony.SmsManager;
- import android.telephony.SmsMessage;
- import android.util.Log;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ListAdapter;
- import android.widget.ListView;
- import android.widget.Toast;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.List;
- public class SmsActivity extends AppCompatActivity {
- final String SMS_URI_INBOX = "content://sms/inbox";
- final String SMS_URI_SENT = "content://sms/sent";
- ArrayList<String> sms_num = new ArrayList<>();
- List<Message> sentMessages = new ArrayList<>();
- List<Message> receivedMessages = new ArrayList<>();
- List<Message> messageList = new ArrayList<>();
- String sendTextBody;
- String phoneNumber;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_sms);
- //Retrieve the selected Contact's information
- Contact selectedContact = (Contact) getIntent().getSerializableExtra("CONTACT");
- String contactName = selectedContact.getName();
- phoneNumber = selectedContact.getNumber();
- refreshList();
- //Send SMS button handler
- Button btnSend = (Button) findViewById(R.id.btnSend);
- btnSend.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- EditText txtSendText = (EditText) findViewById(R.id.textSendText);
- sendTextBody = txtSendText.getText().toString();
- sendSms(phoneNumber, sendTextBody);
- }
- });
- //SMS received
- //SMSReceiver smsReceiver = new SMSReceiver();
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
- registerReceiver(receiver, intentFilter);
- }
- public void refreshList() {
- receivedMessages.clear();
- sentMessages.clear();
- messageList.clear();
- //Get the list of SMS
- getSentSMS(phoneNumber);
- getReceivedSMS(phoneNumber);
- //Compile the sent and received into one list
- messageList.addAll(receivedMessages);
- messageList.addAll(sentMessages);
- //Sort them by date
- Collections.sort(messageList, new Comparator<Message>() {
- @Override
- public int compare(Message message, Message t1) {
- return message.getDate().compareToIgnoreCase(t1.getDate());
- }
- });
- //Display the list in a list view
- setSMSList(messageList);
- }
- //Send SMS
- private void sendSms(String number, String body) {
- SmsManager smsManager = SmsManager.getDefault();
- smsManager.sendTextMessage(number, null, body, null, null);
- refreshList();
- }
- //Get list of SMS sent
- private void getSentSMS(String phoneNumber) {
- try {
- Uri messageUri = Uri.parse(SMS_URI_SENT);
- ContentResolver cr = this.getContentResolver();
- Cursor cur = cr.query(messageUri, new String[]{"_id", "address", "date", "body", "read"}, "address='" + phoneNumber + "'", null, "date desc");
- if (cur.moveToFirst()) {
- do {
- if (cur.getString(cur.getColumnIndexOrThrow("address")) == null) {
- cur.moveToNext();
- continue;
- }
- String number = cur.getString(cur.getColumnIndexOrThrow("address")).toString();
- String id = cur.getString(cur.getColumnIndexOrThrow("_id")).toString();
- String date = cur.getString(cur.getColumnIndexOrThrow("date")).toString();
- String body = cur.getString(cur.getColumnIndexOrThrow("body")).toString();
- sentMessages.add(new Message(body, date, number, id));
- } while (cur.moveToNext());
- }
- cur.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //get list of SMS received
- private void getReceivedSMS(String phoneNumber) {
- Uri mSmsinboxQueryUri = Uri.parse(SMS_URI_INBOX);
- Cursor cur = getContentResolver().query(mSmsinboxQueryUri, new String[]{"_id", "thread_id", "address", "person", "date", "body", "type"}, null, null, null);
- String[] columns = new String[]{"address", "person", "date", "body", "type"};
- if (cur.getCount() > 0) {
- String count = Integer.toString(cur.getCount());
- while (cur.moveToNext()) {
- String address = cur.getString(cur.getColumnIndex(columns[0]));
- if (address.equalsIgnoreCase(phoneNumber) || address.equalsIgnoreCase("+356" + phoneNumber)) { //put your number here
- String name = cur.getString(cur.getColumnIndex(columns[1]));
- String date = cur.getString(cur.getColumnIndex(columns[2]));
- String body = cur.getString(cur.getColumnIndex(columns[3]));
- String id = cur.getString(cur.getColumnIndex(columns[4]));
- receivedMessages.add(new Message(body, date, address, id));
- Log.d("*******", "body=" + body);
- }
- }
- }
- }
- //Display all SMS in list view
- public void setSMSList(List<Message> messages) {
- ListView listView = (ListView) findViewById(R.id.lstMessages);
- listView.setAdapter(new MessageListAdapter(SmsActivity.this, R.layout.smslistviewtemplate, messageList));
- }
- private final BroadcastReceiver receiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- //Get the data (SMS data) bound to intent
- Bundle bundle = intent.getExtras();
- SmsMessage[] msgs = null;
- String str = "";
- if (bundle != null) {
- //Retrieve the SMS Messages received
- Object[] pdus = (Object[]) bundle.get("pdus");
- //Packet Data Unit
- msgs = new SmsMessage[pdus.length];
- //For every SMS message reveived
- for (int i = 0; i < msgs.length; i++) {
- //Convert Object array
- msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
- //Sender's phone number
- str += "SMS from " + msgs[i].getOriginatingAddress() + " : ";
- //Fetch the text message
- str += msgs[i].getMessageBody().toString();
- str += "\n";
- }
- //Display the entire SMS Message
- Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
- refreshList();
- }
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement