使用此piece of code is suggested并声明
请注意,startActivityForResult()方法受a保护 调用resolveActivity()的条件,它返回第一个 可以处理意图的活动组件。 执行此检查 很重要,因为如果你使用一个调用startActivityForResult() 没有应用程序可以处理的意图,你的应用程序将崩溃。所以只要 结果不为空,使用意图是安全的。
代码:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
它工作正常,但不适用于运行4.2.2的Alcatel设备。我收到了ELSE
消息和我的祝酒词#34;无法使用相机......"
如果设备配有相机,这怎么可能?
我现在该怎么办?如何处理这个用例 - 显然我必须依赖一些带摄像头的设备报告"不能使用摄像头",检测到那些设备有摄像头然后使用它?!
文档或SO问题对ELSE案例一无所知。
答案 0 :(得分:5)
如果设备配有相机,这怎么可能?
预装在该设备上的相机应用的作者未能支持ACTION_IMAGE_CAPTURE
Intent
操作。有lots of bugs with camera apps。
尽管可能与您的情况无关,但请注意,在Android 4.3+上使用受限制的个人资料时,设备的当前用户可能无法访问ACTION_IMAGE_CAPTURE
活动,即使设备恰好有之一。
我现在该怎么办?
做类似的事情:
告诉用户他们没有兼容的相机应用程序,并引导他们下载一个您认为适用于您的应用程序的应用程序
不要依赖ACTION_IMAGE_CAPTURE
而是在您的应用中嵌入拍照功能
在ACTION_IMAGE_CAPTURE
返回resolveActivity()
null
的应用功能
等
答案 1 :(得分:1)
请检查您是否在AndroidManifest.xml中使用权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果您使用,则使用此编辑的代码检查是否有相机..
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (getApplicationContext().getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA)) {
// this device has a camera
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
} else {
// no camera on this device
}
}
<uses-feature android:name="android.hardware.camera"
android:required="true" />