如何避免API级警告?

时间:2014-08-29 09:37:54

标签: android android-notifications android-download-manager

我试图制作一个下载文件的方法,但是在请求中的方法内部,它调用了一个显示下载通知的函数。问题是我的应用程序所需的最小api是API 9,并且IDE显示错误,因为setNotificationVisibility适用于API 11及更高版本。

这是我的源代码:

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();
    }

如何解决此问题以在两个版本中运行通知?

谢谢。

4 个答案:

答案 0 :(得分:3)

@SuppressLint("NewApi")添加到您的函数声明中,这是:

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

}

答案 1 :(得分:1)

您可以使用@SuppressLint("NewApi")解决警告,但在较低的API中,您的setNotificationVisibility将无法正常工作,因为支持包中没有DownloadManager。

答案 2 :(得分: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设备的Downloads目录。

答案 3 :(得分:1)

您应该在方法之前添加@SuppressLint("NewApi")。但是最好使用min sdk版本或者不使用这种方法。如果您添加@SuppressLint("NewApi"),请不要忘记可以使用9 api在设备上运行app的用户。