2016-06-23 5 views
3

通知先から現在ダウンロードしているファイルをキャンセルしたい&通知のダウンロードの進行状況の下にをキャンセルするには、をキャンセルしてください。そのキャンセルボタンをクリックすると、ダウンロードをキャンセルする必要があります。ここに私のクラスですダウンロードダウンロードファイルを実行すること。私は何をする必要がありますか?ダウンロードファイルの実行をキャンセルするにはどうすればよいですか?

public class DownloadSong extends AsyncTask<String, Integer, String> { 

Activity activity; 
public static String songName, songURL; 

private NotificationHelper mNotificationHelper; 
public static int notificationID = 1; 
boolean download = false; 
NotificationManager nm; 

public DownloadSong(Activity activity, String songName, String songURL) { 
    this.activity = activity; 
    this.songName = songName; 
    this.songURL = songURL; 

    mNotificationHelper = new NotificationHelper(activity, songName); 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 

    notificationID++; 
    mNotificationHelper.createNotification(notificationID); 
} 

@Override 
protected String doInBackground(String... file_URL) { 

    try { 
     URL url = new URL(songURL); 
     HttpURLConnection URLconnection = (HttpURLConnection) url.openConnection(); 
     URLconnection.setRequestMethod("GET"); 
     URLconnection.setDoOutput(true); 
     URLconnection.connect(); 

     // Detect the file length 
     int fileLength = URLconnection.getContentLength(); 

     File fSDcard = Environment.getExternalStorageDirectory(); 
     String strSdcardPath = fSDcard.getAbsolutePath(); 

     File fDirectory = new File(strSdcardPath + "/GSD"); 

     if (!fDirectory.exists()) { 
      fDirectory.mkdir(); 
     } 

     File fMyFile = new File(fDirectory.getAbsolutePath() + "/" + songName + ".mp3"); 
     Log.e("Download file name ", fMyFile.toString()); 

     FileOutputStream out = new FileOutputStream(fMyFile, true); 

     InputStream input_File = URLconnection.getInputStream(); 

     byte[] data = new byte[1024]; 
     int total = 0; 
     int count; 

     while ((count = input_File.read(data)) != -1) { 

      total += count; 
      publishProgress((int) (total * 100/fileLength)); 

      out.write(data, 0, count); 
     } 

     out.flush(); 
     out.close(); 
     input_File.close(); 

    } catch (IOException e) { 

     Log.e("Download Error : ", "Failed"); 

    } 
    Log.e("Download status", " Complete "); 

    return null; 
} 

@Override 
protected void onPostExecute(String s) { 
    Toast.makeText(activity, "Song " + "'" + songName + "'" + " downloaded successfully", Toast.LENGTH_LONG).show(); 
    //pDialog.dismiss(); 

    if (download) { 
     Toast.makeText(activity, "Could Not Connect to Server.", Toast.LENGTH_LONG).show(); 
     mNotificationHelper.clearNotification(); 
    } else 
     mNotificationHelper.completed(); 
} 

@Override 
protected void onProgressUpdate(Integer... progress) { 
    //pDialog.setProgress(progress[0]); 

    mNotificationHelper.progressUpdate(progress[0]); 

    super.onProgressUpdate(progress); 
} 
} 

答えて

2

時間のほとんどは、あなたはタスクがキャンセルされたかどうかを確認するためのチェックを追加することができます

while ((count = input_File.read(data)) != -1) { 

    total += count; 
    publishProgress((int) (total * 100/fileLength)); 

    out.write(data, 0, count); 
} 

ループに費やされ、

while ((count = input_File.read(data)) != -1 && !isCancelled()) { 

    total += count; 
    publishProgress((int) (total * 100/fileLength)); 

    out.write(data, 0, count); 
} 

を呼び出してダウンロードをキャンセル
yourAsyncTask.cancel() 
+0

しかし、どうすれば追加できますか通知の "キャンセルボタン"? –

+0

http://stackoverflow.com/a/16195981/493321これには良い答えがあります – basilisk

+0

ここには3種類の通知があります。 http://www.androidwarriors.com/2016/05/android-notification-example-android.html –

0

あなたはasynを取り消すことができますctask強制的に

は、Checkこの

は、あなたの活動にごasyncTaskを宣言:

private YourAsyncTask mTask; 

インスタンス化、それを次のように:

mTask = new YourAsyncTask().execute(); 

キル/このようにそれを取り消す:

mTask.cancel(true); 
関連する問題