Advertisement
Guest User

assignment

a guest
Jan 18th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.46 KB | None | 0 0
  1. package com.example.a100585.assignmentsection2;
  2.  
  3. import android.content.BroadcastReceiver;
  4. import android.content.ContentResolver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.database.Cursor;
  9. import android.database.sqlite.SQLiteException;
  10. import android.net.Uri;
  11. import android.provider.ContactsContract;
  12. import android.support.v7.app.AppCompatActivity;
  13. import android.os.Bundle;
  14. import android.telephony.SmsManager;
  15. import android.telephony.SmsMessage;
  16. import android.util.Log;
  17. import android.view.View;
  18. import android.widget.ArrayAdapter;
  19. import android.widget.Button;
  20. import android.widget.EditText;
  21. import android.widget.ListAdapter;
  22. import android.widget.ListView;
  23. import android.widget.Toast;
  24.  
  25. import java.util.ArrayList;
  26. import java.util.Collections;
  27. import java.util.Comparator;
  28. import java.util.List;
  29.  
  30. public class SmsActivity extends AppCompatActivity {
  31.  
  32. final String SMS_URI_INBOX = "content://sms/inbox";
  33. final String SMS_URI_SENT = "content://sms/sent";
  34. ArrayList<String> sms_num = new ArrayList<>();
  35. List<Message> sentMessages = new ArrayList<>();
  36. List<Message> receivedMessages = new ArrayList<>();
  37. List<Message> messageList = new ArrayList<>();
  38. String sendTextBody;
  39. String phoneNumber;
  40.  
  41. @Override
  42. protected void onCreate(Bundle savedInstanceState) {
  43. super.onCreate(savedInstanceState);
  44. setContentView(R.layout.activity_sms);
  45.  
  46. //Retrieve the selected Contact's information
  47. Contact selectedContact = (Contact) getIntent().getSerializableExtra("CONTACT");
  48. String contactName = selectedContact.getName();
  49. phoneNumber = selectedContact.getNumber();
  50.  
  51. refreshList();
  52.  
  53. //Send SMS button handler
  54. Button btnSend = (Button) findViewById(R.id.btnSend);
  55. btnSend.setOnClickListener(new View.OnClickListener() {
  56. @Override
  57. public void onClick(View view) {
  58. EditText txtSendText = (EditText) findViewById(R.id.textSendText);
  59. sendTextBody = txtSendText.getText().toString();
  60. sendSms(phoneNumber, sendTextBody);
  61. }
  62. });
  63.  
  64. //SMS received
  65. //SMSReceiver smsReceiver = new SMSReceiver();
  66. IntentFilter intentFilter = new IntentFilter();
  67. intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
  68. registerReceiver(receiver, intentFilter);
  69. }
  70.  
  71. public void refreshList() {
  72. receivedMessages.clear();
  73. sentMessages.clear();
  74. messageList.clear();
  75. //Get the list of SMS
  76. getSentSMS(phoneNumber);
  77. getReceivedSMS(phoneNumber);
  78.  
  79. //Compile the sent and received into one list
  80. messageList.addAll(receivedMessages);
  81. messageList.addAll(sentMessages);
  82.  
  83. //Sort them by date
  84. Collections.sort(messageList, new Comparator<Message>() {
  85. @Override
  86. public int compare(Message message, Message t1) {
  87. return message.getDate().compareToIgnoreCase(t1.getDate());
  88. }
  89. });
  90.  
  91. //Display the list in a list view
  92. setSMSList(messageList);
  93. }
  94.  
  95. //Send SMS
  96. private void sendSms(String number, String body) {
  97. SmsManager smsManager = SmsManager.getDefault();
  98. smsManager.sendTextMessage(number, null, body, null, null);
  99.  
  100. refreshList();
  101. }
  102.  
  103. //Get list of SMS sent
  104. private void getSentSMS(String phoneNumber) {
  105. try {
  106. Uri messageUri = Uri.parse(SMS_URI_SENT);
  107. ContentResolver cr = this.getContentResolver();
  108. Cursor cur = cr.query(messageUri, new String[]{"_id", "address", "date", "body", "read"}, "address='" + phoneNumber + "'", null, "date desc");
  109.  
  110. if (cur.moveToFirst()) {
  111. do {
  112. if (cur.getString(cur.getColumnIndexOrThrow("address")) == null) {
  113. cur.moveToNext();
  114. continue;
  115. }
  116. String number = cur.getString(cur.getColumnIndexOrThrow("address")).toString();
  117. String id = cur.getString(cur.getColumnIndexOrThrow("_id")).toString();
  118. String date = cur.getString(cur.getColumnIndexOrThrow("date")).toString();
  119. String body = cur.getString(cur.getColumnIndexOrThrow("body")).toString();
  120. sentMessages.add(new Message(body, date, number, id));
  121. } while (cur.moveToNext());
  122. }
  123.  
  124. cur.close();
  125.  
  126. } catch (Exception e) {
  127. e.printStackTrace();
  128. }
  129. }
  130.  
  131. //get list of SMS received
  132. private void getReceivedSMS(String phoneNumber) {
  133. Uri mSmsinboxQueryUri = Uri.parse(SMS_URI_INBOX);
  134. Cursor cur = getContentResolver().query(mSmsinboxQueryUri, new String[]{"_id", "thread_id", "address", "person", "date", "body", "type"}, null, null, null);
  135.  
  136. String[] columns = new String[]{"address", "person", "date", "body", "type"};
  137. if (cur.getCount() > 0) {
  138. String count = Integer.toString(cur.getCount());
  139. while (cur.moveToNext()) {
  140. String address = cur.getString(cur.getColumnIndex(columns[0]));
  141.  
  142. if (address.equalsIgnoreCase(phoneNumber) || address.equalsIgnoreCase("+356" + phoneNumber)) { //put your number here
  143. String name = cur.getString(cur.getColumnIndex(columns[1]));
  144. String date = cur.getString(cur.getColumnIndex(columns[2]));
  145. String body = cur.getString(cur.getColumnIndex(columns[3]));
  146. String id = cur.getString(cur.getColumnIndex(columns[4]));
  147. receivedMessages.add(new Message(body, date, address, id));
  148. Log.d("*******", "body=" + body);
  149.  
  150. }
  151. }
  152. }
  153. }
  154.  
  155. //Display all SMS in list view
  156. public void setSMSList(List<Message> messages) {
  157. ListView listView = (ListView) findViewById(R.id.lstMessages);
  158. listView.setAdapter(new MessageListAdapter(SmsActivity.this, R.layout.smslistviewtemplate, messageList));
  159. }
  160.  
  161. private final BroadcastReceiver receiver = new BroadcastReceiver() {
  162. @Override
  163. public void onReceive(Context context, Intent intent) {
  164. //Get the data (SMS data) bound to intent
  165. Bundle bundle = intent.getExtras();
  166.  
  167. SmsMessage[] msgs = null;
  168.  
  169. String str = "";
  170.  
  171. if (bundle != null) {
  172. //Retrieve the SMS Messages received
  173. Object[] pdus = (Object[]) bundle.get("pdus");
  174. //Packet Data Unit
  175.  
  176. msgs = new SmsMessage[pdus.length];
  177.  
  178. //For every SMS message reveived
  179. for (int i = 0; i < msgs.length; i++) {
  180. //Convert Object array
  181. msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
  182. //Sender's phone number
  183. str += "SMS from " + msgs[i].getOriginatingAddress() + " : ";
  184. //Fetch the text message
  185. str += msgs[i].getMessageBody().toString();
  186.  
  187. str += "\n";
  188. }
  189.  
  190. //Display the entire SMS Message
  191. Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
  192.  
  193. refreshList();
  194. }
  195. }
  196. };
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement