رفتن به مطلب

آموزش ارسال فایل در AsyncStreams


ارسال‌های توصیه شده

ارسال فایل توسط AsyncStreams در مواردی همچون بلوتوث. وای فای و یا سوکت نویسی کاربرد دارد.

در این آموزش شما نحوه ارسال فایل توسط بلوتوث را خواهد آموخت.

گام اول: کار با بلوتوث و گرفتن لیست دستگاه های بلوتوث دار

ابتدا دو متغیر یکی برای کار با بلوتوث و دیگری لیستی برای دستگاه های بلوتوث دار می سازیم

Sub Globals
	Dim BlueAdmin As BluetoothAdmin
	Dim ListDevices As List
End Sub

Sub Activity_Create(FirstTime As Boolean)
	If FirstTime Then
		BlueAdmin.Initialize("BlueAdmin")
		ListDevices.Initialize
	End If
End Sub

سپس رویدادهای مربوط به بلوتوث را می سازیم

رویداد تغیر در وضعیت بلوتوث

Sub BlueAdmin_StateChanged (NewState As Int, OldState As Int)

End Sub

رویداد یافتن دستگاه

Sub BlueAdmin_DeviceFound (Name As String, MacAddress As String)
	mapDevices.Put(Name,MacAddress)
End Sub

رویداد پایان جستجو

Sub BlueAdmin_DiscoveryFinished
	If mapDevices.Size = 0 Then
		ToastMessageShow("No device found.", True)
	End If
End Sub

خب نحوه شروع جستجو دستگاه به این شکل خواهد بود. (مثلا با زدن دکمه)

Sub btnSearch_Click
	If BlueAdmin.StartDiscovery	= False Then
		ToastMessageShow("Error starting discovery process.", True)
	Else
		ProgressDialogShow("Searching for devices...")
	End If
End Sub

گام دوم: اتصال به دستگاه مورد نظر

ابتدا پورت سریال مربوطه را می سازیم

Dim serial1 As Serial
serial1.Initialize("serial1")
serial1.Connect(MapDevices.GetValueAt(0))

حال رویداد مربوط به اتصال را چنین بنویسید


Sub Serial1_Connected (Success As Boolean)
	If Success = False Then
		ToastMessageShow("Error connecting ",True)
	Else
	'ادامه در گام بعد'
	End If
End Sub

و حال دستور انتظار برای اتصال را می نویسیم.

Sub btnConnect_Click
	Dim i As Intent
	i.Initialize("android.bluetooth.adapter.action.REQUEST_DISCOVERABLE", "")
	i.PutExtra("android.bluetooth.adapter.extra.DISCOVERABLE_DURATION", 300)
	StartActivity(i)
	
	serial1.Listen
End Sub

گام سوم: ساخت AsyncStreams برای ارسال فایل یا متن

در رویداد مربوط به اتصال به دستگاه جدید.کد ساخت AsyncStreams  را بنویسید

Dim AStream As AsyncStreams
AStream.InitializePrefix(serial1.InputStream, True, serial1.OutputStream, "AStream")

رویدادهای خطای ارسال 

Sub AStream_Error
	ToastMessageShow("Connection is broken.", True)
End Sub

Sub AStream_Terminated
	AStream_Error
End Sub

و رویداد دریافت اطلاعات(مثلا نام فایل)

Sub AStream_NewData (Buffer() As Byte)
	LogMessage("You", BytesToString(Buffer, 0, Buffer.Length, "UTF8"))
End Sub

رویداد مربوط به دریافت فایل

Sub AStream_NewStream (Dir As String, FileName As String)
	File.Copy(Dir, FileName, Dir, currentFile)
	File.Delete(Dir, FileName)
End Sub

دستور ارسال فایل

Public Sub SendFile(Dir As String, FileName As String)
	Dim totalSizeForSending As Long = File.Size(Dir, FileName)
	Dim In As InputStream = File.OpenInput(Dir, FileName)
	countingStream.Initialize(In)
	currentFile = FileName.SubString(FileName.LastIndexOf("/") + 1)
	astream.Write(currentFile.GetBytes("UTF8")) 'write the file name
	astream.WriteStream(countingStream, totalSizeForSending)
	lblFile = "Sending: " & currentFile
	timer1.Enabled = True
	SendingFile = True
	UpdateProgress
End Sub

«موفق باشید.»

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 2 هفته بعد...

توضیحات تکمیلی

دوستان توضیحاتی درباره بعضی قسمت ها می خواستند که برایتان شرح می دهم

currentFile 

همانگونه که کاملا واضح است متغیر بالا از نوع رشته بوده و نام خود فایل روا از مسیرش جدا می کند

countingStream

این متغیر نیز به صورت زیر ایجاد می شود

Private countingStream As CountingInputStream

و در نهایت تایمر هم که مشخص است برای  بدست آوردن درصد ارسال شده از فایل می باشد.

مثلا:

Sub Timer1_Tick
	Dim count, total As Long
	If SendingFile Then
		count = countingStream.count
		total = totalSizeForSending
		If count = total Then
			lblFile = currentFile & " completed"
			'stop the timer.
			'when a file is received the NewStream event will be raised
			SendingFile = False
			timer1.Enabled = False
		End If
	Else If ReceivingFile Then
		count = astream.StreamReceived
		total = astream.StreamTotal
	End If
	progressValue = 100 * count / total
	progressText = NumberFormat2(count / 1000, 0, 0, 0, True) & _
			"kb / " & NumberFormat2(total / 1000, 0, 0, 0, True) & "kb"
	UpdateProgress		
End Sub

امیدوارم توضیحات کافی بوده باشد.

«موفق باشید.»

لینک ارسال
به اشتراک گذاری در سایت های دیگر

توضیحات تکمیلی

دوستان توضیحاتی درباره بعضی قسمت ها می خواستند که برایتان شرح می دهم

currentFile 

همانگونه که کاملا واضح است متغیر بالا از نوع رشته بوده و نام خود فایل روا از مسیرش جدا می کند

countingStream

این متغیر نیز به صورت زیر ایجاد می شود

Private countingStream As CountingInputStream

و در نهایت تایمر هم که مشخص است برای  بدست آوردن درصد ارسال شده از فایل می باشد.

مثلا:

Sub Timer1_Tick
	Dim count, total As Long
	If SendingFile Then
		count = countingStream.count
		total = totalSizeForSending
		If count = total Then
			lblFile = currentFile & " completed"
			'stop the timer.
			'when a file is received the NewStream event will be raised
			SendingFile = False
			timer1.Enabled = False
		End If
	Else If ReceivingFile Then
		count = astream.StreamReceived
		total = astream.StreamTotal
	End If
	progressValue = 100 * count / total
	progressText = NumberFormat2(count / 1000, 0, 0, 0, True) & _
			"kb / " & NumberFormat2(total / 1000, 0, 0, 0, True) & "kb"
	UpdateProgress		
End Sub

امیدوارم توضیحات کافی بوده باشد.

«موفق باشید.»

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 3 ماه بعد...

سلام

من کار با سوکت رو بلدم اما برای ارسال و دریافت متن

شما گفتین ارسال فایل در بلوتوث ، وای فای و سوکت مثل هم هست .

میتونم ازتون درخواست کنم بخش ارسال و دریافت فایل برای سوکت رو برام توضیح بدین.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...