хранить изображение во внутренней памяти в Android - PullRequest
1 голос
/ 24 апреля 2011

Сейчас я работаю над приложением, которое запускает камеру и делает снимок, я не использовал активность камеры, но написал приложение для камеры и хочу сохранить снятое изображение во внутреннем хранилище телефона в папке с именем "temPic"."

Следующий код генерирует папку и изображение, но когда я проверил tempPic, я нашел изображение с именем image1.jpg, и его размер составляет 461115 (я попытался сохранить изображение в каталоге SDcard, и этотакого же размера), но когда я дважды щелкнул по нему, появилось черное изображение, а не полученное, хотя в SDcard я его открыл !!!

FileManipulator fileFormat = new FileManipulator(
                getApplicationContext());
        String path = fileFormat.createFolder_PStrg("tempPic") + "/image1.jpg";     
        File file = new File(path);
        Uri outputFileUri = Uri.fromFile(file);

        OutputStream imageFileOS;
        try {


            imageFileOS = getContentResolver().openOutputStream(outputFileUri);
            imageFileOS.write(arg0);
            imageFileOS.flush();
            imageFileOS.close();
            Toast.makeText(AndroidCamera.this, 
                    file.length()+"", 
                    Toast.LENGTH_LONG).show();
            Toast.makeText(AndroidCamera.this, 
                    "Image saved: " + outputFileUri.toString(), 
                    Toast.LENGTH_LONG).show();

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

        camera.startPreview();

Ответы [ 2 ]

8 голосов
/ 24 апреля 2011

Не знаю, может ли это вам помочь, но именно так я сохраняю файл на SD-карту, и он работает.

        public void saveToSD(Bitmap outputImage){


            File storagePath = new File(Environment.getExternalStorageDirectory() + "/MyPhotos/"); 
            storagePath.mkdirs(); 

            File myImage = new File(storagePath, Long.toString(System.currentTimeMillis()) + ".jpg");

            try { 
                FileOutputStream out = new FileOutputStream(myImage); 
                outputImage.compress(Bitmap.CompressFormat.JPEG, 80, out); 
                out.flush();    
                out.close();
            } catch (Exception e) { 
                e.printStackTrace(); 
            }               
        }
0 голосов
/ 25 апреля 2011

Почему бы вам не использовать действия с камерой и не сохранять изображения во внутреннем хранилище, создав временную папку с разрешением на запись, которая позволит другому приложению записывать в эту папку и переносить изображение в его путь, а затем после возвращения с действия камеры можно переместить изображение в другую папку внутреннего хранилища, но с личным разрешением, как указано



//the temp folder to start the camera activity with
String path = getDir("images", Context.MODE_WORLD_WRITEABLE).getPath() + "/test.jpg";

//start the camera activity
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);

Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, CAMERA_ACTIVITY);

и в методе onActivityResult переместите его в папку с личным разрешением, он будет работать нормально, как я это проверял

...