2017-05-08 8 views
0

現在、自分の連絡先を選択して、選択した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(); 
     } 
    } 
} 
+0

てみてください[アンドロイド接点-抽出](https://github.com/ nitiwari-dev/android-contact-extractor)を使用して、連絡先リストの形で連絡先を取り出す – nitesh

答えて

0

Intent.ACTION_GET_CONTENTのインテントを使用して複数の連絡先を選択することはできません。 すべての連絡先とその電話番号を自分で照会し、リストビューでユーザーに表示し、ユーザーが自分のアプリ内の連絡先を選択できるようにすることができます。携帯電話の連絡先を照会するには

(あなたが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 
関連する問題