【问题标题】:Cannot store a file when a user doesn't have an SD card当用户没有 SD 卡时无法存储文件
【发布时间】:2013-12-31 09:01:05
【问题描述】:

我有一个可以从相机拍照的应用程序,但是当用户将内部存储设置为默认时,我遇到了外部存储问题。

当我检查外部存储上的可用空间时,它返回 0 字节空闲,但内部存储有 10GB 可用空间。这是我的代码。

                Intent takePictureIntent = new Intent(
                    MediaStore.ACTION_IMAGE_CAPTURE);

            StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
            double sdAvailSize = (double)stat.getAvailableBlocks()
                               * (double)stat.getBlockSize();

            if(!Utils.isExternalStorageWritable()) {
                Toast.makeText(AddActivity.this, R.string.external_storage_not_available, Toast.LENGTH_LONG).show();
            }
            else if(sdAvailSize / 1024L >  10000) {
                Toast.makeText(AddActivity.this, R.string.not_enough_free_space, Toast.LENGTH_LONG).show();
            }
            else {

                File exportDir = new File(Environment.getExternalStorageDirectory()
                        .getAbsolutePath() + APP_PATH_SD_CARD, "");

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

                imagePath = Calendar.getInstance().getTimeInMillis() + ".jpg";
                final File file = new File(exportDir, imagePath);

                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                 // Create the storage directory if it does not exist
                if (! file.exists()){
                    Log.d("App", "failed to create directory");
                }

                System.out.println("Dir exists: " + exportDir.exists());
                System.out.println("File exists: " + file.exists());

                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(file));
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }

当我不检查可用空间并开始拍照活动时,我可以拍照,但“确定”按钮不起作用。

当用户没有 SD 卡时,存储图像文件的最佳方式是什么?

提前致谢。

【问题讨论】:

    标签: android file android-camera


    【解决方案1】:

    我在这里发布了一个用于获取存储目录的代码:Storing .txt files on Android

    我用它来创建新文件,它可以在有和没有 SD 卡的情况下使用。

    【讨论】:

    • 我想这里有两个外部存储。一是手机,二是SD卡,手机没有空间,怎么把照片存到SD卡?
    • 我发布的代码,首先尝试获取sd卡,然后如果失败则获取手机存储。
    • 我尝试了您的解决方案,但它对我不起作用。顺便说一句,我不能将缓存目录用于以后需要的文件。
    • 你能发布日志猫发生了什么吗?为什么不能使用缓存目录供以后文件使用?我用它很多应用程序。此外,您可以根据需要选择其他目录吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多