• 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 11 - Phone Events và tin nhắn SMS

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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

[Basic4Android] Bài 11 - Phone Events và tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 8:06 am

Các Events đặc biệt của Phone Class

Giống như hệ điều hành Windows, mỗi khi có các sự kiện xảy ra trên hệ thống như: có tin nhắn đến, tin nhắn đã gửi đi, có cuộc gọi đến... Android sẽ gửi một messages thông báo có sự thay đổi.

Đối tượng PhoneEvents cho phép bạn bẫy các đối tượng này và xử lý nó.

Để sử dụng PhoneEvents, trước hết phải khai báo PhoneEvents trong biến toàn cục

  1. Sub Globals
  2.      Dim PE As PhoneEvents
  3. End Sub


Gọi PhoneEvents khi chương trình khởi động

  1. Sub Activity_Create(FirstTime As Boolean)
  2.      PE.Initialize("PE")
  3. End Sub


Và cuối cùng là bẫy các sự kiện

  1. Sub PE_SmsDelivered (PhoneNumber As String, Intent As Intent)
  2.     Msgbox("Tin nhắn đã đến đến số" & PhoneNumber,"Thông báo")   
  3. End Sub
  4.  


:) 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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: [Basic4Android] Bài 11 - Tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 8:24 am

Các Events trong lớp thư viện Phone

- AirplaneModeChanged (State As Boolean, Intent As Intent) : Bẫy chế độ Máy bay

- BatteryChanged (Level As Int, Scale As Int, Plugged As Boolean, Intent As Intent) : Bẫy trạng thái của Pin.

Level - Mức độ hiện tại
Scale - Mức độ đối ta
Plugged - Thiết bị có cắm nguồn sạt hay không

- ConnectivityChanged (NetworkType As String, State As String, Intent As Intent) : Thông báo trạng thái kết nối, bao gồm cả WIFI và MOBILE

NetworkType - Kiểu kết nối WIFI hoặc MOBILE.
State - Trạng thái kết nối: CONNECTING, CONNECTED, SUSPENDED, DISCONNECTING, DISCONNECTED, UNKNOWN.

- DeviceStorageLow - Thiết bị trong tình trạng bộ nhớ thấp

- DeviceStorageOk (Intent As Intent) - Thiết bị thoát khỏi tình trạng thiếu bộ nhớ

- PackageAdded (Package As String, Intent As Intent) : Một ứng dụng được cài đặt

- PackageRemoved (Package As String, Intent As Intent) : Một ứng dụng bị Remove

- PhoneStateChanged (State As String, IncomingNumber As String, Intent As Intent) : Tình trạng của điện thoại

State - Là một trong ba giá trị: IDLE, OFFHOOK, RINGING.
+ OFFHOOK : Có nghĩa là có một cuộc gọi hay điện thoại đang gọi đi.
+ RINGING : Điện thoại đang đổ chuông.

- ScreenOff (Intent As Intent) : Màn hình tạm nghỉ

- ScreenOn (Intent As Intent) : Màn hình sáng

- SmsDelivered (PhoneNumber As String, Intent As Intent) : Một tin nhắn đã gửi tới máy người nhận

- SmsSentStatus (Success As Boolean, ErrorMessage As String, PhoneNumber As String, Intent As Intent) : Trạng thái của một SMS vừa gửi

- Shutdown (Intent As Intent) : Điện thoại tắt nguồn

- TextToSpeechFinish (Intent As Intent) : Một sự kiện Text To Speech hoàn thành

- UserPresent (Intent As Intent) : Người dùng mở khóa màn hì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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: [Basic4Android] Bài 11 - Tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 8:29 am

Đối tượng tin nhắn SMS

Bài 11, tiếp tục với các đối tượng SMS trong lớp thư viện Phone của Basic4Android ([url][url]http://www.basic4ppc.com/android/help/phone.html[/url][/url]).

Có tổng cộng ba đối tượng liên quan đến tin nhắn trong lớp thư viện Phone, gồm: PhoneSms, SmsMessages và SmsInterceptor.

Dưới đây là code gửi tin nhắn đến 1 số điện thoại bằng đối tượng PhoneSms, và bẫy sự kiện gửi tin bằng PhoneEvents.

[vb]#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region

#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region

Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.

End Sub

Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim SendSMS As PhoneSms
Dim PE As PhoneEvents

Dim Label1 As Label
Dim EditText1 As EditText
Dim EditText2 As EditText
Dim Button1 As Button

End Sub

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("main")
PE.Initialize("PE")
'EditText2.Wrap
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
SendSMS.Send(EditText1.Text,EditText2.Text)
End Sub

Sub PE_SmsDelivered (PhoneNumber As String, Intent As Intent)
Msgbox("Tin nhắn đã đến đến số" & EditText1.Text,"Thông báo")
End Sub

Sub PE_SmsSentStatus (Success As Boolean, ErrorMessage As String, PhoneNumber As String, Intent As Intent)
If Success = True Then
Msgbox("Tin nhắn đã được gửi đến số" & EditText1.Text,"Thông báo")
Else
Msgbox("Tin nhắn đã được gửi đến số" & EditText1.Text & " bị thất bại","Thông báo")
End If
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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: [Basic4Android] Bài 11 - Tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 8:32 am

Đối tượng Phone SMS

Trong phiên bản 2.52, đối tượng Phone SMS chỉ có một hàm chức năng gửi tin nhắn đi.

Send (PhoneNumber As String, Text As String)
:) 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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: [Basic4Android] Bài 11 - Tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 8:39 am

Quản lý dữ liệu tin nhắn SMS

Thông qua đối tượng SmsMessages, Basic4Android cho ta quản lý các tin nhắn được lưu trữ trong bộ nhớ

1- Khai báo một biến SmsMessages

Dim SmsMessages1 As SmsMessages

2- Lấy tất cả tin nhắn trong vòng 1 tuần gần đây qua thành phần GetAllSince

  1. Dim List1 As List
  2. List1 = SmsMessages1.GetAllSince(DateTime.Add(DateTime.Now, 0, 0, -7))
  3.     For i = 0 To List1.Size - 1
  4.         Dim Sms1 As Sms
  5.         Sms1 = List1.Get(i)
  6.         ListView1.AddTwoLines(Sms1.Address, DateTime.Date(Sms1.Date))      
  7.     Next
  8.  

3- Ta cũng có thể lọc riêng danh sách các tinh nhắn đến, đi...

  1. Dim Sended As List
  2.     ' In danh sách tin nhắn trong vòng 1 tuần gần đây
  3.     Sended = SmsMessages1.GetByType(SmsMessages1.TYPE_SENT)
  4.    
  5.     For i = 0 To Sended.Size - 1
  6.         If i <= 9 Then
  7.             Dim Sms1 As Sms
  8.             Sms1 = Sended.Get(i)
  9.                
  10.             ListView1.AddTwoLines(Sms1.Address,  DateTime.Date(Sms1.Date))
  11.         End If
  12.     Next


4- Cuối cùng là toàn bộ code cho ví dụ


  1. #Region  Project Attributes
  2.     #ApplicationLabel: B4A Example
  3.     #VersionCode: 1
  4.     #VersionName:
  5.     'SupportedOrientations possible values: unspecified, landscape or portrait.
  6.     #SupportedOrientations: unspecified
  7.     #CanInstallToExternalStorage: False
  8. #End Region
  9.  
  10. #Region  Activity Attributes
  11.     #FullScreen: False
  12.     #IncludeTitle: True
  13. #End Region
  14.  
  15. Sub Process_Globals
  16.     'These global variables will be declared once when the application starts.
  17.     'These variables can be accessed from all modules.
  18.  
  19. End Sub
  20.  
  21. Sub Globals
  22.     'These global variables will be redeclared each time the activity is created.
  23.     'These variables can only be accessed from this module.
  24.        
  25.     Dim Label1 As Label
  26.    
  27.     Dim SmsMessages1 As SmsMessages
  28.     Dim ListView1 As ListView
  29.     Dim Button1 As Button
  30. End Sub
  31.  
  32. Sub Activity_Create(FirstTime As Boolean)
  33.     'Do not forget to load the layout file created with the visual designer. For example:
  34.     Activity.LoadLayout("main")
  35.    
  36.     Dim List1 As List
  37.     ' In danh sách tin nhắn trong vòng 1 tuần gần đây
  38.     List1 = SmsMessages1.GetAllSince(DateTime.Add(DateTime.Now, 0, 0, -7))
  39.     For i = 0 To List1.Size - 1
  40.         Dim Sms1 As Sms
  41.         Sms1 = List1.Get(i)
  42.         ListView1.AddTwoLines(Sms1.Address, DateTime.Date(Sms1.Date))
  43.        
  44.     Next
  45.  
  46. End Sub
  47.  
  48. Sub Activity_Resume
  49.  
  50. End Sub
  51.  
  52. Sub Activity_Pause (UserClosed As Boolean)
  53.  
  54. End Sub
  55.  
  56.  
  57.  
  58. Sub Button1_Click
  59.     Dim Sended As List
  60.     ' In danh sách tin nhắn trong vòng 1 tuần gần đây
  61.     Sended = SmsMessages1.GetByType(SmsMessages1.TYPE_SENT)
  62.    
  63.     For i = 0 To Sended.Size - 1
  64.         If i <= 9 Then
  65.             Dim Sms1 As Sms
  66.             Sms1 = Sended.Get(i)
  67.                
  68.             ListView1.AddTwoLines(Sms1.Address,  DateTime.Date(Sms1.Date))
  69.         End If
  70.     Next
  71.    
  72. End Sub


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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: [Basic4Android] Bài 11 - Tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 8:48 am

Các thành phần của đối tượng SMS Message

- Address As String : Số điện thoại của tin nhắn liên quan

- Body As String : Nội dung tin nhắn

- Date As Long : Thời gian có liên quan

- Id As Int : ID của tin nhắn

- PersonId As Int : ID của người gửi tin nhắn trong danh bạ Contacts.GetById; nếu số điện thoại gửi tới chưa có trong danh sách thì trả về -1

- Read As Boolean : Xác định tin nhắn có được đọc hay chưa

- ThreadId As Int

- Type As Int : Kiểu tin nhắn được lưu trong bộ nhớ, bao gồm:

MESSAGE_TYPE_ALL =0;
MESSAGE_TYPE_INBOX =1;
MESSAGE_TYPE_SENT =2;
MESSAGE_TYPE_DRAFT =3;
MESSAGE_TYPE_OUTBOX =4;
MESSAGE_TYPE_FAILED =5;// for failed outgoing messages
MESSAGE_TYPE_QUEUED =6;// for messages to send later
:) 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: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: [Basic4Android] Bài 11 - Tin nhắn SMS

Gửi bàigửi bởi tummosoft » CN 27/07/2014 9:05 am

Đối tượng SmsInterceptor

SmsInterceptor giúp bạn đón lõng các tin nhắn đến và xử lý nó.

- Initialize (EventName As String) : Khởi tạo biến bắt đầu lắng nghe các tin nhắn đến

- Initialize2 (EventName As String, Priority As Int)

Khởi tạo đối tượng và bắt đầu lắng nghe các tin nhắn mới.
Đặt tham số để đón tin nhắn sớm hơn các chương trình khác.

Ex: SI.Initialize2("SI", 999)

- ListenToOutgoingMessages

Lắng nghe tin nhắn gửi đi.
Bạn có thể sử dụng SmsMessages.GetByMessageId để lấy ID của tin nhắn được gửi

- StopListening : Hủy việc lắng nghe tin nhắn

* Code ví dụ:

  1. Sub Process_Globals
  2.  
  3. End Sub
  4.  
  5. Sub Globals
  6.  
  7. End Sub
  8.  
  9. Sub Activity_Create(FirstTime As Boolean)
  10. DemarreSMS
  11. End Sub
  12.  
  13. Sub Activity_Resume
  14.  
  15. End Sub
  16.  
  17. Sub Activity_Pause (UserClosed As Boolean)
  18.  
  19. End Sub
  20.  
  21. Sub MessageReceived (From As String, Body As String) As Boolean
  22. Msgbox("From " & From & " Text " & Body, "Title")
  23. End Sub
  24. Sub DemarreSMS
  25. If SMSService.ServiceRunning = False Then
  26. StartService(SMSService)
  27. SMSService.ServiceRunning = True
  28. ToastMessageShow("Running in background", True)
  29. End If
  30. End Sub
  31.  
  32.  
  33. 'Service
  34. Sub Service_Create
  35. SI.Initialize2("SI", 2147483647)
  36. Log("Service initialized")
  37. End Sub
  38.  
  39. Sub Service_Start (StartingIntent As Intent)
  40. Log("Service Started")
  41. End Sub
  42.  
  43. Sub Service_Destroy
  44. SI.StopListening()
  45. Service.StopForeground(1)
  46. End Sub
  47.  
  48. Sub SI_MessageReceived (From As String, Body As String) As Boolean
  49. Log("Message Received From: " & From)
  50. ToastMessageShow(From, True)
  51. Dim Writer As TextWriter
  52. Log("Toast shown")
  53. If From ="+xxxxxxxxxxxxxxx" Then
  54. Writer.Initialize(File.OpenOutput(File.DirDefaultE xternal, "Body.txt", True))
  55. Writer.WriteLine(Body)
  56. Writer.Close
  57. End If
  58. Return True
:) 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