Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lazuka.agata.komunikacjasieciowa;
- import android.annotation.SuppressLint;
- import android.app.IntentService;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Environment;
- import android.util.Log;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- public class MyIntentService extends IntentService {
- private static final String TAG = "lazuka.agata.komunikacjasieciowa";
- private static final String ACTION = "lazuka.agata.komunikacjasieciowa"; //akcje, które potrafi wykonac usługa
- private static final String ADDRESS = "address"; //parametr potrzebny do wykonania akcji
- public static final String INFO = "download";
- private static final int SIZE = 8;
- private static int byteDownloaded = 0; //zmienna przechowująca aktualną wartość pobranych bajtów
- private double jump; ///zmienna służąca do aktualizacji progress bara
- //statyczna metoda pomocnicza uruchamiająca zadanie
- public void uruchomUsluge(Context context, String address) {
- Intent srv = new Intent(context, MyIntentService.class);
- srv.setAction(ACTION);
- srv.putExtra(ADDRESS, address);
- context.startService(srv);
- }
- //konstruktor
- public MyIntentService() {
- super("MyIntentService");
- }
- //metoda wykonująca zadanie
- @SuppressLint("LongLogTag")
- @Override
- protected void onHandleIntent(Intent intent)
- {
- if (intent != null)
- {
- final String action = intent.getAction();
- if (ACTION.equals(action))
- {
- final String address = intent.getStringExtra(ADDRESS);
- wykonajZadanie(address);
- Log.d("end", "Zakonczono");
- } else {
- Log.e(TAG,"Nieznana akcja");
- }
- }
- Log.d(TAG,"Usługa wykonała zadanie");
- }
- private void wykonajZadanie(String address) {
- //nawiązywanie połączęnia HTTP z podanym adresem URL
- HttpURLConnection connection = null;
- FileOutputStream strumienDoPliku = null;
- int progress = 0;
- try
- {
- URL url = new URL(address);
- connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
- connection.setDoOutput(true);
- //zapisanie danych do pliku
- File testFile = new File(url.getFile());
- File outputFile = new File(
- Environment.getExternalStorageDirectory() +
- File.separator+ testFile.getName());
- if (outputFile.exists()) outputFile.delete();
- //odbieranie danych z połączenia sieciowego
- DataInputStream czytnik = new DataInputStream(connection.getInputStream());
- strumienDoPliku = new FileOutputStream(outputFile.getPath());
- byte bufor[] = new byte[SIZE];
- int pobrano = czytnik.read(bufor, 0, SIZE);
- int lengthOfFile = connection.getContentLength(); //pobranie rozmiaru pliku
- Intent zamiar = new Intent(INFO);
- zamiar.putExtra("obiekt", new PostepInfo(0, 1));
- sendBroadcast(zamiar);
- byteDownloaded = 0; //inicjalizacja zmiennej przechowującej aktualną wartość pobranych bajtów
- jump = 0; //inicjalizacja zmiennej służącej do aktualizacji progress bara
- while (pobrano != -1) {
- strumienDoPliku.write(bufor, 0, pobrano);
- byteDownloaded += pobrano;
- pobrano = czytnik.read(bufor, 0, SIZE);
- //pętla dzięki której progress bar będzie przeskakiwał co 10%
- if(byteDownloaded >= jump) {
- progress = (int) byteDownloaded * 100 / lengthOfFile;
- zamiar.putExtra("obiekt", new PostepInfo(byteDownloaded / 1000, progress)); //dzielimy bajty przez 1000 żeby były kB
- sendBroadcast(zamiar);
- jump+=lengthOfFile*0.1; //dodanie do zmiennej jump 10% wielkości pliku
- }
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- if (connection != null) connection.disconnect();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement