91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 下載文件通知欄顯示進度條功能的實例代碼

發布時間:2020-10-01 19:47:04 來源:腳本之家 閱讀:330 作者:一個達布妞 欄目:移動開發

1、使用AsyncTask異步任務實現,調用publishProgress()方法刷新進度來實現(已優化)

public class MyAsyncTask extends AsyncTask<String,Integer,Integer> {
  private Context context;
  private NotificationManager notificationManager;
  private NotificationCompat.Builder builder;
  public MyAsyncTask(Context context){
    this.context = context;
    notificationManager = (NotificationManager) context.getSystemService(Activity.NOTIFICATION_SERVICE);
    builder = new NotificationCompat.Builder(context);
  }
  @Override
  protected void onPreExecute() {
    super.onPreExecute();
    builder.setSmallIcon(R.mipmap.ic_launcher)
        .setContentInfo("下載中...")
        .setContentTitle("正在下載");
  }
  @Override
  protected Integer doInBackground(String... params) {
    Log.e(TAG, "doInBackground: "+params[0] );
    InputStream is = null;
    OutputStream os = null;
    HttpURLConnection connection = null;
    int total_length = 0;
    try {
      URL url1 = new URL(params[0]);
      connection = (HttpURLConnection) url1.openConnection();
      connection.setRequestMethod("GET");
      connection.setReadTimeout(50000);
      connection.connect();
      if(connection.getResponseCode() == 200){
        is = connection.getInputStream();
        os = new FileOutputStream("/sdcard/zongzhi.apk");
        byte [] buf = new byte[1024];
        int len;
        int pro1=0;
        int pro2=0;
        // 獲取文件流大小,用于更新進度
        long file_length = connection.getContentLength();
        while((len = is.read(buf))!=-1){
          total_length += len;
          if(file_length>0) {
            pro1 = (int) ((total_length / (float) file_length) * 100);//傳遞進度(注意順序)
          }
          if(pro1!=pro2) {
            // 調用update函數,更新進度
            publishProgress(pro2=pro1);
          }
          os.write(buf, 0, len);
        }
      }
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      try {
        if (is != null) {
          is.close();
        }
        if (os != null) {
          os.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
      if (connection != null) {
        connection.disconnect();
      }
    }
    return total_length;
  }
  @Override
  protected void onCancelled(Integer integer) {
    super.onCancelled(integer);
  }
  @Override
  protected void onCancelled() {
    super.onCancelled();
  }
  @Override
  protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);
    builder.setProgress(100,values[0],false);
    notificationManager.notify(0x3,builder.build());
    //下載進度提示
    builder.setContentText("下載"+values[0]+"%");
    if(values[0]==100) {  //下載完成后點擊安裝
      Intent it = new Intent(Intent.ACTION_VIEW);
      it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      it.setDataAndType(Uri.parse("file:///sdcard/zongzhi.apk"), "application/vnd.android.package-archive");
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, it, PendingIntent.FLAG_UPDATE_CURRENT);
      builder.setContentTitle("下載完成")
          .setContentText("點擊安裝")
          .setContentInfo("下載完成")
          .setContentIntent(pendingIntent);
      notificationManager.notify(0x3, builder.build());
    }
  }
  @Override
  protected void onPostExecute(Integer integer) {
    super.onPostExecute(integer);
    if(integer == 100) {
      Toast.makeText(context, "下載完成", Toast.LENGTH_SHORT).show();
    }
  }
}

2、使用系統服務來實現(不是特別推薦此方法)

//取得系統的下載服務
    DownloadManager downloadManager= (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    //創建下載請求對象
    DownloadManager.Request request=new DownloadManager.Request(Uri.parse(downUrl));
    request.setDestinationInExternalPublicDir("目錄","文件名");
    request.setNotificationVisibility(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    downloadManager.enqueue(request);

總結

以上所述是小編給大家介紹的Android 下載文件通知欄顯示進度條功能的實例代碼,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桑日县| 古浪县| 南通市| 海晏县| 习水县| 潜山县| 周口市| 迭部县| 庄河市| 洛宁县| 南澳县| 自治县| 隆安县| 冷水江市| 白山市| 五家渠市| 耒阳市| 柘荣县| 闵行区| 罗江县| 宁安市| 房产| 横峰县| 西和县| 云霄县| 志丹县| 平和县| 江陵县| 临澧县| 晴隆县| 萨迦县| 日土县| 乌苏市| 万全县| 彩票| 双江| 娱乐| 霍州市| 德清县| 呼和浩特市| 铁岭市|