2012-10-10 4 views
8

Ich habe eine App, die voll funktionsfähig ist. Es hat nur ein Problem mit meiner Kamera Absicht oder Berechtigungen.Android-Kameraaktivität kehrt nicht zu meiner App zurück, wenn die OK-Taste gedrückt wird

Die App soll die Kameraaktivität starten, wenn der Benutzer eine Taste drückt. Das funktioniert einwandfrei, aber wenn der Benutzer ein Bild annimmt, indem er auf die Schaltfläche OK auf der Kamera klickt, wird er nicht in meiner App angezeigt. Wenn sie die Abbrechen-Taste an der Kamera drücken, kommt sie wie erwartet zu meiner App zurück.

Ich habe alle ähnlichen Fragen gelesen, die ich hier finden kann, aber keiner von ihnen hat mein Problem behoben. Ich muss der Kamera genau sagen, wo das Bild gespeichert werden soll, weil ich in meiner App zwischen 2 wechseln möchte. Hier ist der Code, der die Kamera Absicht erstellt und startet es:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath)); 
startActivityForResult(intent, 11); 

Ich habe für imagePath mehrere Werte versucht (die einen String ist), aber die Kamera OK-Taste ist mit einem von ihnen nicht funktioniert. Dies sind die Wege Ich habe versucht:

/mnt/sdcard/<appName>/cameraImages/image1.jpg 
from Environment.getExternalStorageDirectory() 

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg 
from context.getExternalCacheDir() 

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg 
from context.getCacheDir() 

Ich habe die folgenden Berechtigungen in meinem Manifest-Datei:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.flash" android:required="false" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Könnt ihr mir helfen, herauszufinden, was mit meinem Code falsch ist, oder sagen Sie mir, was Ein gültiger Pfad könnte sein? Ich bevorzuge es, wenn das Bild an einem Speicherort im Cache gespeichert wird, da es nicht wichtig ist, dass das Bild nach dem Verlassen der Anwendung weiterhin existiert, aber es ist mir egal, wer Zugriff auf das Bild hat.

Ich mache alle Tests auf dem 4.1 Emulator, kompiliert mit dem 4.1 SDK, und meine Mindestversion ist API 8 (2.2).

Ich habe einen Fall für die Absicht in onActivityResult() gestellt, aber ich glaube nicht, dass Sie diesen Code sehen müssen, weil es das Problem nicht beeinflussen sollte.

+0

check in realen Gerät einmal. Überprüfen Sie auch [diese] (http://stackoverflow.com/a/7224771/646806) – RobinHood

+0

Wird 'onActivityResult()' aufgerufen? Kannst du etwas in den Protokollen sehen? –

+0

Jemand hat die Version der App mit 'context.getCacheDir()' für den 'imagePath' überprüft und sie hatten die gleiche Erfahrung; Die OK-Taste in der Kamera-App würde für sie nicht funktionieren. Außerdem wird 'onActivityResult()' nicht aufgerufen, wenn ich die OK-Taste drücke. – cmasupra

Antwort

2

Ich war in der Lage, das Problem herauszufinden. Es scheint, dass anstelle Uri.parse(imagePath) verwenden Sie Uri.fromFile(new File(imagePath)) verwenden müssen, wenn Sie das Extra hinzufügen. Ich habe den neuen Intent-Code unten eingefügt, falls er jemandem mit dem gleichen Problem hilft.

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imagePath))); 
startActivityForResult(intent, 11); 

ich jetzt context.getExternalCacheDir() erstellen den vollständigen Pfad bin mit imagePath erfolgreich. Der resultierende Pfad, den ich erstellt habe, lautet /mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg.

+0

Ich benutze Uri.fromFile (neue Datei (imagePath)) aber immer noch das gleiche Problem ... können Sie mich auf dieses Problem erleuchten..plz Ihre Hilfe wird sehr geschätzt. –

+0

@NilayOnAndroid Stellen Sie sicher, dass die imagePath-Variable ein gültiger Pfad ist, auf den Ihre Anwendung zugreifen kann. – cmasupra

+1

@ cmasupra-Wie sich herausstellt, brauchte ich zuerst mkdirs() um diesen Pfad zu erstellen !!!! Aber danke für die Hilfe !! –

Verwandte Themen