public class MainActivity extends ActionBarActivity {
private DownloadManager manager;
private DownloadManager.Request request;
private Uri uri;
private long latestId=0;
boolean downloading=false;
private PowerManager.WakeLock mWakeLock;
ProgressDialog mProgressBar;
String urlAdd="다운로드경로";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProgressBar=new ProgressDialog(MainActivity.this);
}
public void downloadButton(View v) {
manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
uri = Uri.parse(urlAdd);
List<String> pathSegments = uri.getPathSegments();
request = new DownloadManager.Request(uri);
request.setTitle("다운로드 진행중");
request.setDescription("AAA");
request.setDestinationInExternalPublicDir("/Download", pathSegments.get(pathSegments.size() - 1));
Environment.getExternalStoragePublicDirectory("/Download").mkdirs();
latestId = manager.enqueue(request);
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
mWakeLock.acquire();
mProgressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressBar.setButton(DialogInterface.BUTTON_NEGATIVE, "취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
downloading = false;
manager.remove(latestId);
mProgressBar.cancel();
}
});
mProgressBar.show();
new Thread(new Runnable() {
@Override
public void run() {
downloading = true;
int abc;
while (downloading) {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(latestId);
Cursor cursor = manager.query(q);
cursor.moveToNext();
int byte_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
int byte_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
downloading = false;
}
try {
abc = (int) ((byte_downloaded * 100l) / byte_total);
} catch (Exception e) {
abc = 0;
}
final int dl_progree = abc;
runOnUiThread(new Runnable() {
@Override
public void run() {
mProgressBar.setProgress((int) dl_progree);
}
});
}
}
}).start();
}
private BroadcastReceiver completeReceiver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this,"다운로드완료",Toast.LENGTH_LONG).show();
mProgressBar.dismiss();
}
}
@Override
protected void onPostResume() {
super.onPostResume();
IntentFilter completeFilter=new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
registerReceiver(completeReceiver, completeFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(completeReceiver);
}
초보자입니다..여기저기 알아보며..
다운로드매니저를 통해 다운을 받고 진행과정을 ProgressDialog로 나타내주는것 까지 완성했습니다
다이얼로그에 취소버튼을 비치시키고 취소버튼을 누르면 다운로드중인걸 취소시키는걸 하려고하는데
취소버튼이 한번내지 두번은 정상작동하고 그다음 취소 시 튕기며, 아예 처음부터 튕기는 현상이 발생합니다
에러가 나는 곳은 빨간줄 친 곳인데 혼자서 해결해보려했는데 한계가 있어서 글 올립니다.
원인이 뭔지 알고싶습니다