رفتن به مطلب
  • 0

کنسل کردن دانلود


alirezakazemizaroomi

سوال

سلام

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

ولی مشکل اینجاست که وقتی دکمه کنسل رو میزنم دانلود کنسل میشه ولی پروگرس بار کنسل نمیشه، من تو دکمه کنسل از

 	StopService(HttpUtilsService)
    StopService(HttpUtils2Service)
	StopService(HttpUtils)

استفاده کردم ولی همونطور که گفتم  پروگرس بار صفر نمیشه وهمینطوری تا آخر میره ؛کسی میتونه سورس زیرو درست کنه؟؟؟؟؟؟

لینک دانلود:

http://torab33.ir/www/zaker.rar

رمزش: basic4android.org

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

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

چی بگم والا .

این سورس اینقد پیچیده و درهمه ، که آدم میترسه یه جاییش رو دست بزنه.

بجای کتابخانه کش ، مستقیم بااین کد کش رو پاک کردم و توی سرویس هم جایی که شرط گذاشته شده بود اگه این فایل توی کش بود بیا پراگسز بار رو مقدار بده ، شرط دیگه ای اضافه کردم که اگه وجود نداشت مقدار 0 رو بده.

Dim l As List
l.Initialize
l=File.ListFiles(File.DirInternalCache)
For i=0 To l.Size-1
	File.Delete(File.DirInternalCache,l.Get(i))
Next

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

 

اما سوالم هنوز اینجاست ، اینکه وقتی مکث میزنی از ادامش دانلود میشه که خیلی خوبه ، چرا همش به این گیر دادین که اینو وردارین؟ :fekr:

 

خیلی خیلی از کمکت ممنونم پژمان جان

خدا هرچی میخوای بهت بده

من برا این کنسل کردنو میخواستم که مثلا اگه یه نقر وسط دانلود پشیمون شد؛وقتی دکمه برگشتو زد دانلود کنسل بشه،که با این کد درست شد:

Sub Activity_KeyPress (KeyCode As Int) As BooleanIf KeyCode = KeyCodes.KEYCODE_BACK Then
Activity.Finish
StartActivity(Main)
ExitApplication
End If
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

خب دوستم ببنید این پروگرس بار توی چه رویدادی عمل میکنه ؟ اگه تایمر هستش که تایمر رو استوپ کنید.

شما همون تیکه کد مربوط به پروگرس رو قرار بدید

سلام

تیکه کدش اینه:

Sub ProgressHTTP(tmp As ProgressStatus)
   ProgressBar1.Progress=Round((tmp.downloaded*100)/tmp.total)
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

خب دوستم ببنید این پروگرس بار توی چه رویدادی عمل میکنه ؟ اگه تایمر هستش که تایمر رو استوپ کنید.

شما همون تیکه کد مربوط به پروگرس رو قرار بدید

 

این کد اکتیویتی  actDownload :

Sub Process_Globals
Dim url,sFileName As String
Dim timer1 As Timer
End Sub


Sub Globals
Dim video As VideoView
Dim stream As VideoStream
Private ProgressBar1 As ProgressBar
Dim wake1 As PhoneWakeState
Private Button1,Button2 As Button
Dim dier As String
Private p_v,p_v1 As Panel
Private p_play2 As Panel
Private btdown As Button


End Sub


Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("video")
    Dim pq As Phone
pq.SetScreenOrientation(0)
    video.Initialize("video")
    p_v1.AddView(video,0%x,0%y,100%x,50%y)
    dier = File.DirRootExternal& "/ehsan"
    sFileName = url.SubString(url.LastIndexOf("/")+1)
    If File.Exists(dier,sFileName ) = False Then
video.LoadVideo("http",url)
timer1.Initialize("timer1", 1000)
ToastMessageShow("درحال بارگزاری فیلم",True)
video.Play
Else
    ToastMessageShow("فایل موجود است",  True)
    video.LoadVideo(dier,sFileName)
    video.Play
    End If 
StopService(HttpUtilsService)
End Sub


Sub Activity_Resume


End Sub


Sub Activity_Pause (UserClosed As Boolean)


End Sub


Sub timer1_Tick
If video.IsPlaying Then
End If
End Sub


Sub ConvertToTimeFormat(ms As Int) As String
Dim seconds, minutes As Int
seconds = Round(ms / 1000)
minutes = Floor(seconds / 60)
seconds = seconds Mod 60
Return NumberFormat(minutes, 1, 0) & ":" & NumberFormat(seconds, 2, 0) 'ex: 3:05
End Sub


Sub barPosition_ValueChanged (Value As Int, UserChanged As Boolean)
If UserChanged = False Then Return 
video.Position = Value / 100 * video.Duration
If video.IsPlaying = False Then 
video.play
End If
timer1_Tick 
End Sub


Sub btdown_Click
ProgressBar1.Visible = True
ProgressBar1.Enabled = True
ProgressBar1.Progress = 0
sFileName = url.SubString(url.LastIndexOf("/")+1) 
stream.Initialize(url,video)
timer1.Initialize("timer1", 1000)
End Sub


Sub Button2_Click
  StopService(HttpUtilsService)
ProgressBar1.Progress = 0
ProgressBar1.Visible = False
ProgressBar1.Enabled = False
End Sub


Sub ProgressHTTP(tmp As ProgressStatus)
   ProgressBar1.Progress=Round((tmp.downloaded*100)/tmp.total)
End Sub


Private Sub JobDone (Job As String)
dier = File.DirRootExternal& "/ehsan"
   Select Job
      Case "downloadFile"
      If HttpUtils.IsSuccess(url) Then
            HttpUtils.SaveFile(url,dier,sFileName)
ProgressBar1.Progress = 1
video.LoadVideo(dier,sFileName)
video.Play
      End If
   End Select
End Sub

اینم کد کدماژول  HttpUtils :

Sub Process_Globals
Dim Tasks As List 'List of URLs to fetch.
'A map that holds the successful links.
'The links are stored as keys. The values are not used.
Dim SuccessfulUrls As Map 
Dim Working As Boolean 'True when a job is still running
Dim Complete As Boolean 'True after a job has completer
Dim Job As String 'Name of the current running Job
Dim CallbackActivity As String 'Name of Activity that handles the callbacks.
Dim CallbackJobDoneSub As String 'Name of the JobDone callback sub.
Dim CallbackUrlDoneSub As String 'Name of the UrlDone callback sub.
Dim CallbackProgressSub As String 'download progress of file
Type ProgressStatus(Downloaded As Long,Total As Long)
End Sub
'Download a single resource (GET method).
Sub Download(JobName As String, URL As String)
DownloadList(JobName, Array As String(URL))
End Sub
'Downloads a list of resources (GET method).
Sub DownloadList(JobName As String, URLs As List)
If internalCheckIfCanStart(JobName) = False Then Return
Tasks = URLs
HttpUtilsService.Post = False
StartService(HttpUtilsService)
End Sub
'Sends a POST request with the given string as the post data
Sub PostString(JobName As String, URL As String, Text As String)
PostBytes(JobName, URL, Text.GetBytes("UTF8"))
End Sub
'Sends a POST request with the given file send as the post data.
Sub PostFile(JobName As String, URL As String, Dir As String, FileName As String)
If internalCheckIfCanStart(JobName) = False Then Return
Dim length As Int
If Dir = File.DirAssets Then
Log("Cannot send files from the assets folder.")
Return
End If
length = File.Size(Dir, FileName)
Dim In As InputStream
In = File.OpenInput(Dir, FileName)
If length < 1000000 Then '1mb
'There are advantages for sending the file as bytes array. It allows the Http library to resend the data
'if it failed in the first time.
Dim out As OutputStream
out.InitializeToBytesArray(length)
File.Copy2(In, out)
HttpUtilsService.PostInputStream = Null
HttpUtilsService.PostBytes = out.ToBytesArray
Else
HttpUtilsService.PostInputStream = In
HttpUtilsService.PostLength = length
End If
Tasks = Array As String(URL)
HttpUtilsService.Post = True
StartService(HttpUtilsService)
End Sub
'Sends a POST request with the given data as the post data.
Sub PostBytes(JobName As String, URL As String, Data() As Byte)
If internalCheckIfCanStart(JobName) = False Then Return
HttpUtilsService.PostInputStream = Null
HttpUtilsService.PostBytes = Data
Tasks = Array As String(URL)
HttpUtilsService.Post = True
StartService(HttpUtilsService)
End Sub
Sub internalCheckIfCanStart(JobName As String) As Boolean
If Working Then
Log("Already working. Request ignored (" & JobName & ")")
Return False
End If
Log("Starting Job: " & JobName)
Job = JobName
Working = True
Complete = False
SuccessfulUrls.Initialize
Return True
End Sub
Sub IsSuccess(URL As String) As Boolean
Return SuccessfulUrls.ContainsKey(URL)
End Sub


'Get methods should be called only after the JobDone event or the UrlDone event.
Sub GetString(URL As String) As String
If IsSuccess(URL) = False Then
Log("Task not completed successfully.")
Return ""
End If
Return File.GetText(HttpUtilsService.TempFolder, SuccessfulUrls.Get(URL))
End Sub


Sub GetBitmap(URL As String) As Bitmap
Dim b As Bitmap
If IsSuccess(URL) = False Then
Log("Task not completed successfully.")
Return b
End If
b = LoadBitmap(HttpUtilsService.TempFolder, SuccessfulUrls.Get(URL))
Return b
End Sub
Sub SaveFile(URL As String, LocalPath As String,Fname As String)
If IsSuccess(URL) = False Then
Log("Task not completed successfully.")
End If
File.Copy(HttpUtilsService.TempFolder, SuccessfulUrls.Get(URL),LocalPath,Fname)
End Sub


Sub GetInputStream(URL As String) As InputStream
Dim In As InputStream
If IsSuccess(URL) = False Then
Log("Task not completed successfully.")
Return In
End If
In = File.OpenInput(HttpUtilsService.TempFolder, SuccessfulUrls.Get(URL))
Return In
End Sub

اینم کد سرویس ماژول   HttpUtilsService:

Sub Process_Globals
Dim hc As HttpClient
Dim task As Int
Dim countWorking As Int
Dim finishTasks As Int
Dim maxTasks As Int
maxTasks = 10
Dim taskToRequest As Map
Dim TempFolder As String
Dim Post As Boolean
Dim PostBytes() As Byte
Public PostInputStream As InputStream
Dim PostLength As Int
Dim hcIsInitialized As Boolean
Dim ContentLength As Long
Dim downloadedLength As Long
Public tmr As Timer
Dim filename As String
Public o1 As OutputStream
End Sub
Sub Service_Create
If TempFolder = "" Then TempFolder = File.DirInternalCache
If hcIsInitialized = False Then
hc.Initialize("hc")
hcIsInitialized = True
End If
If HttpUtils.CallbackProgressSub<>"" Then 
tmr.Initialize("Timer",200)
tmr.Enabled=True
End If
End Sub


Sub Timer_Tick
If  File.Exists(TempFolder, filename)=True Then 
downloadedLength= File.Size(TempFolder, filename)
End If
Dim tmp As ProgressStatus
tmp.Downloaded=downloadedLength
tmp.Total=ContentLength
If HttpUtils.CallbackProgressSub<>"" Then 
CallSub2(HttpUtils.CallbackActivity,HttpUtils.CallbackProgressSub,tmp)
End If
End Sub


Sub Service_Start
If HttpUtils.Tasks.IsInitialized = False Then Return
taskToRequest.Initialize
finishTasks = 0
task = 0
countWorking = 0
Do While task < HttpUtils.Tasks.Size
ProcessNextTask
If countWorking >= maxTasks Then Exit
Loop
End Sub
Sub ProcessNextTask
If finishTasks >= HttpUtils.Tasks.Size Then
HttpUtils.Working = False
' tmr.Enabled=False
HttpUtils.Complete = True
'Raise job done event
If HttpUtils.CallbackJobDoneSub <> "" Then
CallSub2(HttpUtils.CallbackActivity, HttpUtils.CallbackJobDoneSub, HttpUtils.Job)
End If
'If no new job was started then we kill this service.
If HttpUtils.Working = False Then
tmr.Enabled=False
StopService("")
End If
Return
End If
If task >= HttpUtils.Tasks.Size Then Return
Dim link As String
link = HttpUtils.Tasks.Get(task)
Dim req As HttpRequest
If Post Then
If PostInputStream.IsInitialized Then
req.InitializePost(link, PostInputStream, PostLength)
Else
req.InitializePost2(link, PostBytes)
End If
Else
req.InitializeGet(link)
End If
'Here you can modify the request object if needed
countWorking = countWorking + 1
taskToRequest.Put(task, link)
hc.Execute(req, task)
task = task + 1
End Sub


Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
ContentLength=Response.ContentLength
filename=TaskId
o1 = File.OpenOutput(TempFolder, TaskId, False)
Response.GetAsynchronously("response", o1 , _
True, TaskId)
End Sub
Sub Response_StreamFinish (Success As Boolean, TaskId As Int)
finishTasks = finishTasks + 1
countWorking = countWorking - 1
If Success = False Then
HandleError(TaskId, LastException.Message)
Else
HttpUtils.SuccessfulUrls.Put(taskToRequest.Get(TaskId), TaskId)
'Raise URL done event
If HttpUtils.CallbackUrlDoneSub <> "" Then
CallSub2(HttpUtils.CallbackActivity, HttpUtils.CallbackUrlDoneSub, taskToRequest.Get(TaskId))
End If
End If
ProcessNextTask
End Sub
Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
countWorking = countWorking - 1
finishTasks = finishTasks + 1
HandleError(TaskId, Reason)
If Response <> Null Then
Log(Response.GetString("UTF8"))
Response.Release
End If
ProcessNextTask
End Sub
Sub HandleError(TaskId As Int, Reason As String)
Dim link As String
link = taskToRequest.Get(TaskId)
Log("Error. Url=" & link & " Message=" & Reason)
End Sub
Sub Service_Destroy
HttpUtils.Working = False
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام.

من الان دارم سورستون رو نگاه میکنم.

درسته یه دفعه میپره از همونجایی که تا دانلود پیش رفته بود.

الان وقتی میپره وسط ، آیا دانلود رو هم از وسط انجام میده؟؟؟ یااینکه فقط پراسز میره وسط؟؟؟

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

سلام

آره دانلود هم میپره جلو

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

سلام

آره دانلود هم میپره جلو

خب آره مشخصه دیگه همینکارو میکنه این که اشکالی نداره.

اصلا توی کدها معلومه ، شما سرویس HttpUlitesService رو نگاه کنید ، اینجا ادرس حافظه کش داده شده به tempFolder

TempFolder = File.DirInternalCache

بعد یه قسمت هم نوشته شده که مقدار دانلود شده توی کش ذخیره بشه ، که دوباره ادامه دانلود رو انجام بده.

اینجا هم اومده مقدار دانلود شده ای رو که قبلا ذخیره کرده فراخوانی میکنه.

downloadedLength=	File.Size(TempFolder, filename)

بعد مقدار downloadedLength رو میده به tmp و call میده به یه رویداد که اون رویداد این هست که تو اکتیویتی تون نوشتید:

Sub ProgressHTTP(tmp As ProgressStatus)

   ProgressBar1.Progress=Round((tmp.downloaded*100)/tmp.total)

End Sub

میبیند که مشخصه ازاینجا tmp رو خونده و داده به پراگسس بار ، پس معلومه که از ادامش پیش میره.

و بنظر من خیلی بهتر هم هست که ادامه رو دانلود کنه....

 

اما بازم اگه احیانا میخواین از ادامش دانلود نکنه و از اول شروع کنه به جای 0کردن پراگسس و visible  کردن اون کافیه با کتابخانه cach ، حافظه کش برنامتون رو پاک کنید. :write: 

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

خب آره مشخصه دیگه همینکارو میکنه این که اشکالی نداره.

اصلا توی کدها معلومه ، شما سرویس HttpUlitesService رو نگاه کنید ، اینجا ادرس حافظه کش داده شده به tempFolder

TempFolder = File.DirInternalCache

بعد یه قسمت هم نوشته شده که مقدار دانلود شده توی کش ذخیره بشه ، که دوباره ادامه دانلود رو انجام بده.

اینجا هم اومده مقدار دانلود شده ای رو که قبلا ذخیره کرده فراخوانی میکنه.

downloadedLength=	File.Size(TempFolder, filename)

بعد مقدار downloadedLength رو میده به tmp و call میده به یه رویداد که اون رویداد این هست که تو اکتیویتی تون نوشتید:

Sub ProgressHTTP(tmp As ProgressStatus)

   ProgressBar1.Progress=Round((tmp.downloaded*100)/tmp.total)

End Sub

میبیند که مشخصه ازاینجا tmp رو خونده و داده به پراگسس بار ، پس معلومه که از ادامش پیش میره.

و بنظر من خیلی بهتر هم هست که ادامه رو دانلود کنه....

 

اما بازم اگه احیانا میخواین از ادامش دانلود نکنه و از اول شروع کنه به جای 0کردن پراگسس و visible  کردن اون کافیه با کتابخانه cach ، حافظه کش برنامتون رو پاک کنید. :write: 

دمت گرم داداش واقعا استادی 

میشه بگی چجوری بایدcach کرد؟

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

دمت گرم داداش واقعا استادی 

میشه بگی چجوری بایدcach کرد؟

خواهش میکنم داداش.

منظورتون اینه کش رو پاک کنید؟؟

کتابخانه CacheCleaner رو تیک بزنید و:

Dim a As CacheCleaner
a.clearCache
لینک ارسال
به اشتراک گذاری در سایت های دیگر

آره منظورم همینه 

الان این کدو تو دکمه کنسل بنویسم درست میشه؟

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

آره منظورم همینه 

الان این کدو تو دکمه کنسل بنویسم درست میشه؟

بعد از این کد کد پاک کردن کش رو قرار بدید

	ProgressBar1.Progress = 0

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

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

صبور باشید...

 

سلام

داش پژمان تونستی درستش کنی؟

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

ای بابا مشکل شما همچنان پابرجاس که ( این آواتارتم من یاد چندتا جلسه که مرحوم سید ذاکر بود میندازه  خدا رحمتش کنه )

ببنید من نمیدونم شما تو سورس (روند دانلود در نوتیفکشن چه تغییری دادید ) 

شما تو دکمه کنسل اینو بزارید 

ProgressBar1.Progress=0

بعد  پروگسس بار اینو 

Sub dd_Progress(Progress As Long, Total As Long)
	ProgressBar1.Progress = Progress / Total * 100
	Label1.Text = NumberFormat(Progress / 1024, 0, 0) & "KB / " & _
		NumberFormat(Total / 1024, 0, 0) & "KB"
		
		change( Progress / Total * 100 , Label1.Text )
	end sub	

وقتی این کار کنی مشکلت به یقین حل میشه 

 

داداش درست نشد

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

من با همین کدهای که دادم + سورس روند دانلود در نوتیفکشن جواب گرفتم 

نمیدونم چرا شما جواب نمیگرید الله اعلم 

حتما تغییراتی اساسی تو نمونه سورس انجام دادید

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

دادش من کدم باکدروند دانلود تو نوتیفیکیشن فرق میکنه؛سورسو براتون پیام فرستادم؛رااستی من مشکلم با سورس روند دانلود در نوتیفکشن اینه که وقتی کتابخونه HttpUtils2 رو ففعال میکنم روند دانلودو نشون نمیده؟

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

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

صبور باشید...

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

جواب من همونی که گفتم 

دادش من کدم باکدروند دانلود تو نوتیفیکیشن فرق میکنه؛سورسو براتون پیام فرستادم؛رااستی من مشکلم با سورس روند دانلود در نوتیفکشن اینه که وقتی کتابخونه HttpUtils2 رو ففعال میکنم روند دانلودو نشون نمیده؟

دیگه نمیدونم دقیقا چه حرکتی زدی که درست کار نمیکنه ؟؟! :fekr:

کار من با همون نمونه سورس راه افتاد (البته من میخاستم که دانلود داشته باشه یه روندی هم نشون بده )

حالا اینکه مشکل سورس شما کجاس 

راستشو میگم نمیدونم (خوبه که آدم وقتی چیزی رو بلد نیست بگه بلد نیستم ) 

بزارید اساتید بیان جواب بدن 

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

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

صبور باشید...

ممنون پس منتظرم

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

یه نفر پیدا نمیشه به سوال ما جواب بده؟؟؟؟؟؟ :( 

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

1-تو رویداد کنسل پروگس بار رو مقدار صفر بده 

2-همین 

3- قبل تاپیک زدن اول سعی کن به نتیجه نرسیدی بعد بیا تاپیک بزن (چرا چون کارت زوتر راه میوفته و بیشتر به خودت متکی میشی )

4- تمام 

5- یا حق

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

1-تو رویداد کنسل پروگس بار رو مقدار صفر بده 

2-همین 

3- قبل تاپیک زدن اول سعی کن به نتیجه نرسیدی بعد بیا تاپیک بزن (چرا چون کارت زوتر راه میوفته و بیشتر به خودت متکی میشی )

4- تمام 

5- یا حق

داداش این کارو کردم ولی وقتی دوباره کلید دانلودو می زنی یه دفعه از صفر میاد مثلا به 40 درصد دانلود یعنی وقتی که دکمه کنسلو میزنی متوقف میشه ولی وقتی دوباره کلید دانلودو میزنی یه دفعه میپره جلو؟

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

بایگانی شده

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

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

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