2013-05-31 22 views
7

Chcę pobrać plik z Internetu za pomocą usługi. Znalazłem kod źródłowy i kod działa dobrze. Ale mam problem, gdy wracam z aplikacji, pobieranie się zatrzymuje lub kiedy wyczyściam pamięć RAM, to również się zatrzymuje. Tak, że chcę znaleźć kod pobierania, taki jak Google Play, który nigdy nie przestaje, gdy wyczyści RAM lub historię aplikacji. To jest mój kod źródłowy:Jak pobrać plik z usługą w systemie Android?

public class Temp extends IntentService { 
public static final int UPDATE_PROGRESS = 8344; 
private int lastupdate=0; 
private NotificationManager nm; 
private Builder mBuilder; 
public Temp() { 

    super("Temp"); 


} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d("SERVICE-ONCOMMAND", "onStartCommand"); 
    return START_STICKY; 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    Log.e("ok","ok"); 
    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    mBuilder = new NotificationCompat.Builder(this); 
    mBuilder.setContentTitle(
      "Picture Download dnsadg sadgasjdgashgd asgd asjdg asjgd sajgd s") 
      .setContentText("Download in progress") 
      .setSmallIcon(R.drawable.icon_app).setContentInfo("0%"); 

    mBuilder.setOngoing(true); 
    File root = new File(Environment.getExternalStorageDirectory() 
      + "/aaaa"); 
    String urlToDownload = "http://dl2.mid.az/endir.php?file=uploads/Exclusive/miri_yusif_-_yoxam_men_mp3.mid.az.mp3"; 
    // ResultReceiver receiver = (ResultReceiver) intent.getParcelableExtra("receiver"); 
    try { 
     URL url = new URL(urlToDownload); 
     URLConnection connection = url.openConnection(); 
     connection.connect(); 
     // this will be useful so that you can show a typical 0-100% progress bar 
     int fileLength = connection.getContentLength(); 

     // download the file 
     InputStream input = new BufferedInputStream(url.openStream()); 
     OutputStream output = new FileOutputStream(new File(root.getPath(), 
       "ok.mp3")); 

     byte data[] = new byte[1024]; 
     long total = 0; 
     int count; 
     while ((count = input.read(data)) != -1) { 
      total += count; 

      progressChange((int)(total * 100)/fileLength); 
      // publishing the progress.... 
     // Bundle resultData = new Bundle(); 
     // resultData.putInt("progress" ,(int) (total * 100/fileLength)); 
     // receiver.send(UPDATE_PROGRESS, resultData); 
      output.write(data, 0, count); 
     } 

     output.flush(); 
     output.close(); 
     input.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // Bundle resultData = new Bundle(); 
    // resultData.putInt("progress" ,100); 
    // receiver.send(UPDATE_PROGRESS, resultData); 
} 

@Override 
public void onDestroy() { 
    Log.e("DESTROY", "DESTROY"); 
    super.onDestroy(); 
} 
void progressChange(int progress){ 


    if (lastupdate != progress) { 
     lastupdate = progress; 
     // not.contentView.setProgressBar(R.id.status_progress, 
     // 100,Integer.valueOf(progress[0]), false); 
     // inform the progress bar of updates in progress 
     // nm.notify(42, not); 
     if (progress < 100) { 
      mBuilder.setProgress(100, Integer.valueOf(progress), 
        false).setContentInfo(progress+"%"); 
      nm.notify(12, mBuilder.build()); 
       Intent i = new Intent("com.russian.apps.TabActivity").putExtra("some_msg",progress+"%"); 
       this.sendBroadcast(i); 
     } else { 
      mBuilder.setContentText("Download complete") 
      // Removes the progress bar 
        .setProgress(0, 0, false).setOngoing(false).setContentInfo("");; 

      nm.notify(12, mBuilder.build()); 

     } 

    } 

} 
} 

Odpowiedz

4

Możesz spróbować wywołać startForeground. Sprawdź numer this post, aby uzyskać więcej informacji.