Pick multiple contact with name and phone number

耗尽温柔 提交于 2019-12-24 19:17:29

问题


Currently my code can pick one contact only and display in the selected editText and after button add clicked, the details will inserted into the database.. Now i want to select multiple contact and insert them into the database.What is the best method for me to implement this?

Below is my current code.

public class newBill extends AppCompatActivity implements View.OnClickListener{

    //Defining views
    private EditText description;
    private EditText person_engaged;
    private EditText amount;
    private EditText contact;
    private String username;
    private Button buttonAdd;
    private Button buttonView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_bill);

        ((Button)findViewById(R.id.btnBrowse)).setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

                intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                startActivityForResult(intent, 1);
            }
        });

        //Initializing views

        description = (EditText) findViewById(R.id.description);
        person_engaged = (EditText) findViewById(R.id.person_engaged);
        amount = (EditText) findViewById(R.id.amount);
        contact=(EditText) findViewById(R.id.person_engaged_contact);

        buttonAdd = (Button) findViewById(R.id.buttonAdd);
        buttonView = (Button) findViewById(R.id.buttonView);

        //Setting listeners to button
        buttonAdd.setOnClickListener(this);
        buttonView.setOnClickListener(this);
    }

    //get contact picker
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null) {
            Uri uri = data.getData();

            if (uri != null) {
                Cursor c = null;
                try {
                    c = getContentResolver().query(uri, new String[]{
                                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME },
                            null, null, null);

                    if (c != null && c.moveToFirst()) {
                        String number = c.getString(0);
                        String name = c.getString(1);
                        showSelectedNumber(name, number);
                    }
                } finally {
                    if (c != null) {
                        c.close();
                    }
                }
            }
        }
    }

    public void showSelectedNumber(String name, String number) {
        Toast.makeText(this, name + ": " + number, Toast.LENGTH_LONG).show();
        person_engaged.setText(name);
        contact.setText(number);

    }

    //Adding an bill
    private void addBills(){

        final String desc = description.getText().toString().trim();
        final String person = person_engaged.getText().toString().trim();
        final String amo = amount.getText().toString().trim();
        final String contacts = contact.getText().toString().trim();

        //Fetching username from shared preferences
        SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
        username = sharedPreferences.getString(Config.USERNAME_SHARED_PREF,"Not Available");

        final String currentUser = username.toString().trim();

        class AddBills extends AsyncTask<Void,Void,String>{

            ProgressDialog loading;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(newBill.this,"Adding...","Wait...",false,false);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(newBill.this,s,Toast.LENGTH_LONG).show();
                description.getText().clear();
                person_engaged.getText().clear();
                amount.getText().clear();
                contact.getText().clear();

            }

            @Override
            protected String doInBackground(Void... v) {
                HashMap<String,String> params = new HashMap<>();
                params.put(Config.KEY_DESCRIPTION,desc);
                params.put(Config.KEY_PERSON_ENGAGED,person);
                params.put(Config.KEY_AMOUNT,amo);
                params.put(Config.KEY_PERSON_ENGAGED_CONTACT,contacts);
                params.put(Config.KEY_CREATED_BY_NAME,currentUser);

                RequestHandler rh = new RequestHandler();
                String res = rh.sendPostRequest(Config.URL_ADD, params);
                return res;
            }
        }

        AddBills ae = new AddBills();
        ae.execute();
    }

    @Override
    public void onClick(View v) {
        if(v == buttonAdd){
            addBills();
        }

        if(v == buttonView){
            startActivity(new Intent(this,ViewAllBills.class));
        }
    }

    //for sending direct sms notification
    public void sendSMS(String phoneNo, String msg) {
        try {
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(phoneNo, null, msg, null, null);
            Toast.makeText(getApplicationContext(), "Message Sent",
                    Toast.LENGTH_LONG).show();
        } catch (Exception ex) {
            Toast.makeText(getApplicationContext(),ex.getMessage().toString(),
                    Toast.LENGTH_LONG).show();
            ex.printStackTrace();
        }
    }
}

回答1:


You can't use the Intent.ACTION_GET_CONTENT intent to pick multiple contacts. You can query for all contacts and their phone numbers yourself, display them in a ListView to the user, and allow the user to select the contacts within your own app.

To query for the phone's contacts (requires the Contacts permission if you're using runtime-permissions) you can do this:

List<String> allPhones = new ArrayList<>();
// The Phone class should be imported from CommonDataKinds.Phone
Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }, Phone.IN_VISIBLE_GROUP + "=1", null, Phone.TIMES_CONTACTED + " DESC"); 
while (cursor != null && cursor.moveToNext()) {
    String name = cursor.getString(0);
    String number = cursor.getString(1);
    allPhones.add(name + " - " + number);
}
// display allPhones in a ListView on screen, and handle item clicks


来源:https://stackoverflow.com/questions/43854924/pick-multiple-contact-with-name-and-phone-number

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!