和某牛讨论Delphi读Android联系人.写了如下代码
uses FMX . Helpers . Android, Androidapi . JNI . JavaTypes,
Androidapi . JNI . GraphicsContentViewText, FMX . Platform . Android,
Androidapi . JNIBridge, Androidapi . JNI . Provider, Androidapi . Helpers; procedure
QueryContact(AName: string ; AList: TStrings); var cursorContactsPhone: JCursor; selection:
string ; projection: TJavaObjectArray<JString>; FieldIndex:
Integer ; begin if
AList <> nil
then AList . Clear; projection :=
nil ; if
AName . Length >
0
then begin projection := TJavaObjectArray<JString>.Create( 1 ); projection . Items[ 0 ]
:= TJContacts_PeopleColumns . JavaClass . DISPLAY_NAME; selection := JStringToString(TJContacts_PeopleColumns . JavaClass . DISPLAY_NAME)+ '
LIKE "%' + AName + '%"' ; end ; //select projection from 联系人数据库 where selection cursorContactsPhone := SharedActivity . getContentResolver . query (TJCommonDataKinds_Phone . JavaClass . CONTENT_URI, projection
{要查询的字段名,nil的全部} , StringToJString(selection) {Where条件} , nil
{ 这里是Where语句的条件参数们,我上面图方便,写死在Where条件中了,没使用参数 }
, nil ); if
AList <> nil
then while
(cursorContactsPhone . moveToNext)
do begin //获取字段的ColumnIndex FieldIndex := cursorContactsPhone . getColumnIndex (TJContacts_PeopleColumns . JavaClass . DISPLAY_NAME); //读字段内容 AList . Add(JStringToString(cursorContactsPhone . getString(FieldIndex))); end ; cursorContactsPhone . close; end ; procedure
TForm2 . Button1Click(Sender: TObject); var s: TStrings; begin s := TStringList . Create; QueryContact( '王' , s);
//查询姓王的人 ShowMessage(s . Text); s . Free; end ; |
我是个懒人,不想再深究了.
对了,别忘了Android有权限,加上读取联系人的权限
转自:http://www.raysoftware.cn/?p=501