Как загрузить файл с помощью сервисаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как загрузить файл с помощью сервиса

Сообщение Anonymous »

Моя цель — загружать файлы с помощью службы (пожалуйста, вы можете предложить лучший вариант) в фоновом режиме без необходимости взаимодействия с приложением, чтобы загрузка могла быть инициирована (startService) всякий раз, когда он получает широковещательное сообщение о том, что новый текст был скопирован в буфер обмена и у текста есть загружаемое расширение.

Приведенная ниже реализация использует PR Downloader (библиотека) для загрузки файла, но файл не загружается.

Обычно я получаю сообщение об ошибке и записываю ответ.

onError. isServerError = false. isConnectionError = true


AndroidManifest.xml











...



...





MainActivity.kt

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val clipBoard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipBoard.addPrimaryClipChangedListener {
val primaryClip = clipBoard.primaryClip

if (primaryClip == null || primaryClip.itemCount > 0 && primaryClip.getItemAt(0).text == null)
return@addPrimaryClipChangedListener
val serviceIntent = Intent(this, DownloadService::class.java)
val clip = primaryClip.getItemAt(0).text.toString()
if (clip.contains(".mp3")) {
Log.d("MainActivity","$clip")
serviceIntent.putExtra(DOWNLOAD_URL_KEY, clip)
serviceIntent.putExtra(DOWNLOAD_FILE_NAME_KEY, getFileName(clip))
startService(serviceIntent)
}
}
}
}


DownloadService.kt

class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val url = intent?.getStringExtra(DOWNLOAD_URL_KEY)
val fileName = intent?.getStringExtra(DOWNLOAD_FILE_NAME_KEY)
Log("onStartCommand. FileName = $fileName Download URL = $url")

if (url != null)
downoadFile(url, fileName)

return super.onStartCommand(intent, flags, startId)
}
fun downoadFile(download_url: String, fileName: String?) {
val dirPath ="/Music Downloader/$fileName.mp3"
val downloadId = PRDownloader.download(download_url, dirPath, fileName)
.build()
.setOnStartOrResumeListener {

}
.setOnPauseListener {}
.setOnCancelListener {}
.setOnProgressListener { progress ->

Log("Progress = ${((progress.currentBytes / progress.totalBytes) * 100) as Int}%")
}
.start(object : OnDownloadListener {
override fun onError(error: com.downloader.Error?) {
Log("onError. ServerError = ${error?.isServerError}. ConnectionError = ${error?.isConnectionError}")
}

override fun onDownloadComplete() {
Log("onDownloadComplete")
}
})
Log("dirPath = $dirPath, download_url = $download_url, Download ID = $downloadId")

}
}


Я также пробовал использовать Fetch, но результат тот же — файл не загружается.

Но я заметил, что получение и анализ файла JSON/Xml работает с VOLLEY (:) Я знаю, что сейчас 2018 год. Я перейду на Retrofit, обещаю).

Пожалуйста, что я делаю не так? Как загрузить файл с помощью службы.

ОБНОВЛЕНИЕ

Я попробовал запустить код в основном действии, но он все равно не сработал.
Я тестирую Android 8.1 и думаю, что-то не так с библиотекой PR-Downloader

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
PRDownloader.initialize(getApplicationContext())
val download_url = "Изображение"
download(download_url)
}
fun downoad(url: String, fileName: String) {
val dirPath = "/File Downloader/" + fileName
val downloadId = PRDownloader.download(url, dirPath, fileName)
.build()
.setOnStartOrResumeListener {

}
.setOnPauseListener {}
.setOnCancelListener {}
.setOnProgressListener { progress ->

Log("Progress = ${((progress.currentBytes / progress.totalBytes) * 100) as Int}%")
}
.start(object : OnDownloadListener {
override fun onError(error: com.downloader.Error?) {
Log("onError. isServerError = ${error?.isServerError}. isConnectionError = ${error?.isConnectionError}")
}

override fun onDownloadComplete() {
Log("onDownloadComplete")
}
})
}


Подробнее: https://stackoverflow.com/questions/520 ... th-service
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»