2013-08-12 6 views
0

Я экспериментирую с созданием пользовательского экрана Android Home. Я использовал образец исходного экрана и адаптировал его. Что-то, что я хотел бы сделать, открывает кнопку выбора контактов с помощью кнопки на главном экране и использует контакт, который пользователь выбрал в следующем действии. Я наткнулся на ту же проблему, что упоминается в this question.Как вызвать контактную панель на главном экране?

Как я могу обойти это, чтобы начальный экран оставался «singleInstance», и я также могу вызвать startActivityForResult()?

Является ли сборщик контактов деятельностью, которую я могу подкласса (я искал, но не могу найти), чтобы я мог использовать решение, предложенное Дэвидом Вассером в вышеупомянутом вопросе?

ответ

0

Я нашел элегантное решение после того, как все:

Моя основная деятельность запускает промежуточный, невидимую деятельность, которая имеет android:theme="@android:style/Theme.NoDisplay"

Эта промежуточная активность вызывает сборщика контакта в его onCreate

Intent phoneContactIntent = new Intent(Intent.ACTION_PICK, 
    ContactsContract.Contacts.CONTENT_URI); 
// Show user only contacts w/ phone numbers 
phoneContactIntent.setType(Phone.CONTENT_TYPE); 
startActivityForResult(phoneContactIntent, CHOOSE_CONTACT_TO_CALL); 

Затем, в onActivityResult, он создает новое намерение для основного приложения с данными, которые возвратил сборщик контактов.

switch (requestCode) { 
    case (CHOOSE_CONTACT_TO_CALL): 
     if (resultCode == Activity.RESULT_OK) { 
      Intent resultIntent = new Intent(this, Home.class); 
      resultIntent.putExtras(data); 

      Uri contactData = data.getData(); 
      if (contactData != null) 
      { 
       resultIntent.setData(contactData); 
      } 
      startActivity(resultIntent); 
     } 
    } 
    finish(); 

и в моем главном классе, в onCreate я называю getIntent() и проверять данные в намерениях, который начал основную деятельность.

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