Я делаю приложение для Android, и мне нужно позвонить в список контактов телефона. Мне нужно вызвать функцию списка контактов, выбрать контакт, а затем вернуться в приложение с именем контакта. Вот код, который я получил в Интернете, но он не работает.
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Contacts extends ListActivity {
private ListAdapter mAdapter;
public TextView pbContact;
public static String PBCONTACT;
public static final int ACTIVITY_EDIT=1;
private static final int ACTIVITY_CREATE=0;
// Called when the activity is first created.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
startManagingCursor(C);
String[] columns = new String[] {People.NAME};
int[] names = new int[] {R.id.row_entry};
mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
setListAdapter(mAdapter);
} // end onCreate()
// Called when contact is pressed
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor C = (Cursor) mAdapter.getItem(position);
PBCONTACT = C.getString(C.getColumnIndex(People.NAME));
// RHS 05/06
//pbContact = (TextView) findViewById(R.id.myContact);
//pbContact.setText(new StringBuilder().append("b"));
Intent i = new Intent(this, NoteEdit.class);
startActivityForResult(i, ACTIVITY_CREATE);
}
}
Ответы:
Я не уверен на 100%, что должен делать ваш пример кода, но следующий фрагмент должен помочь вам «вызвать функцию списка контактов, выбрать контакт, а затем вернуться в [ваше] приложение с именем контакта».
Этот процесс состоит из трех этапов.
1. Разрешения
Добавьте разрешение на чтение данных контактов в манифест приложения.
2. Вызов средства выбора контактов
В своей деятельности создайте намерение, которое просит систему найти действие, которое может выполнять действие ВЫБОР из элементов в URI контактов.
Вызов
startActivityForResult
, передав это намерение (и целое число кода запросаPICK_CONTACT
в этом примере). Это приведет к тому, что Android запустит действие, которое зарегистрировано для поддержкиACTION_PICK
вPeople.CONTENT_URI
, а затем вернется к этому действию, когда выбор будет сделан (или отменен).3. Прислушиваться к результату
Также в своем действии переопределите
onActivityResult
метод прослушивания возврата из действия «выберите контакт», которое вы запустили на шаге 2. Вы должны убедиться, что возвращенный код запроса соответствует ожидаемому значению, и что код результата соответствуетRESULT_OK
.Вы можете получить URI выбранного контакта, вызвав
getData()
параметр data Intent. Чтобы получить имя выбранного контакта, вам необходимо использовать этот URI для создания нового запроса и извлечения имени из возвращенного курсора.Полный исходный код: tutorials-android.blogspot.com (как вызвать список контактов Android) .
источник
Я делаю это для версии Android 2.2 Froyo: в основном использую eclipse для создания такого класса, как: public class SomePickContactName extends Activity
затем вставьте этот код. Не забудьте добавить переменные частного класса и КОНСТАНТЫ, указанные в моей версии кода:
источник
При поиске решения API уровня 5 с использованием API ContactsContract вы можете немного изменить приведенный выше код следующим образом:
А затем в onActivityResult используйте имя столбца:
источник
Вот фрагмент кода для связи:
}
источник
источник
потому что без выбора контакта он выдаст исключение. так что лучше проверить это условие.
источник
Полный код приведен ниже
источник
private static final int PICK_CONTACT = 1;
.К моему удивлению, вам не нужно разрешение пользователя CONTACT_READ, чтобы читать имена и некоторую основную информацию (помечен ли контакт звездочкой, когда последний раз звонил). Однако вам нужно разрешение на чтение деталей контакта, таких как номер телефона.
источник
Будьте осторожны при работе со списком контактов Android.
Чтение списка контактов описанными выше методами работает на большинстве устройств Android, кроме HTC One и Sony Xperia. Я потратил шесть недель на то, чтобы понять, в чем дело!
Большинство учебных пособий, доступных в Интернете, почти одинаковы - сначала прочтите "ВСЕ" контакты, а затем отобразите
Listview
с помощьюArrayAdapter
. Это неэффективное решение для памяти. Вместо того, чтобы сначала искать решения на других веб-сайтах, загляните на developer.android.com. Если какое-либо решение недоступно на сайте developer.android.com, вам следует поискать в другом месте.Решение состоит в использовании
CursorAdapter
вместоArrayAdapter
получения списка контактов. ИспользованиеArrayAdapter
будет работать на большинстве устройств, но неэффективно. ВCursorAdapter
извлекает только часть списка контактов во время выполнения в то время какListView
в настоящее время прокручивается.Получение списка контактов: получение списка контактов
источник
источник
привет, у меня есть код для сохранения контакта в вашей базе данных по общим предпочтениям вот мой код
источник
источник
Я использую код, предоставленный @Colin MacKenzie - III. Большое спасибо!
Для тех, кто ищет замену устаревшему управляемому запросу:
1-й, при условии использования библиотеки поддержки v4:
второй:
третий,
4-е, переопределить обратные вызовы:
пятый:
6-й, код выше , за исключением того, что я меняю параметр подписи с Intent на Cursor:
7-е, вызовите initLoader:
8-е, не забудьте этот фрагмент кода
Ссылки:
Основы Android: правильная загрузка данных
Инициализация загрузчика в действии
источник