0

在我的应用程序中,我使用下面的代码列出Movies存储文件夹中的电影。但是,由于我将 Nexus 7 平板电脑升级到 Android 4.4,此代码无法正常工作(代码末尾的 toast 弹出意味着代码在该文件夹中没有找到任何文件,即使它可以访问该文件夹,我也不知道)。知道我应该更改什么或在新更新中更改了什么吗?

    private void populateSpinners() {

        Boolean foundVideoFiles;

        // videos spinner
        File videoFolder =
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
                        .getAbsoluteFile();

        if (videoFolder.listFiles() != null) {
            foundVideoFiles = true; //found some files
            ArrayAdapter<File> movieAdapter = new ArrayAdapter<File>(this,
                    android.R.layout.simple_spinner_dropdown_item, videoFolder.listFiles());
            _spinner_videos.setAdapter(movieAdapter);

            //Restore perviously selected video
            int spinnerValue = _preferences.getInt("spinner_videos", -1);
            if (spinnerValue != -1) {
                _spinner_videos.setSelection(spinnerValue);
            }
        } else {
            foundVideoFiles = false;
        }

        //Error handling
        if (foundVideoFiles == false) {
            Toast.makeText(this, "ERROR: NO MOVIES WERE FOUND IN" + videoFolder, Toast.LENGTH_LONG).show();
        }
}

如果我使用平板电脑上的 Gallery 应用程序,我可以在那里看到电影,因此电影在更新过程中没有被删除。

4

1 回答 1

5

请注意,从 Android 4.4 开始(根据Android 4.4 重要行为更改

在 Android 4.4 上运行时,您的应用无法读取外部存储上的共享文件,除非您的应用具有READ_EXTERNAL_STORAGE权限。也就是说,getExternalStoragePublicDirectory()返回的目录中的文件在没有权限的情况下不再可以访问。

确保将该权限添加到您的清单中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
于 2013-11-23T21:32:39.000 回答