2012-12-12 3 views
1

휴대 전화 메모리에 새 폴더 "MyFolder"를 만들고 해당 폴더에 캡처 한 모든 이미지를 저장하는 방법은 무엇입니까? 도와주세요. 다음 코드는 모든 이미지를 Phone의 기본 이미지 갤러리에 저장합니다. 새 폴더를 만들고 해당 폴더에 캡처 한 모든 이미지를 저장하고 싶습니다. 나는 어떻게해야합니까? 이 도울 수 있다면휴대 전화의 폴더를 만들고 이미지를 저장하는 방법

public class PhotoCaptureExample extends Activity 
    { 
protected Button _button; 
protected ImageView _image; 
protected TextView _field; 
protected String _path; 
protected boolean _taken; 

protected static final String PHOTO_TAKEN = "photo_taken"; 

@Override 
    public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    _image = (ImageView) findViewById(R.id.image); 
    _field = (TextView) findViewById(R.id.field); 
    _button = (Button) findViewById(R.id.button); 
    _button.setOnClickListener(new ButtonClickHandler()); 
    ; 
    _path = Environment.getExternalStorageDirectory() + "/myfolder 
/"+System.currentTimeMillis()+".jpg"; 




    File dir = new File(_path); 
    try{ 
     if(dir.mkdir()) { 
     System.out.println("Directory created"); 
     } 
     else { 
     System.out.println("Directory is not created"); 
     }} 
     catch(Exception e){ 

    } 



















} 

public class ButtonClickHandler implements View.OnClickListener 
{ 
    public void onClick(View view){ 
     Log.i("MakeMachine", "ButtonClickHandler.onClick()"); 
     startCameraActivity(); 
    } 
} 

protected void startCameraActivity() 
{ 
    Log.i("MakeMachine", "startCameraActivity()"); 
    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, 0); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    Log.i("MakeMachine", "resultCode: " + resultCode); 
    switch(resultCode) 
    { 
     case 0: 
      Log.i("MakeMachine", "User cancelled"); 
      break; 

     case -1: 
      onPhotoTaken(); 
      break; 
    } 
} 

protected void onPhotoTaken() 
{ 
    Log.i("MakeMachine", "onPhotoTaken"); 

    _taken = true; 

    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 4; 

    Bitmap bitmap = BitmapFactory.decodeFile(_path, options); 

    _image.setImageBitmap(bitmap); 

    _field.setVisibility(View.GONE); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState){ 
    Log.i("MakeMachine", "onRestoreInstanceState()"); 
    if(savedInstanceState.getBoolean(PhotoCaptureExample.PHOTO_TAKEN)) { 
     onPhotoTaken(); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putBoolean(PhotoCaptureExample.PHOTO_TAKEN, _taken); 
} 
} 
+0

전화 기본 이미지 겔러리와 카메라 의도에 제공 한 경로에 중복 이미지가 생성되는지 확인하고 확인하십시오. –

+0

새 폴더를 어떻게 만듭니 까? phne 기본 갤러리 –

+0

에 wana를 저장하면 코드가 'myfolder'라는 새 폴더를 생성 할 수 없습니까? –

답변

0

당신은 폴더를 만들 매니페스트 파일에 다음과 같은 권한이 필요합니다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 

업데이트 :

package com.test; 

import java.io.File; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 


public class CameraTest extends Activity 
{ 
    protected Button _button; 
    protected ImageView _image; 
    protected TextView _field; 
    protected String _path; 
    protected boolean _taken; 

protected static final String PHOTO_TAKEN = "photo_taken"; 

@Override 
    public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.camtest); 

    _image = (ImageView) findViewById(R.id.image); 
    _field = (TextView) findViewById(R.id.field); 
    _button = (Button) findViewById(R.id.button); 
    _button.setOnClickListener(new ButtonClickHandler()); 
    // _path = Environment.getExternalStorageDirectory() + "/NewFolder/"+System.currentTimeMillis()+".jpg"; 

    _path = "/sdcard/NewFolder/test1.jpg"; 


    String dir = "/sdcard/NewFolder/"; 
    File imageDirectory = new File(dir); 
    imageDirectory.mkdirs(); 

    /* File dir = new File(_path); 
    try{ 
     if(dir.mkdir()) { 
     System.out.println("Directory created"); 
     } 
     else { 
     System.out.println("Directory is not created"); 
     }} 
     catch(Exception e){ 

    } */ 
} 

public class ButtonClickHandler implements View.OnClickListener 
{ 
    public void onClick(View view){ 
     Log.i("MakeMachine", "ButtonClickHandler.onClick()"); 
     startCameraActivity(); 
    } 
} 

protected void startCameraActivity() 
{ 
    Log.i("MakeMachine", "startCameraActivity()"); 
    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, 0); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    Log.i("MakeMachine", "resultCode: " + resultCode); 
    switch(resultCode) 
    { 
     case 0: 
      Log.i("MakeMachine", "User cancelled"); 
      break; 

     case -1: 
      onPhotoTaken(); 
      break; 
    } 
} 

protected void onPhotoTaken() 
{ 
    Log.i("MakeMachine", "onPhotoTaken"); 

    _taken = true; 

    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 4; 

    Bitmap bitmap = BitmapFactory.decodeFile(_path, options); 

    _image.setImageBitmap(bitmap); 

    _field.setVisibility(View.GONE); 
} 


} 

이 나를 위해 완벽하게 작동합니다.

이 코드를 확인하십시오.

희망이 도움이됩니다.

감사합니다.

+0

은 내가 이런 짓을하고 폴더 안녕하세요 세계 BT 영상 전화 이미지 gellery에 보호 무효 startCameraActivity()를 저장할 수있다 저장하지 내 SD 카드를 만들 { \t Log.i ("MakeMachine", "startCameraActivity()") ; \t \t \t 파일 디렉토리 = new File (Environment.getExternalStorageDirectory() + File.separator + "helloworld"); directory.mkdirs(); \t \t 인 텐트 intent = 새로운 인 텐트 (android.provider.MediaStore.ACTION_IMAGE_CAPTURE); \t intent.putExtra (MediaStore.EXTRA_OUTPUT, directory); \t \t startActivityForResult (인 텐트, 0); } –

+0

내가 게시 한 수정 된 솔루션을 살펴보십시오. 그것은 잘 작동하고 폴더가 생성 된 것을 볼 수 있으며 이미지도 해당 폴더에 저장됩니다. 그리고 마침내 나는 사용한 이미지 뷰에서 이미지를 캡쳐 할 것입니다. –

+0

sdcard 슬롯이없는 장치가 있으면 어떻게됩니까? 보기가 있고 폴더를 만들고 전화 메모리에 이미지를 저장하려고합니다. 제발 도와주세요. –

0

확인,

File mydir = context.getDir("mydir", Context.MODE_PRIVATE); //Creating an internal dir; 
File fileWithinMyDir = new File(mydir, "myfile"); //Getting a file within the dir. 
FileOutputStream out = new FileOutputStream(fileWithinMyDir); //Use the stream as usual to write into the file. 
+0

context.getDir이 줄에 오류 컨텍스트가 표시되지 않음을 표시합니다. –

+0

이 코드에 무엇을 쓰는지 Uri outputFileUri = Uri.fromFile (file); –

+0

대신 응용 프로그램의 컨텍스트를 사용하십시오. –

0

코드는 사용할 수 있지만이 디렉토리를 먼저 만들어야합니다.

관련 문제