0

Ich versuche, eine einfache Anwendung zu machen, dass die Handy-Kamera verwendet, so folgte ich diese tutorial Im Grunde habe ich eine fab, die die Kamera auf Klick startet und das ist das Ergebnis:startActivityForResult nicht auslösenden onActivityResult

Result

es startet die Kamera, wie es sollte ...

wenn ich die Kamera schließen druckt es „REQUEST_PHOTO“ und „Übung beendet“, aber wenn ich ein Foto und drücken sie dann die richtige Taste zu akzeptieren, es passiert nichts . Die Schaltfläche funktioniert nicht und die Methode onActivityResult wird nicht aufgerufen.

Hier können Sie den entsprechenden Teil des Codes mit den Logs im onActivityResult Methode siehe:

public class MainActivity extends AppCompatActivity { 

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

     ... 

     if(hasCamera()) { 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        launchCamera(); 
       } 
      }); 
     } 
    } 

    ... 

    private void launchCamera() { 

     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     ... 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      ... 
      photoURI = FileProvider.getUriForFile(...); 

      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQUEST_TAKE_PHOTO: 
       Log.d("DEBUG", "REQUEST_PHOTO"); 
       if (resultCode == RESULT_OK) { 
        Log.d("DEBUG", "REQUEST_PHOTO RESULT_OK"); 
       } 
       break; 
     } 

     Log.d("DEBUG", "ACTIVITY FINISHED"); 
    } 
} 

Nicht nur verstehe ich nicht, warum die Methode nicht aufgerufen wird und die Annahmetaste „blockiert "aber ich verstehe auch nicht, warum die Methode nur aufgerufen wird, wenn der Exit-Button gedrückt wird.

Irgendeine Idee?

Danke!

+0

Welche Version von Gerät, das Sie diesen Code testen. Hoffe, du hast die notwendige Erlaubnis als Marshmallow-Version, da gibt es einige gefährliche Erlaubnis, die vom Benutzer gewährt werden muss. –

+0

Haben Sie die Datei erstellt, bevor Sie den URI an die Kameraanwendung übergeben haben? – makovkastar

+0

@makovkastar Ich habe die Datei nur so erstellt, wie die [tutorial] (https://developer.android.com/training/camera/photobasics.html) sagte zu tun (createImageFile() -Funktion) –

Antwort

0

Wenn eine Datei nicht existiert, wird die Kameraaktivität nicht zurückgegeben. Dies ist der eine Fall.

+0

Ja, das kann einer sein der Fall. –

+0

Wenn Sie eine Datei direkt in einen Ordner verweisen, den Sie vor dem Aufruf nicht erstellt haben, kann dies ebenfalls ein Problem verursachen. In diesem Fall erstellen Sie zuerst den Ordner zuerst. – MobileEvangelist

0

Sie haben die Erlaubnis zu geben, für den Zugriff auf Kamera

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

Ich glaube, Sie Emulator verwenden für die Prüfung bitte reale Gerät verwenden.

0

Versuchen Sie dies Ihr Problem lösen wird:

if(hasCamera()) { 
      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent chooseImageIntent = ImagePicker.getPickImageIntent(YourActivity.this); 

        startActivityForResult(chooseImageIntent, REQUEST_TAKE_PHOTO); 
       } 
      }); 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQUEST_TAKE_PHOTO: 
       Log.d("DEBUG", "REQUEST_PHOTO"); 
       if (resultCode == RESULT_OK) { 
        bm = ImagePicker.getImageFromResult(this, resultCode, data); 
       if (bm != null) { 
        bm = Bitmap.createScaledBitmap(bm,256,256, true); 

        upload_img.setImageBitmap(bm); 
       } 
       } 
       break; 
     } 

     Log.d("DEBUG", "ACTIVITY FINISHED"); 
    } 
Verwandte Themen