首页 > 代码库 > 关于Android下Delphi XE7获取通讯录的问题
关于Android下Delphi XE7获取通讯录的问题
在网上感到一篇高人写的代码XE6下获取通讯录的,但是弄到XE7不能用了,原因是TJavaObjectArray变成泛型了,弄了半天没有搞懂TJavaObjectArray怎么使用,老是出错,不过研究了下Androidapi.JNI.Provider下的源代码,发现操作Android数据库的几个函数,坐下记录
下面是我修改的可以获取到数据库用户的代码:
usesFMX.Helpers.Android,Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText,FMX.Platform.Android, Androidapi.JNIBridge, Androidapi.JNI.Provider,Androidapi.Helpers;procedure QueryContact(AName: string; AList: TStrings);varcursorContactsPhone: 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.Create(1);////ShowMessage(IntToStr(projection.Length));//ShowMessage(JStringToString(TJContacts_PeopleColumns.JavaClass.DISPLAY_NAME));//Exit ;//////projection.Items[0] := TJContacts_PeopleColumns.JavaClass.DISPLAY_NAME;//Exit ;//selection := JStringToString(TJContacts_PeopleColumns.JavaClass.DISPLAY_NAME)+‘ LIKE "%‘ + AName + ‘%"‘;//end;//// Exit ;selection := JStringToString(TJContacts_PeopleColumns.JavaClass.DISPLAY_NAME)+‘ LIKE "%‘ + AName + ‘%"‘;//select projection from 联系人数据库 where selectioncursorContactsPhone := SharedActivity.getContentResolver.query(TJCommonDataKinds_Phone.JavaClass.CONTENT_URI,nil{projection {要查询的字段名,nil的全部},StringToJString(selection){Where条件},nil { 这里是Where语句的条件参数们,我上面图方便,写死在Where条件中了,没使用参数 } , nil);if AList <> nil thenwhile (cursorContactsPhone.moveToNext) dobegin//获取字段的ColumnIndexFieldIndex := cursorContactsPhone.getColumnIndex(TJContacts_PeopleColumns.JavaClass.DISPLAY_NAME);//读字段内容AList.Add(JStringToString(cursorContactsPhone.getString(FieldIndex)));end;cursorContactsPhone.close;end;procedure TForm1.btn1Click(Sender: TObject);vars: TStrings;begins := TStringList.Create;QueryContact(‘王‘, s); //查询姓王的人ShowMessage(s.Text);s.Free;end;
另外发现:
function update(uri: Jnet_Uri; values: JContentValues; where: JString; selectionArgs: TJavaObjectArray<JString>): Integer; cdecl; //修改数据库记录function delete(url: Jnet_Uri; where: JString; selectionArgs: TJavaObjectArray<JString>): Integer; cdecl;//删除数据库记录
这样是不是就可以对联系人,短信,电话记录等随意修改那? 待验证.........
关于Android下Delphi XE7获取通讯录的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。