在模拟的Android相机上拍照时出错

时间:2013-08-21 18:26:48

标签: android android-emulator android-camera

我正在尝试在ADT中使用模拟器来测试拍摄照片的应用程序,我可以启动相机,但在拍摄照片并单击“确认”按钮后,logcat会抛出错误:

08-21 13:46:18.933:E / SoundPool(289):加载错误/system/media/audio/ui/Effect_Tick.ogg

在此之后,我的应用程序中的回调事件未被调用,我无法获取图片,但我可以单击“取消”并使用代码RESULT_CANCELED调用回调。

这是我的代码(部分):

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
    imagesFolder.mkdirs(); // <----
    File image = new File(imagesFolder, "image_001.jpg");
    Uri fileUri = Uri.fromFile(image);

    i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(i, 100);
    ...
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == 100){     
        if (resultCode == RESULT_OK){       
        } else if (resultCode == RESULT_CANCELED){      
        } else {        
        }
    }
}

我“可以”在真实设备上测试我的代码,但我真的想修复我的模拟器,任何想法如何做到这一点?

- 编辑 -

这是我的AVD的配置文件:

avd.ini.encoding=ISO-8859-1
hw.dPad=no
hw.lcd.density=320
sdcard.size=200M
hw.cpu.arch=arm
hw.device.hash=298918422
hw.camera.back=emulated
disk.dataPartition.size=200M
skin.dynamic=yes
skin.path=768x1280
hw.keyboard=yes
hw.cpu.model=cortex-a8
hw.ramSize=768
hw.device.manufacturer=Google
hw.sdCard=yes
hw.mainKeys=no
hw.accelerometer=yes
skin.name=768x1280
abi.type=armeabi-v7a
hw.trackBall=no
hw.device.name=Nexus 4
hw.battery=yes
hw.sensors.proximity=yes
image.sysdir.1=system-images\android-18\armeabi-v7a\
hw.sensors.orientation=yes
hw.audioInput=yes
hw.camera.front=emulated
hw.gps=yes
vm.heapSize=64

我还在清单中添加了以下标记:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

2 个答案:

答案 0 :(得分:1)

默认情况下,在Android中创建Android虚拟设备(AVD)时,相机将被禁用。因此,如果您的应用程序使用Camera API,它可能无法在Android模拟器中正常运行。此外,必须在模拟器中定义SDCard才能使用Camera。 要在Android模拟器中启用相机,只需在AVD的config.ini文件中添加以下突出显示的代码即可。您可以在用户目录/ .android文件夹下找到config.ini文件。

在我的情况下,这是路径C:\ Users \ Gaurav.android \ avd \ GingerBread.avd

File: ~/.android/config.ini
hw.lcd.density=160
skin.name=HVGA
skin.path=platforms\android-9\skins\HVGA
hw.cpu.arch=arm
abi.type=armeabi
vm.heapSize=24
image.sysdir.1=platforms\android-9\images\
hw.camera=yes
sdcard.size=256M

或创建新的AVD并在创建时启用相机。

要在外部目录中捕获和存储图像,您必须为应用指定存储权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

答案 1 :(得分:0)

我发现问题是由于应用尝试保存图片文件造成的,我删除了下面的行并开始工作

File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
imagesFolder.mkdirs(); // <----
File image = new File(imagesFolder, "image_001.jpg");
Uri fileUri = Uri.fromFile(image);

i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name