当用户没有SD卡时,无法存储文件

时间:2013-12-12 19:11:27

标签: android file android-camera

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

当我检查外部存储器上的可用空间时,它返回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卡时,存储图像文件的最佳方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

我用它来创建新文件,它可以使用和不使用SD卡。