2014-08-29 176 views
0

我試圖做一個方法來下載文件,但在請求中的方法中,它有一個函數調用,顯示下載通知。問題是我的應用程序所需的最低api是API 9,並且IDE向我顯示錯誤,因爲setNotificationVisibility適用於API 11及更高版本。如何避免API級別警告?

這是我的源代碼:

public void init_download(String title, String filename, String url) { 
     File path = new File(Environment.DIRECTORY_DOWNLOADS); 

     if (!path.exists()) { 
      path.mkdirs(); 
     } 

     Uri downloadUri = Uri.parse(url); 
     DownloadManager.Request request = new DownloadManager.Request(downloadUri); 

     request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) 
       .setAllowedOverRoaming(false) 
       .setTitle(title) 
       .setDescription(getResources().getString(R.string.downloading)) 
       .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); 
       .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

     long id = downloadManager.enqueue(request); 

     //Save the request id 
     SharedPreferences.Editor PrefEdit = shared_pref.edit(); 
     PrefEdit.putLong("DOWNLOAD_ID", id); 
     PrefEdit.commit(); 
    } 

我該如何解決這兩個版本中運行的通知?

謝謝。

回答

3

添加@SuppressLint("NewApi")您functioin的聲明,這是:

@SuppressLint("NewApi") 
public void init_download(String title, String filename, String url) { 

} 
1

你能解決這個警告與@SuppressLint("NewApi")但在較低的API的你setNotificationVisibility將無法工作,因爲在支持軟件包沒有下載管理器。

+0

另一個問題是通知只顯示幾毫秒,但它不會保留在狀態欄中。 – MAOL 2014-08-29 09:48:58

1

我已經改變通知的可視性解決了最後一個問題:

public void init_download(String title, String filename, String url) { 
     File path = new File(Environment.DIRECTORY_DOWNLOADS); 

     if (!path.exists()) { 
      path.mkdirs(); 
     } 

     Uri downloadUri = Uri.parse(url); 
     DownloadManager.Request request = new DownloadManager.Request(downloadUri); 

     request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) 
       .setAllowedOverRoaming(false) 
       .setTitle(title) 
       .setDescription(getResources().getString(R.string.downloading)) 
       .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
     } 
     else { 
      request.setShowRunningNotification(true); 
     } 

     long id = downloadManager.enqueue(request); 

     //Save the request id 
     SharedPreferences.Editor PrefEdit = shared_pref.edit(); 
     PrefEdit.putLong("DOWNLOAD_ID", id); 
     PrefEdit.commit(); 
    } 

這是將文件下載到Android設備的下載目錄。

1

您應該在您的方法之前添加@SuppressLint("NewApi")。但是最好升級min sdk版本或者不要使用這種方法。如果您添加@SuppressLint("NewApi"),請不要忘記可以使用9 api在設備上運行應用程序的用戶。