Android开发根据号码phoneNumber查询联系人
是不是想到内容提供者,今天 我用到了,我就记一下吧。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String contactName = getContactName("02120360600");
Log.d(TAG, "contactName == > " + contactName);
}
public String getContactName(final String phoneNumber) {
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Log.d(TAG, "uri = = > " + uri);
String[] projection = new String[]{"contact_id"};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
String[] columnNames = cursor.getColumnNames();
while (cursor.moveToNext()) {
for (String columnName : columnNames) {
Log.d(TAG, columnName + " == > " + cursor.getString(cursor.getColumnIndex(columnName)));
}
}
}
return "";
}
}
这是我的测试代码。
我的需求是白名单机制,如果是在通讯录里的,那么就不拦截电话,如果不在,那么就拦截电话。
如果你要知道其他字段怎么办呢?
可以看常量,但是版本可能对不上你的数据库。
最安全的办法是遍历出来看看。
把projection传null,也就是会查出所有的字段。
换成这种写法:
if (cursor != null) {
String[] columnNames = cursor.getColumnNames();
while (cursor.moveToNext()) {
for (String columnName : columnNames) {
Log.d(TAG, columnName + " == > "
+ cursor.getString(cursor.getColumnIndex(columnName)));
}
}
}
就这样子吧,小记,方便大家复制粘贴。