Как получить контактный номер в текстовом представлении?
Это код, который у меня есть, но каждый раз, когда я нажимаю на контакт, он принудительно закрывается. и есть ли код, чтобы, когда я получаю контакт, он добавляет его в текстовое представление?
public static final String TAG = "ContactManager";
private Button mAddAccountButton;
private ListView mContactList;
private boolean mShowInvisible;
private CheckBox mShowInvisibleControl;
/**
* Called when the activity is first created. Responsible for initializing the UI.
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
Log.v(TAG, "Activity State: onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
// Obtain handles to UI objects
mAddAccountButton = (Button) findViewById(R.id.AddContact);
mContactList = (ListView) findViewById(R.id.ContactList);
mShowInvisibleControl = (CheckBox) findViewById(R.id.ShowInvisible);
// Initialize class properties
mShowInvisible = false;
mShowInvisibleControl.setChecked(mShowInvisible);
// Register handler for UI elements
mAddAccountButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "mAddAccountButton clicked");
launchContactAdder();
}
});
mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
mShowInvisible = isChecked;
populateContactList();
}
});
// Populate the contact list
populateContactList();
}
/**
* Populate the contact list based on account currently selected in the account spinner.
*/
private void populateContactList() {
// Build adapter with contact entries
Cursor cursor = getContacts();
String[] fields = new String[] {
ContactsContract.Data.DISPLAY_NAME
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.main, cursor,
fields, new int[] {R.id.TextView01});
mContactList.setAdapter(adapter);
}
/**
* Obtains the contact list for the currently selected account.
*
* @return A cursor for for accessing the contact list.
*/
private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
(mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
/**
* Launches the ContactAdder activity to add a new contact to the selected account.
*/
protected void launchContactAdder() {
Intent i = new Intent(this,Class1.class);
startActivity(i);
}
}
2 ответа
Основываясь на моем опыте работы со списком контактов, вам нужно разработать свой запрос на основе того, что доступно. В 1.6 была простота одной таблицы со всей информацией. Тем не мение; с рассветом 2.0 они представили две таблицы. Где вы получаете идентификатор из одной таблицы и запрос на основе этого идентификатора, чтобы найти номер телефона. Чтобы проиллюстрировать это, вот пример кода, который работал для меня, хотя у меня есть некоторые незначительные проблемы, когда некоторые контакты не возвращают номер телефона 2/70, хотя у всех 70 пользователей есть ID и номер телефона. Я надеюсь, что это помогает:
// look up contact via name
String name = contacts.getItem(arg1);
Uri lookup = Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_FILTER_URI, name);
// look up id
Cursor c = getContentResolver().query(lookup, null, null, null, null);
String id = null;
int id_index = c.getColumnIndexOrThrow(ContactsContract.Contacts._ID);
if (c.moveToFirst())
id = c.getString(id_index);
else
Toast.makeText(getApplicationContext(), "Friend not found",
Toast.LENGTH_SHORT).show();
c.close();
// use id if not null, to find contact's phone number / display name
if (id != null) {
String where = ContactsContract.Data.CONTACT_ID + " = " + id
+ " AND " + ContactsContract.Data.MIMETYPE + " = '"
+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
+ "'";
c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
null, where, null, null);
c.moveToFirst();
int iname = c
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME);
int iphone = c
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
if (c.getCount() > 0) {
_friend.setName(c.getString(iname));
_friend.setPhone(c.getString(iphone));
Если у вас есть дополнительные вопросы, пожалуйста, не стесняйтесь спрашивать, я сделаю все возможное, чтобы ответить на них. Что я могу сказать без журнала cat, так это то, что вы пытаетесь найти в номере телефона правильную структуру таблицы для запроса. Если вы попытаетесь получить доступ к информации из запроса, который вернул 0 строк, вы получите исключение. Пожалуйста, прочитайте эту ошибку и покажите ее.
Вы должны использовать все адреса электронной почты, номера телефонов, веб-адреса и т. Д.
Пример:
Linkify.addLinks (textView, Linkify.WEB_URLS);
- Параметр: текстовое представление, которое вы добавляете строку
- Какую вещь вы хотите отслеживать электронную почту, телефон или Интернет
Для более подробной информации: http://developer.android.com/reference/android/text/util/Linkify.html
Примечание: для этого вам не нужно реализовывать какие-либо onClick и т. Д. Linkif автоматически управляет им.