• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Basic4Android] Bài 17 - Thao tác danh bạ (ContentResolver)

Lập trình cho Android Phone

Điều hành viên: tummosoft

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

[Basic4Android] Bài 17 - Thao tác danh bạ (ContentResolver)

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 3:36 pm

Trong các bài trước, qua lớp thư viện Phone ta có thể cho hiển thị danh bạ điện thoại lên một Listview, tuy nhiên bạn không thể thao tác xóa, cập nhật, thêm với các contacts đó.

Bằng cách sử dụng lớp thư viện ContentResolver, ta có thể tùy ý sử dụng mọi thao tác cho phép các contacts.

* Lưu ý: Phải xin cấp quyền cho tập tập tin mainfest

Thêm 2 dòng sau vào [b]Manifest editor[/b]

AddPermission("android.permission.READ_CONTACTS")
AddPermission("android.permission.WRITE_CONTACTS")


[vb]Sub Process_Globals
Private PeopleProjection() As String = Array As String("times_contacted", "last_time_contacted", _
"display_name", "has_phone_number", "starred", "_id", "photo_id")
Private cr As ContentResolver
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
cr.Initialize("cr")
End If
UpdateStarred("John", True)
End Sub
'Gets all contacts asynchronously and prints them.
Sub GetAllContacts
Dim u As Uri
u.Parse("content://com.android.contacts/contacts")
cr.QueryAsync(u, PeopleProjection, "", Null, "")
End Sub

Sub CR_QueryCompleted (Success As Boolean, Crsr As Cursor)
If Success = False Then
Log(LastException)
Else
For i = 0 To Crsr.RowCount - 1
Crsr.Position = i
Log(Crsr.GetString("display_name"))
Next
Crsr.Close
End If
End Sub
'Update the starred state of the given contact. Note that we use LIKE in the selection.
Sub UpdateStarred (Name As String, Starred As Boolean)
Dim u As Uri
u.Parse("content://com.android.contacts/contacts")
Dim values As ContentValues
values.Initialize
values.PutBoolean("starred", Starred)
Log(cr.Update(u, values, "display_name LIKE ?", Array As String("%" & Name & "%")))
End Sub

'Deletes the contact with the given name.
Sub DeleteContactByName(Name As String)
Dim u As Uri
u.Parse("content://com.android.contacts/data")
Dim crsr As Cursor = cr.Query(u, Array As String("_id", "raw_contact_id"), _
"mimetype = ? AND data1 = ?", Array As String("vnd.android.cursor.item/name", Name), "")
For i = 0 To crsr.RowCount - 1
crsr.Position = i
Dim rawId As Long = crsr.GetLong("raw_contact_id")
Log(cr.Delete(u, "raw_contact_id = ?", Array As String(rawId)))
Dim u2 As Uri
u2.Parse("content://com.android.contacts/raw_contacts")
Log(cr.Delete(u2, "_id = ?", Array As String(rawId)))
Next
crsr.Close
End Sub

'Inserts a new contact.
Sub InsertContact(Name As String, Phone As String)
Dim values As ContentValues
Dim uri1 As Uri
uri1.Parse("content://com.android.contacts/raw_contacts")
values.Initialize
values.PutNull("account_name")
values.PutNull("account_type")
Dim rawUri As Uri = cr.Insert(uri1, values)
Dim rawContactId As Long = rawUri.ParseId

uri1.Parse("content://com.android.contacts/data")
values.Initialize
values.PutLong("raw_contact_id", rawContactId)
values.PutString("mimetype", "vnd.android.cursor.item/phone_v2")
values.PutString("data1", Phone)
cr.Insert(uri1, values)

values.Initialize
values.PutLong("raw_contact_id", rawContactId)
values.PutString("mimetype", "vnd.android.cursor.item/name")
values.PutString("data1", Name)
cr.Insert(uri1, values)
End Sub[/vb]

Hình ảnh


:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 17 - Thao tác danh bạ (ContentResolv

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 3:39 pm

Đọc và ghi Note

  1. Sub UpdateNote(Name As String, Note As String)
  2.    Dim u As Uri
  3.    u.Parse("content://com.android.contacts/contacts")
  4.    Dim crsr As Cursor = cr.Query(u, Array As String("_id"), "display_name = ?", Array As String(name), "")
  5.    If crsr.RowCount = 0 Then
  6.       Log("No match found: " & Name)
  7.    Else
  8.       crsr.Position = 0
  9.       Dim id As Long = crsr.GetLong("_id")
  10.       Dim cv As ContentValues
  11.       cv.Initialize
  12.       cv.PutString("data1", Note)
  13.       Dim dataUri As Uri
  14.       dataUri.Parse("content://com.android.contacts/data")
  15.       Log(cr.Update(dataUri, cv, "mimetype = 'vnd.android.cursor.item/note' AND contact_id = ?", _
  16.          Array As String(id)))
  17.    End If
  18.    crsr.Close
  19. End Sub


------------------------------------------
Code:
-----------------------------------------

  1. Sub PrintAggregatedDataFields(Name As String, Exact As Boolean)
  2.    Dim u As Uri
  3.    u.Parse("content://com.android.contacts/contacts")
  4.    Dim selection As String
  5.    selection = "display_name "
  6.    If Exact Then
  7.       selection = selection & "= ?"
  8.    Else
  9.       selection = selection & "LIKE ?"
  10.       Name = "%" & Name & "%"
  11.    End If
  12.    Dim crsr As Cursor = cr.Query(u, Null, selection, Array As String(Name), "")
  13.    If crsr.RowCount = 0 Then
  14.       Log("No match found.")
  15.    End If
  16.    For i = 0 To crsr.RowCount - 1
  17.       crsr.Position = i
  18.       LogColor(crsr.GetString("display_name"), Colors.Blue)
  19.       For c = 0 To crsr.ColumnCount - 1
  20.          Log(crsr.GetColumnName(c) & ": " & crsr.GetString2(c))
  21.       Next
  22.       Dim id As Long = crsr.GetLong("_id")
  23.      
  24.       'print phones
  25.      Dim phonesUri As Uri
  26.       phonesUri.Parse("content://com.android.contacts/data/phones")
  27.       Dim phones As Cursor = cr.Query(phonesUri, Array As String("data1", "data2"), _
  28.          "contact_id = ?", Array As String(id), "")
  29.       For p = 0 To phones.RowCount - 1
  30.          phones.Position = p
  31.          Log("Phone: " & phones.GetString("data1") & ", type = " & phones.GetInt("data2"))
  32.       Next
  33.       phones.Close
  34.      
  35.       'print emails
  36.      Dim emailsUri As Uri
  37.       emailsUri.Parse("content://com.android.contacts/data/emails")
  38.       Dim emails As Cursor = cr.Query(emailsUri, Array As String("data1"), _
  39.          "contact_id = ?", Array As String(id), "")
  40.       For p = 0 To emails.RowCount - 1
  41.          emails.Position = p
  42.          Log("Email: " & emails.GetString("data1"))
  43.       Next
  44.       emails.Close
  45.      
  46.       'print data fields
  47.      Dim dataUri As Uri
  48.       dataUri.Parse("content://com.android.contacts/data")
  49.       Dim data As Cursor = cr.Query(dataUri, Array As String("mimetype", "data1"), _
  50.          "contact_id = ?", Array As String(id), "")
  51.       For d = 0 To data.RowCount - 1
  52.          data.Position = d
  53.          Log(data.GetString("mimetype") & "=" & data.GetString("data1"))
  54.       Next
  55.       data.Close
  56.    Next
  57.    crsr.Close
  58. End Sub
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 17 - Thao tác danh bạ (ContentResolv

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 4:05 pm

Đọc danh ba trên SIM

  1. Sub ReadSimContacts
  2.    Dim simUri As Uri
  3.    simUri.Parse("content://icc/adn")
  4.    Dim crsr As Cursor = cr.Query(simUri, Null, "", Null, "")
  5.    For i = 0 To crsr.RowCount - 1
  6.       crsr.Position = i
  7.       Log(crsr.GetString("name"))
  8.       Log(crsr.GetString("number"))
  9.    Next
  10.    crsr.Close
  11. End Sub
:) Tummo Software :D
http://tummosoft.com


Quay về “Android”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách