Autore Topic: Fotocamera anteriore che non si apre  (Letto 1246 volte)

Offline Crowley91t

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s plus
  • Sistema operativo:
    windows 7
Fotocamera anteriore che non si apre
« il: 17 Ottobre 2012, 18:15:06 CEST »
0
Salve a tutti.
Trovando un utile tutorial su questo forum dove riguardava l'uso della fotocamera mi sono imbattuto nella costruzione di una app dove l'uso della fotocamera anteriore è essenziale e tutto.

Programmo da alcuni mesi ed qualsiasi problematica l'ho risolta sempre con lo studio del problema/errore, e googlando :D, ma ora sono difronte ad una grossa montagna.

Tramite il tutorial "[medio] Come utilizzare la Camera di Android per scattare una foto" presente nella sezione  Tutorials » Gestione dei media, ho riscritto da me il seguente codice, che in base alle mie modifiche dovrebbe far partire la fotocamera anteriore.
Ciò non accade, anzi viene sempre aperta la fotocamera di default cioè quella posteriore.
Non so proprio dove sbattere la testa, ed la rete google mi ha fornito ben poche informazioni.

Chiedo un gentile aiuto per risolvere la mia problematica, forse per voi è una cosa da niente.

Posto il mio codice:


Codice (Java): [Seleziona]
package com.example.camera1;

import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;



import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.content.Intent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;

public class Main extends Activity implements SurfaceHolder.Callback {

    private static final String TAG = null;
   
    private Camera mcamera;
   
    private SurfaceView mSurfaceView;
        private SurfaceHolder mSurfaceHolder;
        private boolean mPreviewRunning;



        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFormat(PixelFormat.TRANSLUCENT); //aggiungo il traslucido
        requestWindowFeature(Window.FEATURE_NO_TITLE);  //no barra titolo
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);   //full screen
        setContentView(R.layout.main);
       
       
        mSurfaceView = (SurfaceView)findViewById(R.id.camerasurf);
        mSurfaceHolder = mSurfaceView.getHolder();      //recupero l'holder della surfaceview
        mSurfaceHolder.addCallback(this);       //faccio la bind alla nostra activity
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        //tipo di surface, suggerito nei tutorial ufficiali
       
       // mcamera.open();
       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
   
   
   
   
 
   
   
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
                if (mPreviewRunning)
                        mcamera.stopPreview();
               
                Camera.Parameters p = mcamera.getParameters();  //prendo le preferenze della camera
                p.set("camera-id", 2);
                p.setPreviewSize(640, 480);
                mcamera.setParameters(p);      
               
               
               
                try {
                //lancio la preview
                        mcamera.setPreviewDisplay(arg0);       
                        mcamera.startPreview();
                        mPreviewRunning = true;
                } catch (IOException e) {
                        //gestione errore
                }
               
        }
public void surfaceCreated(SurfaceHolder holder) {
       
       
   
               
                 mcamera=Camera.open();
       
        }
   
    public void surfaceDestroyed(SurfaceHolder holder) {
        mcamera.stopPreview();
        mPreviewRunning = false;
        mcamera.release();
               
        }
}

Ho inoltre aggiunto al manifest i seguenti permessi:

Codice (Java): [Seleziona]
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"         android:required="false"/>
<uses-feature android:name="android.hardware.camera.front"       android:required="false"/>


e questo è il mio logcat https://docs.google.com/document/pub?id=15SDC1jUH-dHiQX3yyTa54bn3IguSt5Jv2YsuziZHicM

Come posso risolvere il mio problema?

Grazie mille anticipatamente.
Saluti

Marco :-)


Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Fotocamera anteriore che non si apre
« Risposta #1 il: 17 Ottobre 2012, 18:50:35 CEST »
0
Non ho mai visto impostare la key "camera-id" per richiamare la fotocamera anteriore.

API di Android dalla versione 9 ha il metodo "open" con un intero per indicare l'indice della fotocamera da usare:

Camera | Android Developers

nel tuo codice usi il metodo "open" senza parametro quindi apri la prima fotocamera, di solito quella posteriore.

Per fare le cose per bene devi interrogare il sistema per sapere il numero di fotocamere e solo se è presente aprirla.
adb logcat | tee /tmp/logcat | grep TAG