2016-08-28 24 views
0

私のアンドロイドアプリケーションでは、私は人(名前と電話番号)のリストを持っており、ユーザーは連絡先リストから1人をインポートして、アプリケーションのデータベースに人を追加させます。すべて正常に機能しますが、ユーザーはボタンをクリックして新しい人物をインポートしてから戻ることができるため、実際に連絡先を選択せず​​に連絡先の意図が閉じられます。Android - back from contacts from from one

だから、ユーザーが連絡先を選択したかどうかを確認するために、コード内にifやその他のものを置く場所を知る必要があります。

private void pickContact() { 
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); 
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers 
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    // Check which request it is that we're responding to 
    if (requestCode == PICK_CONTACT_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      // Get the URI that points to the selected contact 
      Uri contactUri = data.getData(); 

      String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER}; 

      Cursor cursor = getContentResolver().query(contactUri, null, null, null, null); 
      cursor.moveToFirst(); 

      // Retrieve the name from the DISPLAY_NAME column 
      String name = cursor.getString(cursor.getColumnIndex(ontactsContract.Contacts.DISPLAY_NAME)); 

      // Retrieve the phone number from the NUMBER column 
      int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      String number = cursor.getString(column); 

      // update database 
      dbManager.addPerson(name, number, true); 
     } 
    } 

} 

ユーザーが実際に連絡先を選択したかどうかを確認するにはどうすればよいですか?

答えて

1

だから、ユーザーが連絡先を選択したかどうかを確認するために、コード内にifやその他のものを入れる場所を知る必要があります。

すでにコードはif (resultCode == RESULT_OK)です。ユーザーがBACKを押すと、RESULT_OKは取得されません。それは、ユーザーが連絡先を選択した上で

+0

右、はい、私はあまりにもそれを考え出しました: ) –

0

あなたの

Intent.ACTION_PICK, Uri.parse("content://contacts") 

ジョブたら同じ活動に戻って戻りますstartActivityForResultを使用していることを取得します。

と名前、番号またはあなたのようなあなたのonActivityResultコールバックでそれを行う選択した連絡先のその他の詳細を得るためには、次のとおりです

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    if(reqCode == PICK_CONTACT_REQUEST) { 
      String cNumber = null; 
      String cName = null; 

      if (resultCode == Activity.RESULT_OK) { 

       Uri contactData = data.getData(); 
       Cursor cursor = getContentResolver().query(contactData, null, null, null, null); 
       String hasPhone = null; 
       String contactId = null; 

       if (cursor != null) { 
        cursor.moveToFirst(); 
        try { 
         hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
         contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
        } catch (IllegalArgumentException e) { 
         Log.e(TAG, "Exception Message : " + e.getMessage()); 
         DisplayMessage.error("Sorry can't access contacts. Check permissions settings.", this); 
         return; 
        } 

        if (hasPhone != null && hasPhone.equals("1")) { 
         Cursor phones = getContentResolver().query 
           (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
             ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
               + " = " + contactId, null, null); 
         if (phones != null) { 
          while (phones.moveToNext()) { 
           String phoneNumber = phones.getString(phones.getColumnIndex 
             (ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("[-() ]", ""); 
           cNumber = phoneNumber; 
          } 
          phones.close(); 
         } 

         cName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
         Log.d(TAG, "Contact name is:" + cName); 
        } 
        cursor.close(); 
       } 
      } 
    } 
}