10
votes

caméra.takepicture () ne fonctionne pas sur mes téléphones JB & GB & Froyo

Eh bien, j'ai mis à jour ma question à nouveau, totalement cette fois.

J'ai testé le code suivant sur Galaxy Nexus (JB), Moto-XX (GB), Samsung (Froyo) un par un, avec des problèmes différents / Des exceptions ont eu lieu. p>

11-26 01:28:33.835: I/AwesomePlayer(1235): prepareAsync_l
11-26 01:28:33.835: D/CameraHal(1235): Capture size 2048x1536, res enum 3
11-26 01:28:33.835: I/AwesomePlayer(1235): prepareAsync_l
11-26 01:28:33.835: D/CameraHal(1235): Setting capture format 0 header 2
11-26 01:28:33.835: I/HPAndroidHAL(1235): APILOG: SetCaptureDataFormat (1 2 0)
11-26 01:28:33.835: D/CameraHal(1235): Thumbnail enabled
11-26 01:28:33.843: E/MemoryHeapBase(1235): mmap(fd=50, size=0) failed (Invalid argument)
11-26 01:28:33.843: D/CameraHal(1235): Initializing capture memory raw: 0x42ee6000 (6295552), jpg: 0x434e7000 (3147776), pv 0xffffffff (0)
11-26 01:28:33.843: I/HPAndroidHAL(1235): APILOG: InitializeCaptureMemory(3 3147776 0x434e7000 6295552 0x42ee6000 0 0xffffffff)
11-26 01:28:33.843: I/HPAndroidHAL(1235): APILOG: InitializeCaptureMemoryBuffers(3 1 0_0x42de5d9c 6295552_0x42de5dc0 3147776_0x42de5d94 0_0x42de5dc8)
11-26 01:28:33.843: I/HPAndroidHAL(1235): APILOG: SetCaptureS2 with finish3A = 1
11-26 01:28:33.843: I/VorbisDecoder(1235): mNumChannels=1, mSampleRate=44100
11-26 01:28:33.843: E/OMXCodec(1235): Successfully allocated software codec 'VorbisDecoder'
11-26 01:28:33.843: I/VorbisDecoder(1235): mNumChannels=1, mSampleRate=44100
11-26 01:28:33.843: E/OMXCodec(1235): Successfully allocated software codec 'VorbisDecoder'
11-26 01:28:33.851: I/AwesomePlayer(1235): play_l
11-26 01:28:33.851: I/AwesomePlayer(1235): play_l
11-26 01:28:33.874: I/AwesomePlayer(1235): pause_l 1
11-26 01:28:33.874: I/AwesomePlayer(1235): reset_l
11-26 01:28:33.874: I/ExtendFileSource(1235): release pFilename = 0xfb690
11-26 01:28:33.874: I/AwesomePlayer(1235): reset_l
11-26 01:28:33.874: I/AwesomePlayer(1235): reset_l
11-26 01:28:33.882: I/AwesomePlayer(1235): pause_l 1
11-26 01:28:33.882: I/AwesomePlayer(1235): reset_l
11-26 01:28:33.882: I/ExtendFileSource(1235): release pFilename = 0xf9098
11-26 01:28:33.882: I/AwesomePlayer(1235): reset_l
11-26 01:28:33.882: I/AwesomePlayer(1235): reset_l


2 commentaires

Avez-vous une exception? Si oui, postez son journal s'il vous plaît.


Désolé. J'ai mis à jour la question.


3 Réponses :


0
votes

Essayez de mettre une instruction IF qui teste si le fichier fichier que vous utilisez est un répertoire réel tel que celui-ci xxx

juste dire "sdcard" est généralement une mauvaise idée comme son différent sur plusieurs périphériques. Votre mieux crée votre propre répertoire pour stocker votre fichier.


14 commentaires

Comment avez-vous été testé pour voir que OnpicTureakaken n'est jamais appelé?


Je l'ai fait imprimer par "System.Out.println (" JPEGCallback ")" Dans OnpicTureaken (Octet [] Data, caméra caméra).


Où est le reste de votre code où vous utilisez votre JPEGCallback. Je ne peux pas voir où tu appelles la caméra.takepicture ()


J'ai mis "caméra.takepicture (NULL, RAWCALLBACK, JPEGCALLBACK)" dans le dernier bloc, entre "system.out.println (" 6 ")" et "system.out.println (" 7 ")".


Est-ce à l'intérieur d'un bouton clic ou quelque chose? Pardonne-moi si je demande des questions simples, mais sa possible, il semblait que quelque chose de simple comme ça ..... tu ne sais jamais lol.


Oui je comprends. Mais je ne les ai pas mis dans un événement de clic. Quoi qu'il en soit, je vais essayer.


J'ai essayé et j'ai trouvé une nouvelle exception devant les plus âgées: E / Camerahal (1235): expiré en attente de capture à compléter.


Bonjour James. Merci pour ton aide. Avez-vous utilisé la prise à peine () avant? J'ai implémenter le code similaire sur le téléphone Android2.3 et 4.1, et j'ai eu des problèmes différents.


Oui, vous devez utiliser prendre une photo pour que le téléphone prend une photo. Il est possible que d'essayer de mettre en œuvre certains de ces autres paramètres de certains appareils peut entraîner vos problèmes. Essayez de prendre la photo sans implémenter autant d'autres paramètres et voyez ce qui se passe.


En fait, je n'utilise que des paramètres de caméra.paramètres = caméra.getparameters (); caméra.setparameters (paramètres); caméra.starview (); pour définir le paramètre par défaut. Est-ce que je suis juste en supposant cela?


À moins que vous souhaitiez utiliser des fonctionnalités spécifiques de l'appareil photo, telles que le flash ou d'autres activités liées à la qualité de l'image, vous pouvez le plus probablement sans les paramètres. Essayez de l'exécuter sans paramètres. J'ai construit la caméra avant d'utiliser aucun paramètre et cela fonctionne sur tous les appareils de cette façon. Je pense que votre problème peut être parce que vous essayez d'utiliser la caméra avant et que cela ne prendrait pas les mêmes paramètres.


Le fait est que je n'ai pas défini de paramètre spécifique (came avant ou arrière). Je veux construire une application de caméra sans aperçu. Donc, je n'ai pas utilisé superficiel / superholder, et j'ai plutôt "caméra.setpreviewDisplay (null);". Pensez-vous que c'est le problème? Avez-vous essayé de prendre une photo sans prévisualiser? Merci


Lorsque j'utilise caméra.setPreviewDisplay (super-exploitant), cela fonctionne bien. Je veux faire une sorte de caméra espion pour prendre la photo furtivement lorsque le téléphone est perdu ou si. Ceci est pour mon projet de cours, pas pour un mauvais but. J'ai vu beaucoup de telles applications, mais je ne peux tout simplement pas le faire ...


Ahhhh oui, vous avez besoin d'un aperçu. Vous pouvez configurer une vision superficielle à utiliser, puis simplement ne l'attribue à aucune vue dans votre mise en page.



2
votes

Espérons que vous avez résolu votre problème maintenant, mais je pense que la question que vous utilisez est que vous définissez l'aperçu de la caméra sur NULL, et il a besoin d'un ValideView code> comme prévisualisation de Tournez le flash sur (au moins sur une galaxie Nexus et d'autres périphériques Samsung ...)

CULPRIT: P>

 camera.setPreviewDisplay(null);


2 commentaires

Cela causerait un ioexception


Cette réponse est assez ancienne d'ici maintenant, mais avec Android, tout type de type interface matérielle doit être testé sur le matériel que vous utiliserez (je sais ... c'est à propos des conseils les moins utiles que je puisse donner) et testé avec Nouveaux communiqués de matériel et de micrologiciel ... Il y a des spécifications mais les fabricants font vraiment faire ce qu'ils veulent



1
votes

Ok, ceci n'est pas une réponse, mais je ne peux pas poster des commentaires, alors je vais y aller dans ce formulaire: Je peux confirmer les exceptions que vous obtenez sur mon Galaxy Nexus.

En plus de cela, mais éventuellement aider un peu, je dois ajouter un thread.sleep (500) entre StartPreview et prendre des photos si je veux que mes photos soient tout sauf noir.

Cela dit, je lisez les deux caméras (en séquence que des tentatives simultanées ne fonctionnent pas) et parfois une caméra fonctionne et l'autre génère les erreurs, parfois toutes deux fonctionnent et parfois rien ne fonctionne.

  1. Pour résoudre le problème avec le rappel non appelé: relâchez la caméra et essayez à nouveau. Cela fonctionne généralement.
  2. Pour résoudre le problème avec la rotation 0x80001005: redémarrage de l'application / service
  3. RPC_OMX problème: Cela semble vraiment similaire à ce que j'ai expérimenté quand j'ai acheté ce téléphone. Il y avait 4,0.2 installé et occasionnellement, la caméra "se perdre" - comme si je n'étais pas là. Seul le redémarrage du téléphone aide dans de tels cas.

0 commentaires