android将图片保存到内部存储器的麻烦

我正在为学校编写一个应用程序,其中最大的部分是拍照。 我得出的结论是,如果我可以将它们保存在内部存储上,这将是完美的,因此它们将在卸载过程中自动删除。

我遇到了几个代码示例,证明我没有简单的方法来做到这一点(并且我意识到在外部存储器上保存图像也是一块蛋糕)。 但是,我设法找到了这样一个问题:编写内部存储器android时遇到了麻烦,并且提出了类似的问题。 经过一段时间的测试后,我遇到了“无法恢复活动”异常,但幸运的是我发现了一个调整:Android中的相机意图问题的图像

现在我的代码如下所示:

private void dispatchTakePictureIntent(int actionCode) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), FITPAL_TEMP_PICTURE_NAME);
    Uri outputFileUri = Uri.fromFile(file);

    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
    startActivityForResult(takePictureIntent, actionCode);
}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case ACTION_TAKE_PHOTO_B: {
        if (resultCode == RESULT_OK) {
            File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), FITPAL_TEMP_PICTURE_NAME);
            Bitmap picture = BitmapFactory.decodeFile(file.getAbsolutePath());

            if (picture == null) {
                showShortToast(R.string.problem_with_taking_a_picture);
                return;
            }

            File dir = getDir(Environment.DIRECTORY_PICTURES, Context.MODE_PRIVATE);
            File internalFile = null;

            internalFile = new File(dir, generateUniqueFilename());
            internalFile.setReadable(true);
            internalFile.setWritable(true);
            internalFile.setExecutable(true);
            try {
                internalFile.createNewFile();

                FileOutputStream fos = new FileOutputStream(internalFile);
                BufferedOutputStream bos = new BufferedOutputStream(fos);

                picture.compress(Bitmap.CompressFormat.JPEG, JPEG_FILE_QUALITY, bos);

                bos.flush();
                bos.close();

                String filePath = internalFile.getAbsolutePath();
                pictureFilePaths.add(filePath);
                addPictureThumbnail(filePath);

                Log.d("mounted?", "" + Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED));
                Log.d("delete test 23123123", "" + file.getAbsolutePath() + " " + file.delete());
            } catch (Exception e) {
                Log.e("eks", e.getMessage());
                showShortToast(R.string.problem_with_taking_a_picture);
            }
        }
        else if (resultCode == RESULT_CANCELED) {
            showShortToast(R.string.taking_picture_has_been_cancelled);
        }
        break;
    }
    default:
        break;
    }
}

基本上我想要做的是写一个图片到外部存储并将其移动到内部存储。 它在80%的情况下工作,不是100%,因为它有时只是“重置”活动 - 新的空白布局显示出来,就像它刚刚创建一样。 我不知道发生了什么。 我意识到onSaveInstanceState和onRestoreInstanceState都是在这种情况下触发的,我不知道为什么(在这种情况下不会抛出异常)。

调用所有代码的活动正在扩展FragmentActivity。 我读过一些错误,可能会导致旧版本的Android支持包,但我刚刚更新到版本13,问题仍然存在。

另一件事是保存在外部存储上的文件不会被删除 - file.delete()总是返回false 。 这是我没有SD卡的问题吗? (我的意思是我手机中有一个插槽,但我只有16GB的内部存储空间)。 该文件被保存到/ mnt / sdcard /图片/文件夹,就好像它以某种方式被模拟一样。

提前的问题:我同时设置了android.permission.READ_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE权限:

我尝试用getCacheDirgetExternalCacheDir替换Environment.getExternalStoragePublicDirectory ,它们都不工作。

我正在用Android 4.0.4(股票)测试我的三星Galaxy SII上的所有东西,

链接地址: http://www.djcxy.com/p/67505.html

上一篇: android trouble with saving pictures to internal memory

下一篇: Android Internal Storage error