选择多个联系人姓名和电话号码

时间:2017-05-08 18:34:19

标签: android-contacts mobile-application contactpicker

目前我的代码只能选择一个联系人,并显示在选定的editText中,点击按钮后,详细信息将插入到数据库中。 现在我想选择多个联系人并将它们插入到数据库中。对我来说,实现这个的最佳方法是什么?

以下是我目前的代码。

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 个答案:

答案 0 :(得分:0)

您无法使用Intent.ACTION_GET_CONTENT意图来挑选多个联系人。 您可以自己查询所有联系人及其电话号码,将其显示在ListView中给用户,并允许用户选择您自己应用中的联系人。

要查询手机的联系人(如果您正在使用runtime-permissions,则需要Contacts权限),您可以这样做:

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