2015-02-06 3 views
0

это мой кодContactsPicker не перенастройки никакого результата

//OnClick 
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(intent, CONTACT_PICKER_RESULT); 

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

    switch (reqCode) { 
     case (CONTACT_PICKER_RESULT) : 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contactData = data.getData(); 
       Cursor c = getActivity().getContentResolver().query(contactData, null, null, null, null); 
       if (c.moveToFirst()) { 
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        // TODO Whatever you want to do with the selected contact name. 
        Log.d("data",name); 
       } 
      } 
      break; 
    } 
} 

Я использую это фрагмент, и он открывает список контактов, но onActivityResult никогда не называют

+0

«Я не получаю никакого результата» - вы имеете в виду, что 'onActivityResult()' никогда не вызывается? – CommonsWare

+0

Да ... он не называется – dvs

+0

Вы вызываете 'startActivityForResult()' на фрагмент или на активность? Является ли ваш метод 'onActivityResult()' реализован на фрагменте или на активности? Им нужно выстраиваться в линию. FWIW, все [эти примеры приложений] (https://github.com/commonsguy/cw-omnibus/tree/master/ConfigChange) выполняют ту же операцию, которую вы пытаетесь сделать, и все они работали на всех устройствах, которые Я попробовал их. Некоторые из них являются обычными действиями, некоторые используют фрагменты. – CommonsWare

ответ

0

Из-за низкой репутации я пушечное написать комментарий. Проверьте manifest.xml для флагов, как:

android:launchMode="singleInstance" 

или

android:noHistory="true" 

, как они делают это невозможным для достижения результатов. Эти флаги используются между <activity> тегами

+0

У меня есть андроид: noHistory = "true" в активности splashscreen – dvs

+0

Если это действие, которое содержит фрагмент, попробуйте удалить флаг и проверить, вызван ли onActivityResult. – Patman

0

я использовал этот подход в моем приложении: сначала добавить разрешения на файл manifest.xml как:

<uses-permission android:name="android.permission.READ_CONTACTS"/> 

затем вызвать launchContactPicker() когда вы хотите показать контакты пользователя:

public void launchContactPicker() { 
    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
      ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
} 

затем на activityResult добавить следующее:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
     if(resultCode==RESULT_OK) 
    { 
     switch (requestCode) { 
      case CONTACT_PICKER_RESULT: 
       Cursor cursor; 
       Bundle extras = data.getExtras(); 
       if(extras != null) 
       { 
        Set<String> keys = extras.keySet(); 
        for (String key : keys) { 
         extras.get(key); 
        } 
       } 
       else 
       { 
        Log.v("Auto Respond", "No extras returned from contact."); 
       } 

       Uri result = data.getData(); 
       String id = result.getLastPathSegment(); 
       String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}; 
       cursor = getContentResolver().query(result, projection, 
         null, null, null); 

       String contactName=""; 
       String contactNumber=""; 
       if(cursor != null && cursor.moveToFirst()) 
       { 
        String nameOfselectedContact=cursor.getString(cursor.getColumnIndex((ContactsContract.Contacts.DISPLAY_NAME))); 
        ArrayList<String> numbersOfSelectedContact=new ArrayList<String>(); 
        Log.e("contact size", cursor.getCount()+""); 
        for(int i=0;i<cursor.getCount();i++) 
        { 
         numbersOfSelectedContact.add(cursor.getString(cursor.getColumnIndex((ContactsContract.CommonDataKinds.Phone.NUMBER)))); 
         cursor.moveToNext(); 
        } 
        cursor.close(); 

       } 
        break; 
     } 
    } 

} 

Теперь у вас есть контактное имя как String с именем «nameOfselectedContact» и все его номера как ArrayList, называемые «numbersOfSelectedContact», тогда вы можете использовать их как и хотите (может отображаться в диалоговом окне).

Смежные вопросы