Delphi读取Android设备联系人.DelphiXE6中编译通过

和某牛讨论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有权限,加上读取联系人的权限

此条目发表在Delphi, 未分类分类目录,贴了, , , 标签。将固定链接加入收藏夹。

Delphi读取Android设备联系人.DelphiXE6中编译通过》有 3 条评论

  1. 匿名说:

    大牛出个论文不容易啊,顶

  2. Pingback引用通告: Delphi读取Android设备联系人 - 印象派

zg进行回复 取消回复

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

你必须启用JavaScript