如何在/ DCIM / Camera上获取图像文件数组?

时间:2015-12-13 08:03:25

标签: java android

我正在尝试将图像放在默认图像位置,并将文件名打印到TextView中。

当我尝试访问目录时,我总是在listFiles上获得nullpointerexception。我已经尝试了几种方法来获取目录路径,但似乎没有任何工作。

我甚至在清单中设置了权限。 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final String NEW_LINE = "\n";

    final Button button = (Button) findViewById(R.id.renameImgBtn);
    final TextView textView = (TextView) findViewById(R.id.textView);

    textView.setMovementMethod(new ScrollingMovementMethod());

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            File camDir = new File("/sdcard/DCIM/"); // wtf is this supposed to be!?

            textView.append(camDir.getAbsolutePath() + NEW_LINE);
            if (camDir == null) {
                textView.append("camDir is null" + NEW_LINE);
            } else {
                textView.append("camDir is not null" + NEW_LINE);

                // get nullpointerexception on listFiles
                File[] files = camDir.listFiles();
                if (files == null) {
                    textView.append("files is null" + NEW_LINE);
                } else {
                    for (final File file : files) {
                        textView.append(file.getName() + NEW_LINE);
                    }
                }
            }
        }
    });
}

我正在使用Nexus 6P,图像位于DCIM / Camera /。

2 个答案:

答案 0 :(得分:2)

首先,DCIM目录由DIRECTORY_DCIM定义,并应与Environment.getExternalStoragePublicDirectory()结合使用:

File camDir = Environment.getExternalStoragePublicDirectory(
    Environment.DIRECTORY_DCIM);

其次,当您使用Marshmallow设备时,如果您定位API 23,则必须request dangerous permissions at runtime - READ_EXTERNAL_STORAGE是危险权限,并且属于这些规则。

答案 1 :(得分:0)

你能用

吗?
File camDir = new File("/sdcard0/DCIM/");

File camDir = new File("/sdcard1/DCIM/");

并检查文件是否为空并退出true。