我正在尝试在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" />
答案 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