2016-09-11 3 views
1

Могу ли я отделить DownloadManager в отдельном class? Я хочу повторно использовать его в моих нескольких class. В Volley мы можем сделать class расширение StringRequest или ImageRequest.Правильный способ разделить класс - Менеджер загрузки

Например:

public class VolleyStringRequest extends StringRequest{ 

public VolleyStringRequest(Response.Listenter<String> listener, 
          Response.ErrorListener errorListener) 
    { 
     super(Method.POST, " " , listener, errorListener); 



    } } 

я наткнулся на эту link. Все это прямо заявляет. Как я могу достичь этого в отдельном class продлениями DownloadManager?

DownloadManager dm= (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://www.google.com.tw/images/srpr/logo4w.png")); 
dm.enqueue(request); 

DownloadManager dm= (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://www.google.com.tw/images/srpr/logo4w.png")); 
dm.enqueue(request); 

ответ

0

Вы можете создать глобальный Скачать класс, который расширяет класс Application и объявить публичный метод, который принимает Ури в качестве входных данных.

class DownloadClass extends Application { 

     public void startDownload(String url) 
     { 
      DownloadManager dm= (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
      DownloadManager.Request request = new   
      DownloadManager.Request(Uri.parse(url)); 
      dm.enqueue(request); 
     } 

     } 

то везде, где вам нужно, чтобы получить доступ к этой информации, получить объект Application по:

DownloadClass download=(DownloadClass)context.getApplication(); 

download.startDownload("https://www.google.com.tw/images/srpr/logo4w.png"); 
+0

Я включу это в мой класс «Singleton». Дело в том, что я хочу сделать «Файл» внешним с этим классом. Ex: public class DownloadMyManager extends DownloadManager {} – RoCk

1

обертывания следующему downloadThroughManager(String imageUrl, Context context) метода в классе, так что вы можете использовать его в нескольких местах в вашем проекте.

public static void downloadThroughManager(String imageUrl, Context context) { 


        File path = new File(imageUrl); 
        String fileName = path.getName(); 
        final DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
        Uri uri = Uri.parse(imageUrl); 
        DownloadManager.Request request = new DownloadManager.Request(uri); 
        request.setTitle(fileName); 
        request.setDescription(fileName); 
        request.setVisibleInDownloadsUi(true); 
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); 
        long ref = downloadManager.enqueue(request); 

        IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 




     final BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       long downloadReference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 
       Log.i("GenerateTurePDfAsync", "Download completed"); 


       DownloadManager.Query query = new DownloadManager.Query(); 
       query.setFilterById(downloadReference); 

       Cursor cur = downloadManager.query(query); 

       if (cur.moveToFirst()) { 
        int columnIndex = cur.getColumnIndex(DownloadManager.COLUMN_STATUS); 



        if (DownloadManager.STATUS_SUCCESSFUL == cur.getInt(columnIndex)) { 
         String uriString = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 

         Toast.makeText(context, "File has been downloaded successfully.", Toast.LENGTH_SHORT).show(); 


        } else if (DownloadManager.STATUS_FAILED == cur.getInt(columnIndex)) { 
         int columnReason = cur.getColumnIndex(DownloadManager.COLUMN_REASON); 
         int reason = cur.getInt(columnReason); 
         switch(reason){ 

          case DownloadManager.ERROR_FILE_ERROR: 
           Toast.makeText(context, "Download Failed.File is corrupt.", Toast.LENGTH_LONG).show(); 
           break; 
          case DownloadManager.ERROR_HTTP_DATA_ERROR: 
           Toast.makeText(context, "Download Failed.Http Error Found.", Toast.LENGTH_LONG).show(); 
           break; 
          case DownloadManager.ERROR_INSUFFICIENT_SPACE: 
           Toast.makeText(context, "Download Failed due to insufficient space in internal storage", Toast.LENGTH_LONG).show(); 
           break; 

          case DownloadManager.ERROR_UNHANDLED_HTTP_CODE: 
           Toast.makeText(context, "Download Failed. Http Code Error Found.", Toast.LENGTH_LONG).show(); 
           break; 
          case DownloadManager.ERROR_UNKNOWN: 
           Toast.makeText(context, "Download Failed.", Toast.LENGTH_LONG).show(); 
           break; 
          case DownloadManager.ERROR_CANNOT_RESUME: 
           Toast.makeText(context, "ERROR_CANNOT_RESUME", Toast.LENGTH_LONG).show(); 
           break; 
          case DownloadManager.ERROR_TOO_MANY_REDIRECTS: 
           Toast.makeText(context, "ERROR_TOO_MANY_REDIRECTS", Toast.LENGTH_LONG).show(); 
           break; 
          case DownloadManager.ERROR_DEVICE_NOT_FOUND: 
           Toast.makeText(context, "ERROR_DEVICE_NOT_FOUND", Toast.LENGTH_LONG).show(); 
           break; 

         } 
        } 
       } 
      } 

     }; 


     context.registerReceiver(receiver, filter); 
     } 
+0

Нужно ли мне расширять DownloadManager? Если я завершу его классом? И в том же классе я сделаю путь «Файл». Вы получили мою идею вопроса. – RoCk

+1

@RoCk вам не нужно расширять 'DownloadManager', просто вставьте этот код в любой пользовательский класс и передайте' context' и 'url' в методе. –

+0

@RoCk принять этот ответ, если он полезна. –