1

我正在尝试使用 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" />
4

2 回答 2

0

I found that the problem was being caused by the app trying to save the picture file, I removed the lines below and it started working

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
于 2013-08-22T14:08:48.743 回答
0

默认情况下,当您在 Android 中创建 Android 虚拟设备 (AVD) 时,相机会被禁用。因此,如果您的应用程序使用 Camera API,它可能无法在 Android Emulator 中正常工作。此外,必须在模拟器中定义 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" /> 
于 2013-08-21T18:58:29.160 回答