如何在Android中显示进度条中的下载进度?

前端之家收集整理的这篇文章主要介绍了如何在Android中显示进度条中的下载进度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用.net网络服务,我可以在SD卡中下载文件,但我想在特定文件开始下载和完成时显示进度条,然后我想显示视图和取消等选项.

点击事件类:

public void onItemClick(AdapterView<?> parent,View v,int position,long id)
{
    LazyAdapter ca = (LazyAdapter)parent.getAdapter();
    FolderList item_name = (FolderList)ca.getItem(position);
    FolderList DocumentID = (FolderList)ca.getItem(position);
    FolderList type = (FolderList)ca.getItem(position);

    Intent mIntent = new Intent();  
    mIntent.putExtra("item_name",item_name.folder_name);
    mIntent.putExtra("item_id",DocumentID.ID);
    mIntent.putExtra("item_type",type.type);

    mIntent.getStringExtra("item_name");

    String Type = mIntent.getStringExtra("item_type");

    Log.i("Type",Type);

    if {
       // Some code here...
    } else {
        Intent i = new Intent(getApplicationContext(),Display_image.class);
        i.putExtra("item_name",item_name.folder_name);
        i.putExtra("ID",DocumentID.ID);
        i.putExtra("item_type",type.type);
        i.putExtra("User_ID",User_ID);

        i.getStringExtra("item_name");
        Id = i.getStringExtra("ID");
        i.getStringExtra("item_type");
        startActivity(i);
    }
}

我的代码:我想使用下载管理器

SoapPrimitive DocumentResponse = (SoapPrimitive)Envelope.getResponse();
        Log.i("DocumentResponse",DocumentResponse.toString());

        String DocAsString = DocumentResponse.toString();

        byte[] decodedString = Base64.decode(DocAsString,Base64.DEFAULT);

         File direct = new File(Environment.getExternalStorageDirectory() + "/MyFolder");

         if(!direct.exists())
         {
           direct.mkdir();
         }
        File photo = new File(Environment.getExternalStorageDirectory() + "/MyFolder",Name);

         if (photo.exists())
         {
           photo.delete();
         }
     try {

         DownloadManager.Request request = new DownloadManager.Request(Uri.parse(Name));
         request.setDescription("Have Fun ;)");
         request.setTitle("Downloading...");
         // in order for this if to run,you must use the android 3.2 to compile your app
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
             request.allowScanningByMediaScanner();
             request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
         }

       FileOutputStream fos=new FileOutputStream(photo.getPath());
       fos.write(decodedString);
       fos.close();

       DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
       manager.enqueue(request);

       ContentValues values= new ContentValues();

       System.out.println(values);

     }
     catch (java.io.IOException e) 
     {
       Log.e("PictureDemo","Exception in photoCallback",e);
     }
    }

请建议如何使用下载管理器?谢谢

解决方法

您可以使用ProgressBar来完成此任务.

首先,在您的界面中添加一个进度条,如下所示:

<ProgressBar
    android:id="@+id/progress_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@android:style/Widget.ProgressBar.Small"/>

然后在您的代码中更新您的方法,如下所示:

protected ProgressBar mProgressBar;
protected long downloadId;
protected DownloadManager manager;

public void startdownload() {
    //<SET UP DOWNLOAD MANAGER HERE>
    downloadId = manager.enqueue(request);
    mProgressBar = findViewById(R.id.progress_bar);
    Timer myTimer = new Timer();
    myTimer.schedule(new TimerTask() {          
        @Override
            public void run() {
            DownloadManager.Query q = new DownloadManager.Query();
            q.setFilterById(downloadId);
            Cursor cursor = manager.query(q);
            cursor.moveToFirst();
            int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
            int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
            cursor.close();
            int dl_progress = (bytesDownloaded * 1f / bytesTotal) * 100;
            runOnUiThread(new Runnable(){
                @Override
                public void run(){
                    mProgressbar.setProgress((int) dl_progress);
                }
            });    
        }
    },10);
}

猜你在找的Android相关文章