2012-01-03 3 views
1

지금까지 내 앱에서 SD 카드에 새 폴더를 만들고 새 폴더에 pictuers를 저장하는 사진을 찍었습니다.새로운 활동에서 Android 디스플레이 카메라 이미지

사진을 찍은 후에는 "사용"또는 "다시 촬영"이라고 표시된 두 개의 버튼이있는 새로운 활동에 표시됩니다. 지금까지 이미지 저장은 완벽하게 잘 작동하지만 일단 이미지를 가져 와서 새로운 Activity를 열면 Camera Activity에 그대로 유지되고 표면보기가있는만큼 사용할 수없는 이미지가 표시됩니다.

내 LogCat에서 그림을 찾을 수없는 경우 표시하도록 설정된 "오, 참조 없음"오류가 발생합니다. 그 이유는 내가 올바른 위치에서 사진을 호출하지 않기 때문일 수 있습니다. 내 Punch.java에.

그래서 나는 새로운 활동 "Punch.java"를 열고 방금 찍은 이미지를 표시하기 위해 이미지를 앱에 가져 가려고했습니다. Lumis에

UPDATE 감사 (아래 코드는 업데이트되었습니다)

여전히 수 없습니다 지금 새로운 활동을 엽니 다

intent.putExtra("filepath",uriSavedImage.toString());

intent.putExtra("filepath",uriSavedImage);

을 변경하지만, 이미지를 참조하십시오.

UPDATE 2 Punch.java

나는 내가 그 이미지를 볼 수 있지만 난 그냥 있던 이미지에 referance에 필요 (myRef)"/sdcard/Punch/image_0.jpg"에 변경하는 경우 새로운 코드로 내 Punch.java를 업데이트 이 라인과 함께 할 수있는 뭔가가 카메라로 촬영 한 생각 intent.putExtra("filepath",uriSavedImage.toString());

업데이트 3

거의 지금은 완벽하게 작동하여 intent.putExtra("filepath",Uri.parse(output.getAbsolutePath()).toString());하지만 어떤 이유로 든 여전히 시작하고있다. sdcard/

이제는 사진을 찍는 동안 sdcard가 컴퓨터에 마운트되었을 때 Ok/mnt/sdcard가 작동합니다. 내 카메라 활동에서

내가

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 

    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     // TODO Auto-generated method stub 
     /*Bitmap bitmapPicture 
      = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */ 
     int imageNum = 0; 
     Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     File imagesFolder = new File(Environment.getExternalStorageDirectory(), "Punch"); 
     imagesFolder.mkdirs(); // <---- 
     String fileName = "image_" + String.valueOf(imageNum) + ".jpg"; 
     File output = new File(imagesFolder, fileName); 
     while (output.exists()){ 
      imageNum++; 
      fileName = "image_" + String.valueOf(imageNum) + ".jpg"; 
      output = new File(imagesFolder, fileName); 
     } 

     Uri uriSavedImage = Uri.fromFile(output); 
     imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 


     OutputStream imageFileOS; 
     try { 
      imageFileOS = getContentResolver().openOutputStream(uriSavedImage); 
      imageFileOS.write(arg0); 
      imageFileOS.flush(); 
      imageFileOS.close(); 

      Toast.makeText(AndroidCamera.this, 
        "Image saved", 
        Toast.LENGTH_LONG).show(); 

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

     Intent intent = new Intent(getBaseContext(), Punch.class); 
     intent.putExtra("filepath",uriSavedImage.toString()); 
     //just using a request code of zero 
     int request=0; 
     startActivityForResult(intent,request); 
    }}; 

이 그리고 다음 활동 내 Punch.java은 다음과 같습니다

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.punch); 

    String myRef = this.getIntent().getStringExtra("filepath"); 

    File imgFile = new File(myRef); 
    if(imgFile.exists()){ 

     Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

     ImageView myImage = (ImageView) findViewById(R.id.imagepunch); 
     myImage.setImageBitmap(myBitmap); 

    } 

} 

가}

+0

저는 mnt가 정상이라고 생각합니다.이 질문에 대한 대답을 확인하십시오 : http://stackoverflow.com/questions/7102104/android-how-to-access-a-file -in-the-sd-card 그것은해야한다. tever Environment.getExternalStorageDirectory() returns ... – Lumis

답변

1

파일 경로 문제라고 생각합니다. 파일 경로를 URI로 제출했지만 뷰어 활동에서 문자열로 읽는 중입니다.

은 아마 당신은에이 라인을 변경하는 NEET :

intent.putExtra("filepath",uriSavedImage.toString()); 

또는

intent.putExtra("filepath",Uri.parse(output.getAbsolutePath()).toString()); 
이 경로를 제기 할 때 사용 실험을 할 필요가 있으므로, 동일한 작동하지 않을 수 있습니다 안드로이드의

다른 버전 Uri.parse (fileStr) 또는 String ...

+0

나는 위의 대답에 코드를 추가하면 새로운 활동으로 이동하지만 여전히 이미지를 볼 수 없습니까? – Matt

+0

이미지가 오른쪽 폴더의 SD 카드에 있는지 확인하십시오. 그렇다면 decodeFile에서 사용중인 파일 경로에 문제가 있습니다. decodeFile에서 작동하는 경로를 수동으로 입력하여 형식을 확인하십시오. – Lumis

+0

당신이 이것을하는 것이 당신이 Punch.java에서 (myRef) 대신에 의미한다는 것을 확신 할 수 없습니까? – Matt

0

그냥 코드와 접근 방식을보고, 이 시나리오에서 일반적으로 볼 수있는 것은 새 컨텐트 핸들러가 등록되어 카메라/이미지 라이브러리의 "공유"옵션 아래에 표시되는 것입니다. 이렇게하면 내장 안드로이드 기능에 본질적으로 중복되는 사용/복구 논리에 관여하지 않게됩니다. Evernote 또는 Picasa와 같은 앱을 생각해보십시오. 사진을 찍거나 이전에 찍은 사진을보고 "공유"를 선택하십시오. 공유 옵션 중 하나는 Picasa, 이메일 등과 함께 앱입니다. 그것이 내가하는 방법이다.

+0

나는 이것에 대해 생각해 보았지만 앱이 작동하려면 특정 방식으로 찍은 사진이 있어야만 surfaceView가있는 맞춤형 카메라를 사용해야합니다. – Matt

관련 문제