2016-08-09 21 views
1

Eine Funktion meiner App beinhaltet die Kamera. Der Benutzer macht ein Bild und die App zeigt das Bild an.ACTION_IMAGE_CAPTURE gibt imagefile als Extra statt Daten zurück

Ich starte eine Absicht mit ACTION_IMAGE_CAPTURE mit StartActivityForResult und erfassen die Antwort mit onActivityResult. Normalerweise Ich kann einfach getData() auf die Absicht, die ich in onActivityResult erhalten und rufen Sie den Inhalt uri für den MediaProvider.

Mein Problem ist das folgende: Eines meiner Testgeräte, ein Huawei ALE-L21, hat die Absicht, die ich in onActivityResult bekomme, keine Daten, aber stattdessen hat es ein parabelable Extra. Wie kann ich das Benutzerfoto daraus machen? Android Studio hat mir nicht den Namen des parcellable Extra entweder


Haftungsausschluss: Ich nenne getActivity(), weil ich in einem Fragment diesen Code bin mit


Dies ist, was Ich benutze die Kamera.

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
    startActivityForResult(takePictureIntent, getResources().getInteger(R.integer.RQ_PERMISSION_WRITE_EXTERNAL_STORAGE)); 
} 

Und hier ist der Code in meinem onActivityResult

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

    switch (requestCode) { 
     case 1: //RQ_ImageCapture 
     case 2: //RQ_ImageSelected 
      if (resultIntent != null) { 
       try { 
        Uri selectedImage = resultIntent.getData(); 
        if(selectedImage != null) { 
         Bitmap bitmap = 
         MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImage); 
         setImageAsBackground(selectedImage, bitmap); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      break; 
    } 
} 

Antwort

1

Normalerweise kann ich einfach getData nennen() auf der Absicht, die ich in onActivityResult erhalten und den Inhalt uri für die MediaProvider bekommen.

Ihr Code wird auf vielen von ihnen fehlschlagen, einschließlich aller neueren Nexus-Geräte. ACTION_IMAGE_CAPTURE soll keine Uri zurückgeben. Notieren the documentation:

Wenn EXTRA_OUTPUT nicht vorhanden ist, wird ein kleines Bild als Bitmap-Objekt im zusätzlichen Feld zurückgegeben. Dies ist nützlich für Anwendungen, die nur ein kleines Bild benötigen. Wenn EXTRA_OUTPUT vorhanden ist, wird das Bild in voller Größe in den URI-Wert von EXTRA_OUTPUT geschrieben.

Da Sie nicht mit EXTRA_OUTPUT, erhalten Sie einen data extra (getData().getExtra("data")) mit einer Miniaturansicht erhalten.

die Absicht ich in onActivityResult bekommen hat keine Daten, sondern hat es eine parcellable zusätzliche

Ihre ACTION_IMAGE_CAPTURE Anfrage gegeben, das ist, was Sie bekommen sollen.

Wenn Sie ein Bild in voller Größe wünschen, schließen Sie EXTRA_OUTPUT ein und zeigen Sie vielleicht auf eine FileProvider in Ihrer App, wie ich in this sample app demonstriere. Dann weißt du die Uri wohin das Foto gehen soll, weil du das Uri angegeben hast.

Verwandte Themen