0

キャプチャした画像をSDカードのフォルダに保存したいカスタムカメラがあります。いくつかの例を見てきましたが、何らかの理由で保存するもの (フォルダーまたは画像) が得られません。以下は私のコードです。誰かが助けることができれば、それは素晴らしいことです! 私はすでに android.permission.WRITE_EXTERNAL_STORAGE をマニフェストに追加しています。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub  
                mCamera.takePicture(null, null, mPicture);
    mCamera = getCameraInstance();

        mPreview = new CameraPreview(CameraActivity.this, mCamera);
        FrameLayout preview = (FrameLayout)findViewById(R.id.camera_preview);
        preview.addView(mPreview); 
    }

    private Camera getCameraInstance() {
        // TODO Auto-generated method stub
        Camera c = null;
        try {
            c = Camera.open(); 
        } 
        catch (Exception e) {   
        }
        return c;
    }
    private PictureCallback mPicture = new PictureCallback() {
        public void onPictureTaken(byte[] datas, Camera camera) {
            // TODO Auto-generated method stub  
            File pictureFile = getOutputMediaFile();
            if (pictureFile == null) {
                return;
            } 
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(datas);
                fos.close();
            } catch (FileNotFoundException e) {  

            } catch (IOException e) {                
            }
        }

    };  

        private File getOutputMediaFile() {
            // TODO Auto-generated method stub

            File root = Environment.getExternalStorageDirectory(); 
            File myDir = new File(root + "/NewFolder/");  
            myDir.mkdirs();
            if (myDir.exists()){

            }

            Random generator = new Random(); 
            int n = 10000;
            n = generator.nextInt(n);
            String fname = "Image"+ n +".jpg";
            File file = new File (myDir, fname); 
            Uri uriSavedImage = Uri.fromFile(file);  


            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                    Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
            i.putExtra("output", uriSavedImage);
            return file;

        };
4

2 に答える 2

0

まず、マニフェストで WRITE_EXTERNAL_STORAGE 権限を提供していることを確認してください。

一部の電話では、FileOutputStream から書き込むときにファイルが自動作成されないため、次のことを試すことができます。

try {
                pictureFile.createNewFile();
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(datas);
                fos.close();
            } catch (FileNotFoundException e) {  

            } catch (IOException e) {                
            }

無関係なメモについても編集します。使用しているRandomの実装は、シード値が同じであるため、常に同じ数を返します。画像の一意の名前の代わりに System.getCurrentMillis() を試してください。

于 2013-05-24T17:23:04.310 に答える