2014-05-11 34 views
5

jestem debugowania aplikacji w 2 różnych urządzeń fizycznych:Android intent kamera zwraca null ... czasami

  • Motorola Moto g, Android 4.4.2
  • LG Swift L5 II, Android 4.1.2

Wołam aparat w przycisku:

buttonCamera.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 
      } 
     }); 

I zarządzać zamiarem wynik tak:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
      Uri selectedImage = data.getData(); // <-- Sometimes null 
    } 

Problem polega na tym, że data.getData() jest nieważna w Motorola Moto G, ale nie w LG Optimus, dlaczego tak jest? Jak mogę uniknąć uzyskania zerowej wartości w Motorola Moto G?

Odpowiedz

3

trochę późno ta odpowiedź, ale miałem ten sam problem właśnie teraz i znalazłem rozwiązanie:

private static final String STATE_FILE_URI = "state_file_uri"; 
private static final int BROWSE_CAMERA = 111; 
private String fileUri; 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState.putString(STATE_FILE_URI, fileUri); 
     super.onSaveInstanceState(outState); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     fileUri = savedInstanceState.getString(STATE_FILE_URI); 
     super.onRestoreInstanceState(savedInstanceState); 
    } 

    private void takePictureIntent(){ 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     fileUri = "your_uri"; 
     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(fileUri))); 
     startActivityForResult(takePictureIntent, BROWSE_CAMERA); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) {   
      if (requestCode == BROWSE_CAMERA) { 
       if (data == null) { 
        onDeliveryPicture(Uri.parse("file://" + fileUri)); 
       } else { 
        onDeliveryPicture(data.getData()); 
       } 
      } 
     } 
    } 

    private void onDeliveryPicture(Uri uri) { 
     ... 
    } 

nadzieję, że to pomaga!

Powiązane problemy