• 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

[Chú ý] Thắc mắc về lập trình Basic4Android

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: 57 time
Liên hệ:

[Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Tư 10/09/2014 10:40 am

Bạn nào có thắc mắc hay yêu cầu gì về lập trình Basic4Android xin post câu hỏi tại đây để mọi người cùng nhau nghiên cứu trẳ lời.


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

Hình đại diện của người dùng
HaiVB6
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 375
Ngày tham gia: T.Hai 03/02/2014 10:23 pm
Đến từ: [Gia Đông] - [Thuận Thành] - [Bắc Ninh]
Has thanked: 5 time
Been thanked: 14 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi HaiVB6 » T.Tư 10/09/2014 5:46 pm

Có cách nào để khi đến đúng giờ mà mình cài thì nó sẽ tự động hiện lên thông báo kèm âm thanh không?

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 548
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tungblt » T.Năm 11/09/2014 11:13 am

ở Bài 28 - Kết nối MySQL Server viewtopic.php?f=70&t=29496 .
dùng thư viện mysql thì không kết nối được. còn dùng Remote Database Connector thì rất dễ lỗi (đính kèm).
Tập tin đính kèm
image.png
image.png (23.06 KiB) Đã xem 2622 lần
love

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Năm 11/09/2014 2:42 pm

HaiVB6 đã viết:Có cách nào để khi đến đúng giờ mà mình cài thì nó sẽ tự động hiện lên thông báo kèm âm thanh không?


- Để tạo 1 chương trình chạy ngầm, khi đến giờ nó play một file âm thanh, em phải dùng Module Service.

Ex: Ta tạo 1 Module Service với tên là "AlarmService"

  1. Sub Process_Globals
  2.     'These global variables will be declared once when the application starts.
  3.     'These variables can be accessed from all modules.
  4.     Dim mp As MediaPlayer     ' You need to declare mp as Mediaplayer
  5. End Sub
  6. Sub Service_Create
  7.  
  8. End Sub
  9.  
  10. Sub Service_Start
  11. mp.Initialize()  'Initialize Mediaplayer
  12. PlayAlarm
  13. ToastMessageShow("Hey!!!! Wake up!!!", True)
  14. End Sub
  15.  
  16. Sub Service_Destroy
  17.     StopService("")     'Stop this service
  18.     CancelScheduledService("")   'Cancel this service
  19. End Sub
  20.  
  21.  
  22. Sub PlayAlarm
  23. mp.Load(File.DirAssets, "sound.wav")
  24. mp.Play
  25. End Sub


- Để Setup giờ hẹn, ví dụ tại Main Activity ta thiết lập 2 button setup và cancel.

+ Dùng hàm StartServiceAt để khởi động tiến trình chạy ngầm với thời gian xác định
StartServiceAt(AlarmService, (DateTime.Now+((h*60*60*1000)+(m*60*1000))), True)

+ Để kết thúc tiến trình một Module Service
StopService(AlarmService)
CancelScheduledService(AlarmService)


  1. Sub Process_Globals
  2.     'These global variables will be declared once when the application starts.
  3.     'These variables can be accessed from all modules.
  4. Dim alarmHours, alarmMinutes As Int
  5. Dim noti As Notification
  6. End Sub
  7.  
  8. Sub Globals
  9.     'These global variables will be redeclared each time the activity is created.
  10.     'These variables can only be accessed from this module.
  11.     Dim SetTime As Button
  12.     Dim CancelAlarm As Button
  13. End Sub
  14.  
  15. Sub Activity_Create(FirstTime As Boolean)
  16.     Activity.LoadLayout("main")
  17. End Sub
  18.  
  19. Sub Activity_Resume
  20.  
  21. End Sub
  22.  
  23. Sub Activity_Pause (UserClosed As Boolean)
  24.  
  25. End Sub
  26.  
  27.  
  28. Sub SetTime_Click
  29.     Dim td As TimeDialog
  30.     td.Hour = alarmHours
  31.     td.Minute = alarmMinutes
  32.     If td.Show("Select time to alarm", "", "Ok", "Cancel", "", Null) = DialogResponse.POSITIVE Then
  33.         alarmHours = td.Hour
  34.         alarmMinutes = td.Minute
  35.         Dim today As Long
  36.         today = DateTime.DateParse(DateTime.Date(DateTime.Now)) 'Sets today at 12:00 AM
  37.        alarm = today + td.Hour * DateTime.TicksPerHour + td.Minute * DateTime.TicksPerMinute
  38.         If alarm < DateTime.Now Then alarm = DateTime.Add(alarm, 0, 0, 1)
  39.         Log(DateTime.Date(alarm) & " " & DateTime.Time(alarm)) 'check the logs to see the set date and time
  40.        'Calculate time to alarm
  41.        Dim h, m As Int
  42.         h = Floor((alarm - DateTime.Now) / DateTime.TicksPerHour)
  43.         m = ((alarm - DateTime.Now) - h * DateTime.TicksPerHour) / DateTime.TicksPerMinute
  44.        
  45.         ToastMessageShow("Alarm will start after: " & NumberFormat(h, 2, 0) & " hour(s) and " & NumberFormat(m, 2, 0) & " minute(s)", True)
  46.         StartServiceAt(AlarmService, (DateTime.Now+((h*60*60*1000)+(m*60*1000))), True)
  47.                    ' Schedule AlarmService will start by add time to DateTime.Now (note that Android use millisecond)
  48.        
  49.         noti.Initialize
  50.         noti.Light = False
  51.         noti.Vibrate = False
  52.         noti.OnGoingEvent = True
  53.         noti.Sound = False
  54.         noti.Icon = "icon"
  55.         noti.SetInfo("Alarm", "will start at " & DateTime.Date(alarm) & " " & DateTime.Time(alarm), "")
  56.         noti.Notify(1)
  57.     End If
  58.  
  59. End Sub
  60.  
  61. Sub CancelAlarm_Click
  62.         noti.Cancel(1)
  63.         StopService(AlarmService)
  64.         CancelScheduledService(AlarmService)
  65. End Sub
Tập tin đính kèm
simple_alarm.zip
Tập tin đính kèm ví dụ
(235.76 KiB) Đã tải 212 lần
:) 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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Năm 11/09/2014 2:51 pm

tungblt đã viết:ở Bài 28 - Kết nối MySQL Server viewtopic.php?f=70&t=29496 .
dùng thư viện mysql thì không kết nối được. còn dùng Remote Database Connector thì rất dễ lỗi (đính kèm).


Bên Basic4Android nói đây là lỗi liên quan đến việc xử lý của Response.GetString khi trả về giá trị Null

Bạn có thể khắc phục lỗi này bằng cách bẫy lỗi của nó như cách bên dưới

  1. Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
  2.    countWorking = countWorking - 1
  3.    finishTasks = finishTasks + 1
  4.    HandleError(TaskId, Reason)
  5.    If Response <> Null Then
  6.       Log(Response.GetString("UTF8"))
  7.       Response.Release
  8.    End If
  9.    ProcessNextTask
  10. End Sub
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
HaiVB6
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 375
Ngày tham gia: T.Hai 03/02/2014 10:23 pm
Đến từ: [Gia Đông] - [Thuận Thành] - [Bắc Ninh]
Has thanked: 5 time
Been thanked: 14 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi HaiVB6 » T.Năm 11/09/2014 2:54 pm

Cảm ơn bạn Tummosoft nhé! :)

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Năm 11/09/2014 3:14 pm

Thư viện MySQL như mình hướng dẫn trong bài trên sử dụng jdbc driver

Trước hết, bạn test code không thành công có lẽ do chưa tải về jdbc driver: http://dev.mysql.com/get/Downloads/Conn ... mysql.com/

Sau khi giải nén, chép file mysql-connector-java-5.1.22-bin.jar vào thư viện Basic4Android.

Thêm quyền vào tập tin Manifest

AddPermission("android.permission.INTERNET")
AddPermission("android.permission.ACCESS_NETWORK_S TATE")​


* Lưu ý: Do user name và password truy cập MySQL nằm trong App nên cách này không được khuyến khích sử dụng.
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 548
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tungblt » T.Năm 11/09/2014 7:00 pm

làm sao để đổi tên app .. cái nào cũg là B4A ..
Tập tin đính kèm
2014-09-11_18-59-17.png
2014-09-11_18-59-17.png (81.95 KiB) Đã xem 2614 lần
love

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Sáu 12/09/2014 7:51 am

Tại activity main, trong nhóm attributes ở đầu trang chổ thẻ application label bạn đổi tên nhãn tại chổ nào có dòng B4A....

Tiếp theo, đặt tên cho project. Vào menu Project, chọn Package Name, và đổi tên của ứng dụng, tên của gói...

Chú ý: Tên của gói App phải đúng theo chuẩn của Android -> com.mycompany.myapp
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 548
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tungblt » T.Sáu 12/09/2014 9:21 am

1/ Được rồi :D , cảm ơn bạn
2/ Bây giờ mình có button Exit nhưng không biết phải code như thế nào :(
3/
  1. Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
  2.        Log("hc_ResponseError Response = " & Response.GetString("UTF8") & _
  3.       ", StatusCode = " & StatusCode & ", TaskId = " & TaskId)
  4.         If Response <> Null Then
  5.                 Log(Response.GetString("UTF8"))
  6.                 Response.Release
  7.         End If
  8.         ProgressDialogHide
  9. End Sub

mình cũng bẫy lỗi nhưng vẫn hiện bạn à
love

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Sáu 12/09/2014 1:56 pm

* Nút Close

Chu kỳ làm việc của một Activity như sau:

Sub Activity_Create(FirstTime As Boolean)

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


- > Khởi động Activity -> Gọi lại Activity -> Activity bị tạm ngưng

Trên hệ điều hành Android, chu kỳ làm việc (process) của nó không có thiết kế khái niệm "thoát khỏi ứng dụng" bằng một nút close như Windows.

Ví dụ chương trình của bạn có 2 Activity có tên là Main và Menu

Từ Main Activity, để mở Activity Menu ta dùng hàm "StartActivity(Menu)". Khi "Menu" được khởi động, Main sẽ được đặt vào trạng thái Activity_Pause và "Menu" sẽ đặt vào trạng thái Activity_Create.

Khi người dùng đang ở Activity Menu, họ nhấn nút BACK, Android sẽ tự động đưa người dùng trở về với Main Activity, lúc này Activity_Resume sẽ được gọi. Tại đây, nếu người dùng nhấn BACK thì chương trình thoát ra hỏi phiên làm việc, Activity_Pause sẽ được gọi nhưng App vẫn tồn tại ở chế độ nền.

Như vậy, một Activity_Pause được khởi động do bốn nguyên nhân:

1- Có một activity được kích hoạt
2- Do người dùng nhấn nút HOME trên điện thoại
3- Có một sư kiện xảy ra, ví dụ như xoay chuyển màn hình...
4 - Nút BACK được nhấn

- > Khi sự kiện 1 và 2 xảy ra, Android vẫn lưu các process trong bộ nhớ
-> Khi sự kiện 3 xảy ra, activity của process trước sẽ bị hũy và nó sẽ tái tạo lại một process mới thay thế.
-> Khi sự kiện 4 xảy ra, activity bị tạm dừng và hủy.

[b]Basic4Android có 2 phương thức dùng để kết thúc một process[/b]
- Activity.Finish : Kết thúc Activity hiện tại.
- ExitApplication : Kết thúc tất cả process. Nhưng nếu có một Module Service nào còn hoạt động, nó sẽ tái nạp các Module này.

Dựa theo chu kỳ làm việc này, ta làm một nút Close như sau:

- Tạo một biến ForceClose As Boolean tại process_globals

- Và tại Button dùng để Close ta code:

Sub CloseDown_Click
Main.forceClose = True
Activity.Finish
End Sub


- Tại Activity con ta code trong sub Resume

[color=#008000][color=#008000]Sub Activity_Resume
If Main.forceClose Then Activity.Finish
End Sub
[/color][/color]
- Tại Main Activity ta code trong sub Resume

Sub Activity_Resume
If forceClose Then ExitApplication
End Sub


-> Như vậy Application sẽ được đóng
:) 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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Sáu 12/09/2014 3:49 pm

Về phần MySQL bạn xem tại đây: viewtopic.php?f=70&t=29618
:) Tummo Software :D
http://tummosoft.com

phuoc_89
Thành viên chính thức
Thành viên chính thức
Bài viết: 11
Ngày tham gia: CN 11/07/2010 9:13 am
Has thanked: 2 time
Been thanked: 1 time

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi phuoc_89 » T.Tư 17/09/2014 4:09 pm

Mình đang mày mò về cách gửi thông điệp INTENT đến một ứng dụng khác và cách nhận các dử liệu Intent từ các ứng dụng khác gửi đến, mong mọi người chia sẻ soucer code hoặc cho ví dụ được không. Cám ơn mọi người trước.

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Năm 18/09/2014 12:44 pm

Bạn xem thêm một số ví dụ về sử dụng Intent tại đây: http://www.basic4ppc.com/android/wiki/index.php/Intent
:) Tummo Software :D
http://tummosoft.com

phuoc_89
Thành viên chính thức
Thành viên chính thức
Bài viết: 11
Ngày tham gia: CN 11/07/2010 9:13 am
Has thanked: 2 time
Been thanked: 1 time

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi phuoc_89 » T.Ba 23/09/2014 11:22 am

Bạn cho souce code được ko? mình chưa hiểu cách gửi Intent và bắt Intent giữa 2 ứng dung???

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Ba 23/09/2014 4:18 pm

Để truyền dữ liệu giữa 2 ứng dụng, trước hết bạn cần xác định tên gói của ứng dụng là gì?

* Sử dụng thư viện Phone để tìm tên gói ứng dụng

Dim pm As PackageManager
Dim Packages As List

Packages = pm.GetInstalledPackages
For i = 0 To Packages.Size - 1
Log(pm.GetApplicationIntent(Packages.Get(i)))
Next


Sau khi chạy code, truy cập vào biến log bạn sẽ thấy tên một số gói ứng dụng được cài đặt

Ví dụ:
  1. (Intent) Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.browser cmp=com.android.browser/.BrowserActivity }
  2. (Intent) Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.calculator2 cmp=com.android.calculator2/.Calculator }
  3. (Intent) Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.calendar cmp=com.android.calendar/.AllInOneActivity }


* Gửi dữ liệu đến ứng dụng

Dim Intent1 As Intent

- Intent1.Initialize(Intent1.ACTION_MAIN, "")

Có nhiều kiểu ACTION (xem thêm: http://developer.android.com/reference/ ... ntent.html), và để gửi data đến một ứng dụng khác sẽ dùng:
ACTION_EDIT - mở 1 Activity cho phép chỉnh sửa dữ liệu mà địa chỉ lấy từ data URI
ACTION_SEND - mở 1 Activity cho phép gửi dữ liệu lấy từ data URI, kiểu của dữ liệu xác định trong thuộc tính type
ACTION_SENDTO - mở 1 Activity cho phép gửi thông điệp tới địa chỉ lấy từ data URI

- Intent1.SetType(""text/plain"")

Xác định kiểu dữ liệu MIME để get hay set từ Intent (danh sách các kiểu: http://www.freeformatter.com/mime-types-list.html)

Ví dụ: text/plain; cũng có thể dùng text/* hoặc */*

- Intent1.AddCategory("android.intent.category.DEFAULT")

Thiết lập category

- Intent1.SetComponent("com.android.calculator2/.Calculator")

Thiết lập Activity chính của gói từ ví dụ trên, chẳng hạn trình duyêt có Component là: com.android.browser cmp=com.android.browser/.BrowserActivity

- Intent1.PutExtra("customExtra", "12")

Gửi dữ liệu đến ứng dụng thứ 2, với "customExtra" là tên của biến và "12" là giá trị

* Toàn bộ code:

  1. Intent1.Initialize(Intent1.ACTION_SEND, "")
  2. Intent1.SetType("*/*")
  3. Intent1.AddCategory("android.intent.category.DEFAULT")
  4. Intent1.SetComponent("com.android.calculator2/.Calculator")
  5. Intent1.PutExtra("query", "12")    
  6. StartActivity(Intent1)


* Hoặc ví dụ dùng gửi đoạn text lên Google Search

  1. Sub SetPackage(i As Intent, PackageName As String)
  2.     'couldn't find SetPackage-method among B4A's default intents. We therefore use Agraham's reflection-library to add it.
  3.  Dim rf As Reflector
  4.   rf.Target = i
  5.   rf.RunMethod2("setPackage", PackageName, "java.lang.String")
  6. End Sub
  7.  
  8. dim intent1 as intent
  9.             Intent1.Initialize("android.intent.action.SEARCH", "")
  10.             SetPackage(Intent1, "com.google.android.youtube")
  11.             Intent1.PutExtra("query", test)
  12.             StartActivity(Intent1)


* Một số ví dụ khác bạn có thể tham khảo thêm:
http://www.basic4ppc.com/android/forum/ ... ail.26211/
http://www.basic4ppc.com/android/forum/ ... ent.17001/
http://www.basic4ppc.com/android/forum/ ... ent.41261/
http://www.basic4ppc.com/android/forum/ ... ent.30976/
http://www.basic4ppc.com/android/forum/ ... app.26437/
:) 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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Ba 23/09/2014 4:36 pm

Mình quên nói, bạn cần phải thêm quyền Action và Category có liên quan vào tập tin Manifest nữa nhé:

VD: <category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.ACTION_INSERT" />

Communicating between apps
Depending on how you want to get data from the other app (via StartActivityForResult or via another intent), following might be useful to you.
Providing an intent for other apps to access you:
Write an intent filter in your manifest

- Action
- Category


Optionally create a permission for your intent so only allowed apps can access it

- <permission>
- <uses-permission>

Create an activity or service to deal with this intent.

- Activity for foreground action, service for background action.
- Use GetStartingIntent to get the intent and then Intent.GetExtras to get any extra information
- If using StartActivityOnResult then use SetActivityResult to return an intent and data (in extras)
- If using StartActivityOnResult you can get the CallingPackageName else you cannot
- Return with Activity.Finish
- Intents are not serializable, you cannot write them to file, only the extras


Access the Intent in another app:
Create the intent as specified by the other app, and use StartActivity or StartActivityForResult
Handle the immediate result if any in Activity_OnResult (or other event)
Handle an other intent that the app fires back to you. In this case do the same steps as above.

Intent Based Inter-App Communication
In this example we have two apps. - The Provider, that contains the data we need - The Requester, that will request the data via Intent
Step 1: Setup the Provider to be able to receive intents This can be done in two ways: 1. Explicitly setting the component, and making it visible by setting exported=true 2. Defining your own intent filter
We will do the second way since it is more structured.
We set up an intent filter to trigger our activity in the Provider. In the manifest editor add the following, for the Activity you want to trigger. You can also use a service (use AddServiceText instead) AddActivityText(Main, <intent-filter>

<action android:name="com.maximussoft.myprovider.REQUEST" />
<category android:name="android.intent.category.DEFAULT" />


</intent-filter>)

Step 2: Code the Provider to return the data When using an Activity, Sub Activity_Resume

Dim in as Intent
in = Activity.GetStartingIntent
If in <> null Then
If In.HasExtra("GetSettings") Then
SendSettings(in)
Activity.Finish
Return
End If
End If


...so far so good... however do you see the problem here? no? come on think harder
How does the Providor know which app to send the data back to? The Intent by default has no information about the Calling package.
Again, there are two (simpler) ways to deal with this 1. Add information about the Requestor in the intent extras so we can call it back 2. Use StartActivityForResult. This allows you to get the calling package name, but infact you do not even need it. You can just return the result as an intent back to the Requestor Activity.
However, this is the point where you pause and think about what your apps need to do. Are they working silently in the background? Or do they show a dialog at some point?
For now, we go with the first option, and assume that the Requestor sends us an intent action in the extras.
So in SendSettings we do, Sub SendSettings(in as Intent)

Dim returnIntent as Intent
returnIntent.Initialize(in.GetExtra("Callback"),"")
returnIntent.AddCategory("android.intent.category.DEFAULT")
returnIntent.PutExtra("Settings",someGlobalSettings)
returnIntent.PutExtra("Successful","True")
StartActivity(returnIntent) 'Or StartService(returnIntent)


3. Set up the Requester As you may have noticed, the Requester needs to be set up in the exact same way except for some minor differences. First you set up the manifest, with a different intent filter:

AddActivityText(Main, <intent-filter>
<action android:name="com.maximussoft.myrequestor.CALLBACK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>)


4. Code the Requester to request the data/settings This can be anywhere in your code, but if its settings you want to request, it will probably be in activity create or resume. The thing to note here is how we initialiaze the intent with the ACTION of the PROVIDER. And we send the CallBack i.e. the intent of the REQUESTER as the CALLBACK so the provider can send us back the data.

Sub RequestSettings
Dim in as Intent
in.Initialize("com.maximussoft.myprovider.REQUEST","")
in.AddCategory("android.intent.category.DEFAULT")
in.PutExtra("CallBack","com.maximussoft.myrequestor.CALLBACK")
in.PutExtra("GetSettings","True")
StartActivity(in) 'Or StartService(returnIntent)
End Sub


5. Code the Requester to accept the data Again this code is very similar to the Provider except that is gets the data

Sub Activity_Resume
Dim in as Intent
in = Activity.GetStartingIntent
If in <> null Then
If In.HasExtra("Settings") Then
AcceptSettings 'Do something here with your settings
End If
End If
End Sub


Points to note: While I dont consider intents to be very advanced, it can be quite overwhelming for newbies, so do your research.
There are many ways to do things and combinations of services/activities can make things complicated.
You can add permissions on your intent filters, this way Plugin apps need to have your permission in their manifest. This helps in *some* access control, mainly you can list all apps that can access your app/settings/data.
:) Tummo Software :D
http://tummosoft.com

phuoc_89
Thành viên chính thức
Thành viên chính thức
Bài viết: 11
Ngày tham gia: CN 11/07/2010 9:13 am
Has thanked: 2 time
Been thanked: 1 time

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi phuoc_89 » T.Năm 25/09/2014 6:10 pm

Thank bạn tummosoft nhiều, mình đã hiểu rồi, tùy biến code xí là ok

boytin
Thành viên chính thức
Thành viên chính thức
Bài viết: 16
Ngày tham gia: T.Hai 22/09/2014 11:05 am

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi boytin » T.Ba 30/09/2014 10:32 am

Việt Nam có nhiều người chọn VB để lập trình cho Android không nhỉ? có ở đâu dạy B4A này không? thành lập hội để phát triển có tốt hơn không?

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: 57 time
Liên hệ:

Re: [Chú ý] Thắc mắc về lập trình Basic4Android

Gửi bàigửi bởi tummosoft » T.Tư 01/10/2014 3:36 pm

Mình không biết cụ thể nhưng có nhiều người đó bạn. Nhưng ngoài CauLacBoVB chưa có diễn đàn nào phổ biến B4A.
:) 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.2 khách