마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

다운로드매니저 remove 관련

0 추천

 

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로 나타내주는것 까지 완성했습니다

다이얼로그에 취소버튼을 비치시키고 취소버튼을 누르면 다운로드중인걸 취소시키는걸 하려고하는데

취소버튼이 한번내지 두번은 정상작동하고 그다음 취소 시 튕기며, 아예 처음부터 튕기는 현상이 발생합니다

에러가 나는 곳은 빨간줄 친 곳인데 혼자서 해결해보려했는데 한계가 있어서 글 올립니다.

원인이 뭔지 알고싶습니다

 

범범 (200 포인트) 님이 2015년 11월 18일 질문
범범님이 2015년 11월 18일 수정

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...