简体   繁体   中英

Accessing Contacts in Phonebook for SMS Message?

So my I've got my SMS messaging class working. However, I would like that when the user clicks on the edittext for entering the phone number...the phonebook of the phone loads and the user can select one or many contacts from there and the SMS will go to all the selected contacts. How do I load and select the contacts using the phonebook for my SMS?

I am bit stuck could I get an explanation please :)

Class:

    Button btnSendSMS;
    EditText txtPhoneNo;
    EditText txtMessage;

  private static final int ACTION_PICK_CONTACT=1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send_sms);
        btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
        txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);
        txtMessage = (EditText) findViewById(R.id.txtMessage);

        txtPhoneNo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(i, ACTION_PICK_CONTACT);
          }
        });


        btnSendSMS.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                String phoneNo = txtPhoneNo.getText().toString();
                String message = txtMessage.getText().toString() + displayLocation();
                displayLocation();

                if (phoneNo.length()>0 && message.length()>0)
                    sendSMS(phoneNo, message);
                else
                    Toast.makeText(getBaseContext(),
                            "Please enter both phone number and message.",
                            Toast.LENGTH_SHORT).show();
            }
        });


    }


    public void onActivityResult(int reqCode, int resCode, Intent data) {
        super.onActivityResult(reqCode, resCode, data);

        switch (reqCode) {
            case (ACTION_PICK_CONTACT) :
                if (resCode == Activity.RESULT_OK) {

                    Uri contact = data.getData();
                    Cursor cursor =  managedQuery(contact, null, null, null, null);
                    if (cursor.moveToFirst()) {
                        String contact_id =cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                        Cursor phoneCursor = getContentResolver().query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contact_id,
                                null, null);
                        phoneCursor.moveToFirst();
                        String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("data1")); //THE NUMBER TO SEND YOUR SMS
                    }
                }
                break;
        }
    }

    private String displayLocation(){
            LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, new LocationListener(){
                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {}
                @Override
                public void onProviderEnabled(String s) {}
                @Override
                public void onProviderDisabled(String s) {}
                @Override
                public void onLocationChanged(final Location location) {}
            });
            Location myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
            double longitude = myLocation.getLongitude();
            double latitude = myLocation.getLatitude();
           return "https://www.google.co.id/maps/@"+latitude+","+longitude;
    }





    //---sends a SMS message to another device---
    private void sendSMS(String phoneNumber, String message)
    {

        PendingIntent pi = PendingIntent.getActivity(this, 0,
                new Intent(this, Home.class), 0);
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(phoneNumber, null, message, pi, null);


        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";

        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
                new Intent(SENT), 0);

        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);

        //---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS sent",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.gsm.SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Toast.makeText(getBaseContext(), "Generic failure",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.gsm.SmsManager.RESULT_ERROR_NO_SERVICE:
                        Toast.makeText(getBaseContext(), "No service",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.gsm.SmsManager.RESULT_ERROR_NULL_PDU:
                        Toast.makeText(getBaseContext(), "Null PDU",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.gsm.SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(getBaseContext(), "Radio off",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter(SENT));

        //---when the SMS has been delivered---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        Toast.makeText(getBaseContext(), "SMS not delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter(DELIVERED));

        android.telephony.gsm.SmsManager smms = android.telephony.gsm.SmsManager.getDefault();
        smms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
    }

Use it like this:

int ACTION_PICK_CONTACT=1;

//Call this in your onclick event
Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(i, ACTION_PICK_CONTACT);

//This is called when user has selected a contact
public void onActivityResult(int reqCode, int resCode, Intent data) {
   super.onActivityResult(reqCode, resultCode, data);

   switch (reqCode) {
     case (ACTION_PICK_CONTACT) :
        if (resCode == Activity.RESULT_OK) {

          Uri contact = data.getData();
          Cursor cursor =  managedQuery(contact, null, null, null, null);
          if (cursor.moveToFirst()) {
            String contact_id =cursor.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

            Cursor phoneCursor = getContentResolver().query( 
                   ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                   ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contact_id, 
                   null, null);
            phoneCursor.moveToFirst();
            String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("data1")); //THE NUMBER TO SEND YOUR SMS
            txtPhoneNo.setText(phoneNumber);
          }
        }
        break;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM