获取联系方式的正确位置:android5
Correct place to fetch contact details : android5
我可以获取联系方式
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG).show();
Log.d(name, phoneNumber);
}
我想知道的是这段代码应该写在哪里?
我已经在 MainActivity (onCreate) 函数中编写了它,但这会导致每次我打开应用程序时都获取联系人,这使得应用程序加载速度变慢。
我只想在安装时获取联系人详细信息(这样就一次 activity),稍后我只需要新添加的联系人详细信息,而不是获取整个联系人列表。
就像添加新联系人时,System Broadcaster 向所有具有 "android.permission.READ_CONTACTS" 权限的应用程序广播新添加的联系人详细信息,然后我的应用程序中的侦听器获取此数据。
我是 android 的新手,所以无法使用正确的术语。
您必须 运行 在单独的线程中使用 AsyncTask,如下所示:
public class ContactLoader extends AsyncTask<Void, Void, Cursor> {
Context context;
public ContactLoader(Context context){
this.context= context;
}
@Override
protected Cursor doInBackground(Void... voids) {
return context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
}
@Override
protected void onPostExecute(Cursor phones) {
while (phones.moveToNext()) {
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Toast.makeText(context, name, Toast.LENGTH_LONG).show();
Log.d(name, phoneNumber);
}
}}
并在您的 activity 中像这样使用它
new ContactLoader(getApplicationContext()).execute();
我可以获取联系方式
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG).show();
Log.d(name, phoneNumber);
}
我想知道的是这段代码应该写在哪里?
我已经在 MainActivity (onCreate) 函数中编写了它,但这会导致每次我打开应用程序时都获取联系人,这使得应用程序加载速度变慢。
我只想在安装时获取联系人详细信息(这样就一次 activity),稍后我只需要新添加的联系人详细信息,而不是获取整个联系人列表。
就像添加新联系人时,System Broadcaster 向所有具有 "android.permission.READ_CONTACTS" 权限的应用程序广播新添加的联系人详细信息,然后我的应用程序中的侦听器获取此数据。
我是 android 的新手,所以无法使用正确的术语。
您必须 运行 在单独的线程中使用 AsyncTask,如下所示:
public class ContactLoader extends AsyncTask<Void, Void, Cursor> {
Context context;
public ContactLoader(Context context){
this.context= context;
}
@Override
protected Cursor doInBackground(Void... voids) {
return context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
}
@Override
protected void onPostExecute(Cursor phones) {
while (phones.moveToNext()) {
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Toast.makeText(context, name, Toast.LENGTH_LONG).show();
Log.d(name, phoneNumber);
}
}}
并在您的 activity 中像这样使用它
new ContactLoader(getApplicationContext()).execute();