2011-07-06 22 views
14

Ésta es mi intención sencilla demostración de la cámara en la que tengo una sola actividad ....."java.lang.IllegalArgumentException: No hay configuraciones coinciden configSpec" Al abrir la cámara Intención

package x.y; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.widget.ImageView; 
public class PhotoShoot extends Activity { 
    final static int CAMERA_RESULT = 0; 
    ImageView imv; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(i, CAMERA_RESULT); 
    } 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     if (resultCode == RESULT_OK) 
     { 
      Bundle extras = intent.getExtras(); 
      Bitmap bmp = (Bitmap) extras.get("data"); 
      imv = (ImageView) findViewById(R.id.ReturnedImageView); 
      imv.setImageBitmap(bmp); 
     } 
    } 
} 

Y main.xml diseño

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ImageView 
     android:id="@+id/ReturnedImageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </ImageView> 
</LinearLayout> 

Manifiesto ...

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="x.y" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".PhotoShoot" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Lanzar "Forzar cierre" después de unos pocos segundos onds en emulador de Android 2.2 de partida de la cámara intención con la siguiente excepción ...

07-06 15:26:00.999: ERROR/AndroidRuntime(544): FATAL EXCEPTION: GLThread 11 
07-06 15:26:00.999: ERROR/AndroidRuntime(544): java.lang.IllegalArgumentException: No configs match configSpec 
07-06 15:26:00.999: ERROR/AndroidRuntime(544): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:760) 
07-06 15:26:00.999: ERROR/AndroidRuntime(544): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:916) 
07-06 15:26:00.999: ERROR/AndroidRuntime(544): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1246) 
07-06 15:26:00.999: ERROR/AndroidRuntime(544): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116) 

alguna idea?

+4

¿Puedes pasar tu archivo manifest.xml? – Nikhil

+0

Gracias por intrest @Nik, he editado mi pregunta –

Respuesta

43

Esto es en realidad parte de un problema mayor, y espero que publicando aquí, otros que hayan experimentado este error leerán esta entrada. También espero que, si alguna de mis conclusiones es incorrecta, alguien presente una explicación y/o solución más definitiva.

El problema central es el soporte OpenGL. A partir de 2.2, Android admite OpenGL ES 2.0 y, a partir de 4.0.3, los emuladores de Android son compatibles con OpenGL ES 2.0. El código que usa OpenGL ES 2.0 no funcionará en los emuladores anteriores a 4.0.3. [Evidentemente, la cámara cambió de ES 1.0 a 2.0 en Android 2.2]

¡Pero eso no es todo! Ninguno de los documentos de Android que he encontrado menciona que, para admitir la emulación Open GL ES 2.0, el chipset y el controlador de la tarjeta gráfica de la caja también deben admitir OpenGL 2.0. Por lo tanto, si habilita la Emulación GPU en el AVD y aún encuentra este error, haga lo siguiente:

1) Conozca las especificaciones en su tarjeta gráfica y visite el sitio web del fabricante del chipset para determinar si el chipset es OpenGL 2.0 compatible. Si no es así, eres S.O.L. y debe seguir depurando a través de un dispositivo Android real en lugar de un emulador.

2) Determine si tiene el último controlador de gráficos para el conjunto de chips. Los controladores obtenidos a través de Microsoft (si usa Windows) generalmente no son compatibles con OpenGL, por lo que desea descargar el último controlador del fabricante.

Espero que esto ayude.

+1

Nota: la emulación gpu está activada desde la línea de comandos con -gpu en – ron

+0

@Mark que ha sido una información muy importante. Pero, probé ejecutar en emulador de Android 4.1, pero el programa OpenGL no se estaba ejecutando allí también. Por cierto, la tarjeta gráfica de mi sistema admite Open GL 4.1. Entonces, eso debería funcionar ¿verdad? – Chaitanya

+1

Oh @Mark mi error realmente está funcionando en 4.1, lo único es que no podemos verificar la instantánea y la Emulación de la GPU en el emulador al mismo tiempo. Solo uno funcionará a la vez. :) – Chaitanya

16

La cámara no es compatible con el emulador de Android, así que no se preocupe. Este tipo de error viene en Android Emulator 2.2 y también he comprobado el emulador de Android 1.6 pero no recibo el error.

También he comprobado el código anterior en el dispositivo Android Samsung Galaxy Ace está funcionando bien.

Gracias querido.

+5

Nik tiene razón: el emulador 1.6 puede manejar este código, pero el emulador 2.2 no. Lo considero un error del emulador. – user77115

Cuestiones relacionadas