استارت و انتقال اطلاعات بین اکتیویتیها با اینتنت در B4A
💡 حتماً میدونید که برای باز کردن یک اکتیویتی جدید در بیسیک۴اندروید میشه براحتی از کد StartActivity(activityname) استفاده کرد، اما فکر کنید میخواین به اکتیویتی دوم یکسری داده، متغیر یا هرچیزی بفرستید.
❓ آیا میدونستید یک راه استانداردتر برای انتقال اطلاعات غیر از تعریف متغیر در process_globals وجود داره؟
✅ استفاده از اینتنت Intent راه حل این مسئله
در زبان برنامه نویسی Java یا در محیط هایی مثل اندروید استودیو برای باز کردن یا استارت کردن اکتیویتی از اینتنت استفاده میکنند و به همین دلیل همون موقع قبل از استارت اکتیویتی جدید، اطلاعات رو داخل اینتنت PutExtra میکنند و همراهش میفرستن تا در اکتیویتی بعدی بشه اونهارو دریافت و استفاده کرد. دقیقا همین عمل در B4A از روش زیر قابل انجام هست.
⚡️ فرض کنیم میخواهیم اکتیویتی ac2 که قبلا ایجادش کردیم رو استارت کنیم و بجای تعریف متغیر در process_globals و استفاده از کد StartActivity از اینتنت استفاده کنیم و داده هارو در اینتنت ذخیره و به اکتیویتی ac2 بفرستیم،
▪️ برای مثال اینجا دو آیتم name و family رو به اکتیویتی ac2 میفرستیم، پس کافیه برای باز کردن اکتیویتی از کد زیر استفاده کنیم:
Dim intent As Intent intent.Initialize(intent.ACTION_MAIN,"") intent.SetComponent(Application.PackageName&"/.ac2") 'Package and class name intent.PutExtra("name","pejman") intent.PutExtra("family","nikravan") StartActivity(intent)
نکته: بجای ac2 اسم اکتیویتی ای که میخوایم بازش کنیم رو قرار میدیم.
▪️ و حالا کافیه در رویداد Activity_Resume اکتیویتی بعدی (ac2) با کد های زیر اون name و family رو بگیریم و مثلاً لاگ یا استفاده های دیگه کنیم:
Sub Activity_Resume Try Dim intent As Intent=Activity.GetStartingIntent If intent.HasExtra("name") Then Log("نام: "&intent.GetExtra("name")) If intent.HasExtra("family") Then Log("نام خانوادگی: "&intent.GetExtra("family")) Catch Log(LastException) End Try End Sub
✔️ سورس همین آموزش بالا رو میتونید از جعبه دانلود زیر دریافت کنید.