2015-12-30 2 views
2

Я пытаюсь получить доступ к контактам через свое приложение. Поэтому я могу обмениваться информацией по почте другу. Пока отображаются контакты, но когда я нажимаю на имя, чтобы добавить его в электронную почту, приложение просто вернется к предыдущему экрану и письмо не будет отправлено. Текст редактирования не установлен на контакт, который я выбрал.Пытается получить доступ к контактам в андроид-приложении keep crashing

Android явить

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

EmailSend класса

contacts.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
        Contacts.CONTENT_URI); 
      startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
     } 
    }); 

....

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     System.out.println("yo"); 
     switch (requestCode) { 
     case CONTACT_PICKER_RESULT: 
      Cursor cursor = null; 
      String email = ""; 
      System.out.println("Hello"); 
      try { 
       Uri result = data.getData(); 
       Log.v("DEBUG: ", "Got a contact result: " 
         + result.toString()); 

       // get the contact id from the Uri 
       String id = result.getLastPathSegment(); 

       // query for everything email 
       cursor = getContentResolver().query(Email.CONTENT_URI, 
         null, Email.CONTACT_ID + "=?", new String[] { id }, 
         null); 

       int emailIdx = cursor.getColumnIndex(Email.DATA); 

       // let's just get the first email 
       if (cursor.moveToFirst()) { 
        email = cursor.getString(emailIdx); 
        Log.v("DEBUG: ", "Got email: " + email); 
       } else { 
        Log.w("DEBUG: ", "No results"); 
       } 
      } catch (Exception e) { 
       Log.e("DEBUG: ", "Failed to get email data", e); 
      } finally { 
       if (cursor != null) { 
        cursor.close(); 
       } 
       // EditText emailEntry = (EditText) findViewById(R.id.invite_email); 
       personsEmail.setText(email); 
       if (email.length() == 0) { 
        Toast.makeText(this, "No email found for contact.", 
          Toast.LENGTH_LONG).show(); 
       } 

      } 

      break; 
     } 

    } else { 
     Log.w("DEBUG: ", "Warning: activity result not ok"); 
    } 
} 

Что более загадочным является то, что нет ничего, что появляется на LogCat! Таким образом, он превосходит все мои проверки ошибок. Любая идея, почему сбой экрана и адрес электронной почты не добавляются в EditText?

+2

Какое исключение вы получаете? пожалуйста, поделитесь, и если вы тестируете в Marshmallow, вам также нужно проверить разрешение во время работы. В Marshmallow Пользователь имеет возможность отключить доступ после установки приложения. – Darsh

+0

Он говорит, что Keyboard.Facilitator onFinishInput() на logcat. Использование eclipse с подключаемыми модулями Android. Спасибо за помощь мне! – LFG

+0

не обязательно, чтобы каждый контакт имел идентификатор электронной почты. Контакты, которые синхронизируются с gmail, обычно имеют идентификатор электронной почты, но контакты, добавленные вручную, не имеют его –

ответ

0
Try this 

public void getNumber(ContentResolver cr) { 
     Cursor phones = cr.query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
       null, null); 
     while (phones.moveToNext()) { 
      ContactSynRequestcontacts data = new ContactSynRequestcontacts(); 

Строка ContactID = cursor.getString (cursor.getColumnIndex (ContactsContract.Contacts._ID));

Курсор электронной почты = contResv.query (Email.CONTENT_URI, null, Email.CONTACT_ID + "=" + contactId, null, null); while (emails.moveToNext()) { String email = emails.getString (emails.getColumnIndex (Email.DATA)); break; } emails.close();

  data.setName(name); 
      data.setPhoneNumber(phoneNumber); 
      userContactList.add(data); 
     } 
     phones.close();// close cursor 
    } 

    public class ContactSynRequestcontacts { 
    private String Name; 

    public String getName() { 
     return Name; 
    } 

    public void setName(String name) { 
     this.Name = name; 
    } 
    private String PhoneNumber; 

    public String getPhoneNumber() { 
     return PhoneNumber; 
    } 

    public void setPhoneNumber(String mobile) { 
     this.PhoneNumber = mobile; 
    } 
} 
+0

Вы можете напрямую обращаться к контактам без намерения –

+0

Мне нужен только их адрес электронной почты, хотя ...так это все еще полезно? – LFG

+0

Итак, вы можете получить адрес электронной почты так же, как имя и номер –

1

В случае, если вы тестируете его в последней ОС, это означает, что Android M, они ввели новый набор разрешений, известные как разрешения времени выполнения.

http://developer.android.com/training/permissions/requesting.html

Проверить эту ссылку и дайте нам знать, если это решит проблему.

+0

Это то, что в моем манифесте: Нужно ли искать эти новые разрешения? – LFG

+0

@ LFG No. Если вы тестируете устройство с зефиром, это может быть проблема –

+0

Как сказал @MsYvette, это просто для устройства, на котором вы тестируете, если это устройство Marshmallow, тогда вам нужно позаботиться о это. – frgr