2014-01-29 6 views
2

이 코드를 사용하고 있지만 onActivityResult가 호출되지 않습니다. SD 카드에 이미지를 저장하는 추가 의도를 전달하지 않고 요청을하면 잘 작동합니다. - 예상대로 onActivityResult()이 호출됩니다. 그러나 SD 카드 코드를 추가 한 이후로 - 운이 없습니다!Android에서 사진을 찍은 후 onActivityResult가 호출되지 않습니다.

무언가를 추가 했나요? 예를 들어 https://stackoverflow.com/a/12277455/2884981을 팔로우하고있었습니다. 난 그냥 카메라 응용 프로그램 내에서 추가 거라고 생각

static final int CAPTURE_IMAGE_CALLBACK = 1; 

    private void dispatchTakePictureIntent() 
    { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    File photo = null; 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 

     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     { 
      photo = new File(android.os.Environment.getExternalStorageDirectory(), "myapp/images/" + File.separator + timeStamp + ".png"); 
     } 
     else 
     { 
      photo = new File(getCacheDir(), "myapp/images/" + File.separator + timeStamp + ".png"); 
     } 
     if (photo != null) 
     { 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
     } 

     if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
     { 
      startActivityForResult(takePictureIntent, CAPTURE_IMAGE_CALLBACK); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     // This never gets hit! 
     if (requestCode == CAPTURE_IMAGE_CALLBACK) 
     { 
       // etc 

다음

내 코드는 한때 나는 틱을 클릭 - 아무 일도 발생하지 않습니다. 반복적으로 틱을 클릭하면 카메라 화면에 그대로 있습니다. 컨트롤은 메인 앱으로 되돌아 가지 않습니다.

+0

나는이 질문에 대답했다 : http://stackoverflow.com/a/30266776/1531683 –

답변

4

public class MainActivity extends Activity implements OnClickListener { 

Button btnTackPic; 
Bitmap bitMap; 
static int TAKE_PICTURE = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Setup camera ready for picture clicking 

    // add onclick listener to the button 
    btnTackPic.setOnClickListener(this); 

} 

// Take pic 
@Override 
public void onClick(View view) { 

    // create intent with ACTION_IMAGE_CAPTURE action 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    // start camera activity 
    startActivityForResult(intent, TAKE_PICTURE); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 
     // get bundle 
     Bundle extras = intent.getExtras(); 

     // get bitmap 
     bitMap = (Bitmap) extras.get("data"); 
    } 
} 

가} 나는이를 추가하는 데 필요한 :

+0

나를 위해 일했습니다! –

+1

형,이 2 줄 코드는 어디에 넣어야합니까? insideActivityResult 안에? –

+0

'dispatchTakePictureIntent()'안에'if (photo! = null) '영역에 추가했습니다. – b85411

0

나는이 같은 것을 사용하고 잘 작동

photo.getParentFile().mkdirs(); 
    photo.createNewFile(); 

저는 믿습니다이 실패 된 이유는 파일 때문이었다 나는 존재하지 않는 이미지를 쓰려고했습니다. 가 살펴 전에

+0

안녕하세요. 그래, 나는 똑같은 일을 할 수있다. 내가 문제를 일으킨 SD 카드 코드를 추가 할 때 뿐이다. 또한 SD 카드 코드가 작동하는 것처럼 엄지 손톱 데이터를 읽어야합니다. – b85411

+0

이미지를 촬영 한 후에 SD 카드 코드를 완료해야합니까? 즉, 저장할 코드가있는 것처럼 코드를 onActivityResult 메서드로 이동하십시오. –

+0

아니요, SD 카드를 저장하려는 파일을 인 텐트로 전달해야합니다. 그런 다음 사진의 고해상도 사본이 해당 파일에 저장됩니다. onActivityResult에 이미지를 반환 한 후 SD 카드에 저장하려고하면 저해상도 비트 맵/미리보기 이미지가 남습니다. (나는 어쨌든이 경우에 해당한다고 믿고, 일단 이것이 작동하면 확인할 수 있습니다!) – b85411

관련 문제