Android - cam.setPreviewDisplay(titulaire) en cours d'exécution dans IOError
Je suis en train d'utiliser l'image de l'appareil photo dans le cadre de live wallpaper.
Dans le Moteur que j'ai déclaré, j'ai ce code:
public class Class extends WallpaperService
{
Camera cam;
@Override
public void onCreate()
{
super.onCreate();
cam = Camera.open();
}
//...
@Override
public Engine onCreateEngine()
{
return new CubeEngine(cam);
}
class CubeEngine extends Engine
{
Camera cam;
CubeEngine(Camera cam)
{
this.cam=cam;
}
//...
@Override
public void onDestroy()
{
if (cam != null)
{
cam.stopPreview();
cam.setPreviewCallback(null);
cam.release();
cam = null;
}
super.onDestroy();
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height)
{
try
{
cam.setPreviewDisplay(holder);
cam.startPreview();
}
catch (IOException e)
{
e.printStackTrace();
}
super.onSurfaceChanged(holder, format, width, height);
}
@Override
public void onSurfaceCreated(SurfaceHolder holder)
{
super.onSurfaceCreated(holder);
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder)
{
if (cam != null)
{
cam.stopPreview();
cam.setPreviewCallback(null);
cam.release();
cam = null;
}
super.onSurfaceDestroyed(holder);
}
//...
}
}
cam est une Caméra qui a été déclarée comme Appareil photo.open();
Lorsque je l'exécute j'obtiens: java.io.IOException: setPreviewDisplay failed
Je suis maintenant obtenir cette exception:
07-26 00:12:18.399: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.419: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.439: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.459: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.479: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.509: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.529: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.549: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.569: ERROR/CameraService(1357): Overlay Creation Failed!
07-26 00:12:18.609: WARN/System.err(4104): java.lang.RuntimeException: startPreview failed
07-26 00:12:18.609: WARN/System.err(4104): at android.hardware.Camera.startPreview(Native Method)
07-26 00:12:18.609: WARN/System.err(4104): at com.petrifiednightmares.transparentphone.main.GenericaCamera.surfaceChanged(GenericaCamera.java:29)
07-26 00:12:18.609: WARN/System.err(4104): at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:687)
07-26 00:12:18.609: WARN/System.err(4104): at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:749)
07-26 00:12:18.619: WARN/System.err(4104): at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:984)
07-26 00:12:18.619: WARN/System.err(4104): at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
07-26 00:12:18.619: WARN/System.err(4104): at android.os.Handler.dispatchMessage(Handler.java:99)
07-26 00:12:18.619: WARN/System.err(4104): at android.os.Looper.loop(Looper.java:143)
07-26 00:12:18.619: WARN/System.err(4104): at android.app.ActivityThread.main(ActivityThread.java:4293)
07-26 00:12:18.629: WARN/System.err(4104): at java.lang.reflect.Method.invokeNative(Native Method)
07-26 00:12:18.629: WARN/System.err(4104): at java.lang.reflect.Method.invoke(Method.java:507)
07-26 00:12:18.629: WARN/System.err(4104): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-26 00:12:18.629: WARN/System.err(4104): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-26 00:12:18.629: WARN/System.err(4104): at dalvik.system.NativeStart.main(Native Method)
- Je pense que vous allez avoir à ajouter un peu plus de code, de sorte que nous pouvons voir l'ensemble de l'installation de la caméra dans la classe que vous utilisez cette dans.
- Yep, vous aurez besoin de montrer plus de code. Par exemple, comment l'avez-vous créer la surface?
- J'ai mis plus de code. C'est ma première incursion dans le développement android, de sorte s'il vous plaît laissez-moi savoir si je fais vraiment des erreurs stupides. 🙂
- Bien que j'aimerais en faire des événements de configuration un peu différemment la seule chose que je vois qui manque, c'est le réglage de la caméra de la taille de l'aperçu. Je serai curieux de voir si le surfaceview de le papier peint poignée de la caméra aperçus. Ne pense pas que ce soit une bonne idée, mais les sons comme un projet intéressant.
- Ouais c'est la chose que je n'étais pas sûr à ce sujet. Je n'ai pas vu tous les fonds d'écran animés qui prennent avantage de la caméra et a décidé d'écrire une petite application comme une preuve de concept (pourrait évoluer vers une véritable AR app). Une grande possibilité est que les papiers peints ne peut tout simplement pas gérer extraits de caméra (peut-être une volonté délibérée de se déplacer par les développeurs android pour prévenir l'excès de l'utilisation de la batterie?)
- Trop fatigué pour essayer et exécuter cela, j'ai créé un live wallpaper et ajouté dans la caméra de code, l'appareil photo n'était pas avec un tampon d'erreur, j'ai donc forcé à utiliser push tampons et puis il a échoué avec une exception de pointeur null dans un privé onUpdateSurface appel. Avoir à penser à ce un peu.
Vous devez vous connecter pour publier un commentaire.
Il suit plus ou moins votre code avec quelques modifications.
}
Mise à jour
Est allé dans le fond d'écran le code et de pensé à elle, encore des problèmes, mais au moins je l'ai eu en gros de travail, afin de quand est importante en raison de la poussée des tampons d'installation
Problèmes
Pas en mode paysage, ce qui provoque une déformation de l'image à afficher, problème connu de la caméra juste havent essayé de verrouiller dans le paysage encore
Dans la fenêtre de prévisualisation si vous utilisez la touche retour, tout est détruit correctement (appareil photo sorti) mais si vous définir le papier peint de la classe n'a pas d'appeler la méthode onDestroy cela signifie donc que vous ne pouvez pas obtenir de l'appareil en raison de l'aperçu de l'instance de la classe n'a pas relâché, il
Il montre aussi jusqu'à que l'image d'écran de verrouillage, vous ne savez pas comment ignorer que, probablement, de recevoir et de répondre par le biais d'intentions et de l'éteindre lorsque vous êtes dans la garde/de l'écran de verrouillage
N'ont pas géré la visibilité de l'événement, d'autres caméra classes ne fonctionne pas, inutile potentiel drain de batterie etc.
De toute façon avec tout ce qui a déclaré que les modifications sont les suivantes pour obtenir ce pour au moins commencer à travailler
Dans le moteur de la création de la classe de l'appareil photo à partir de la classe ci-dessus dans le onCreate, plus tard et des problèmes se produisent en raison de la poussée des tampons de l'installation, et même si cela est déconseillé au plus tard 2.3+, il est toujours nécessaire dans les anciennes versions. Question de fait, n'ai pas testé plus de 2,2 encore.
Puis dans le GenericCamera le changement de classe pour le constructeur suivant modèle
C'est principalement ça, au moins, cela devrait vous obtenir a commencé, et si vous trouvez des solutions à 1-4 faites savoir à la communauté!
Mise à jour 2
Il semble que Android 3+ pauses cela, ne sais pas pourquoi, depuis la source de ces plates-formes est toujours fermée.
Une dernière réponse pour jusqu'à 2.3 est que ci-dessus fonctionne, mais sur 3+, il ne sera pas.
J'ai vu la suite de gotcha me donner
java.io.IOException: setPreviewDisplay failed
:Si vous ne la fois de la vidéo et de la photo, il y a deux fonctions, de la caméra.unlock() et de la caméra.reconnect(). Vous devez de la caméra.unlock() avant d'enregistrer une vidéo et de la caméra.reconnect() avant de prendre une photo.