和某牛讨论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