“ java.lang.IllegalArgumentException: no configs match configSpec ” 在打开 Camera Intent 时

2022-09-03 16:26:42

这是我简单的相机意图演示,其中我只有一个活动.....

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);
        }
    }
}

和布局主要.xml

<?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>

清单。。。

<?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> 

在Android模拟器2.2中从相机意图开始几秒钟后抛出“强制关闭”,并遵循以下例外...

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)

任何想法?


答案 1

这实际上是一个更大问题的一部分,我希望通过在这里发帖,其他经历过此错误的人会阅读此条目。我同样希望,如果我的任何结论不正确,有人能提出更明确的解释和/或解决方案。

核心问题是OpenGL支持。从2.2开始,Android支持OpenGL ES 2.0,从4.0.3开始,Android模拟器支持OpenGL ES 2.0。使用 OpenGL ES 2.0 的代码在 4.0.3 之前的模拟器上不起作用。[显然,相机在Android 2.2上从ES 1.0切换到2.0]

但这还不是全部!我遇到的任何Android文档都没有提到,为了支持Open GL ES 2.0仿真,盒子的显卡芯片组和驱动程序也必须支持OpenGL 2.0。因此,如果在 AVD 上启用 GPU 仿真,但仍然遇到此错误,请执行以下操作:

1) 找出显卡上的规格,并访问芯片组制造商的网站,以确定芯片组是否兼容 OpenGL 2.0。如果不是,那么您就是S.O.L.,必须坚持通过实际的Android设备而不是模拟器进行调试。

2) 确定您是否具有芯片组的最新图形驱动程序。通过 Microsoft 获得的驱动程序(如果您使用的是 Windows)通常不支持 OpenGL,因此您需要从制造商处下载最新的驱动程序。

我希望这有帮助。


答案 2

相机不支持Android模拟器,所以不用担心。这种类型的错误出现在Android模拟器2.2中,我也检查了Android模拟器1.6,但没有收到错误。

我还检查了Android设备中的上述代码 三星Galaxy Ace工作正常。


推荐