8

我想通过服务从互联网下载文件。我找到了源代码并且代码运行良好。但是当我从应用程序返回时,我遇到了一个问题,下载正在停止,或者当我清除 RAM 时,它也正在停止。所以我想找到下载代码,例如 Google Play,当清除 RAM 或应用程序历史记录时,它永远不会停止。这是我的源代码:

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());

        }

    }

}
}
4

1 回答 1

4

您可以尝试调用 startForeground。查看这篇文章了解更多信息。

于 2013-05-31T20:05:40.863 回答