简体   繁体   English

getExternalStorageDirectory() 到 getExternalFilesDir()

[英]getExternalStorageDirectory() to getExternalFilesDir()

So, basically I have this code (all credits to mburhman's File Explorer - https://github.com/mburman/Android-File-Explore ):所以,基本上我有这个代码(所有功劳都归功于 mburhman 的文件资源管理器 - https://github.com/mburman/Android-File-Explore ):

private File path = new File(Environment.getExternalStorageDirectory() + "");

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.start);

    loadFileList();

    showDialog(DIALOG_LOAD_FILE);

    Log.d(TAG, path.getAbsolutePath());

    readDir = (Button) findViewById(R.id.btnReadDirectory);

    readDir.setOnClickListener(this);
}
private void loadFileList() {
    try {
        path.mkdirs();
    } catch (SecurityException e) {
        Log.e(TAG, "unable to write on the sd card ");
    }

    if (path.exists()) {
        FilenameFilter filter = new FilenameFilter() {

            @Override
            public boolean accept(File dir, String filename) {
                // TODO Auto-generated method stub
                File sel = new File(dir, filename);
                // Filters based on whether the file is hidden or not
                return (sel.isFile() || sel.isDirectory())
                        && !sel.isHidden();
            }
        };

        String[] fList = path.list(filter);
        fileList = new Item[fList.length];
        for (int i = 0; i < fList.length; i++) {
            fileList[i] = new Item(fList[i], R.drawable.file_icon);

            File sel = new File(path, fList[i]);

            if (sel.isDirectory()) {
                fileList[i].icon = R.drawable.directory_icon;
                Log.d("DIRECTORY", fileList[i].file);
            } else {
                Log.d("FILE", fileList[i].file);
            }
        }

        if (!firstLvl) {
            Item temp[] = new Item[fileList.length + 1];
            for (int i = 0; i < fileList.length; i++) {
                temp[i + 1] = fileList[i];
            }
            temp[0] = new Item("Up", R.drawable.directory_up);
            fileList = temp;
        }
    } else {
        Log.e(TAG, "path does not exist");
        UIHelper.displayText(this, R.id.tvPath, "Path does not exist");
    }

    adapter = new ArrayAdapter<Item>(this,
            android.R.layout.select_dialog_item, android.R.id.text1,
            fileList) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            TextView textView = (TextView) view
                    .findViewById(android.R.id.text1);

            textView.setCompoundDrawablesWithIntrinsicBounds(
                    fileList[position].icon, 0, 0, 0);
            int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f);
            textView.setCompoundDrawablePadding(dp5);

            return view;
        }
    };
}

Sorry for it being long.对不起,时间长了。 I just want to ask why is it not possible by changing File path to:我只是想问为什么不能通过将文件路径更改为:

File path = getExternalFilesDir(null);

or how do you make it happen so I can store my files to my reserved external SD Card.或者你如何做到这一点,以便我可以将我的文件存储到我保留的外部 SD 卡中。

EDIT:编辑:

Actually, found out that I was pointing to the assets folder since I was following this blog post.实际上,自从我关注这篇博客文章以来,我发现我指向的是资产文件夹。

This is method which points to the assets folder https://gist.github.com/huxaiphaer/268b94a0e7959822fa679a7523701187这是指向资产文件夹的方法https://gist.github.com/huxaiphaer/268b94a0e7959822fa679a7523701187

It basically is possible, but the place of the external storage for your application is different on different devices (basically because some devices have the external as part of their integrated storage).这基本上是可能的,但是您的应用程序的外部存储位置在不同设备上是不同的(主要是因为某些设备将外部存储作为其集成存储的一部分)。 I have taken the code below from somewhere on SO and it works for me:我从 SO 上的某个地方获取了下面的代码,它对我有用:

private File getAbsoluteFile(String relativePath, Context context) {
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        return new File(context.getExternalFilesDir(null), relativePath);
    } else {
        return new File(context.getFilesDir(), relativePath);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM