2012-06-04 7 views
1

사진을 찍으려고하는데 사용자가 버튼을 클릭하면 사진을 내부 저장 장치에 저장하려고합니다. 나는 SD 카드가없는 타블렛에서 테스트 할 것입니다. 나는 또한 안드로이드에 사진을 찍는 것이 처음이다. 그리고 웹은 SD 카드가 아닌 다른 곳에 그것을 쓰는 데 필요한 특정 코드를 찾는데 도움이되지 못했다. 내 카메라. 자바가 어떻게 생겼는지.사진을 찍어 내부 저장 장치에 저장하십시오.

package com.test; 

import com.test.R; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.Activity; 

import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.hardware.Camera.ShutterCallback; 

import android.os.Bundle; 

import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.FrameLayout; 

public class camera extends Activity 
{ 
    private static final String TAG = "CameraDemo"; 
     Camera camera; 
     Preview preview; 
     Button buttonClick; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.camera); 

     preview = new Preview(this); 
     ((FrameLayout) findViewById(R.id.preview)).addView(preview); 

     buttonClick = (Button) findViewById(R.id.buttonClick); 
     buttonClick.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); 
      } 
     }); 

     Log.d(TAG, "onCreate'd"); 
    } 


    ShutterCallback shutterCallback = new ShutterCallback() { 
     public void onShutter() { 
      Log.d(TAG, "onShutter'd"); 
     } 
    }; 

    /** Handles data for raw picture */ 
    PictureCallback rawCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.d(TAG, "onPictureTaken - raw"); 
     } 
    }; 

    /** Handles data for jpeg picture */ 
    PictureCallback jpegCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      FileOutputStream outStream = null; 
      try { 
       // write to local sandbox file system 
       outStream = camera.this.openFileOutput(String.format("%d.jpg", System.currentTimeMillis()), 0); 
       // Or write to sdcard 
       //outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
       outStream.write(data); 
       outStream.close(); 
       Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
      } 
      Log.d(TAG, "onPictureTaken - jpeg"); 
     } 
    }; 

} 
+1

참고로 이동식 외부 저장소를 지원하지 않는 대부분의 장치에는 API 호출을 통해 찾을 수있는 납땜 된 플래시로 할당 된 "외부 저장소"가 있습니다. 예외가있을 수 있지만, 존재하지 않을 수있는 이동식 카드에 의존하는 장치의 경우는 물론, 연결된 파티션에서 원격으로 액세스 할 수 있기 때문에 저장소 파티션을 사용할 수없는 경우도 있습니다. PC. –

답변

2

해당 코드로 어떤 종류의 문제가 발생하는지는 명확하지 않습니다. 파일을 여는 방식이 문제가 없으므로 잘못된 방식으로 작동하는 것일 수 있습니다. 섹션에 대한 saving files that should be shared이 상황에 유용 할 수 있습니다 특히 http://developer.android.com/guide/topics/data/data-storage.html

:

안드로이드 문서의이 페이지는 응용 프로그램에 사용 가능한 스토리지의 다른 종류를 사용하는 방법에 대한 자세한 내용이 있습니다. "외부 저장소"를 참조하지만 많은 장치가 내부 저장소를 사용하여 외부 저장소를 시뮬레이션하므로 개발자는 걱정할 필요가 없습니다.

시스템의 갤러리 앱에서 사진을 볼 수있게하려면 MediaScannerConnection.scanFile을 사용하여 미디어 스캔에 추가 할 수 있습니다. 그래도 openFileOutput을 사용하여 앱의 개인 저장 용량에 파일을 저장하는 경우에는 작동하지 않을 수 있습니다.

0

CommonsAware의 Github 페이지에서 Picture Demo 샘플을 볼 수 있습니다. 유용 할 수도 있습니다.

관련 문제