san*_*one 2 android android-camera android-camera-intent
请注意,startActivityForResult()方法受调用resolveActivity()的条件的保护,该条件返回可以处理intent的第一个活动组件.执行此检查很重要,因为如果使用无应用程序无法处理的意图调用startActivityForResult(),您的应用程序将崩溃.因此,只要结果不为null,就可以安全地使用intent.
码:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但不适用于运行4.2.2的Alcatel设备.我收到了ELSE祝词"不能用相机......"
如果设备有相机,这怎么可能?
我现在应该怎么做?如何处理这个用例 - 显然我不得不依赖一些带摄像头的设备会报告"无法使用摄像头",检测到那些设备有摄像头然后使用它?!
文档或SO问题对ELSE案例一无所知.
如果设备有相机,这怎么可能?
预装在该设备上的相机应用程序的作者未能支持该ACTION_IMAGE_CAPTURE Intent操作.相机应用程序有很多错误.
虽然可能与您的情况无关,但请记住,对于Android 4.3+上的受限配置文件,设备的当前用户可能无法访问某项ACTION_IMAGE_CAPTURE活动,即使该设备恰好有一个活动.
我现在应该怎么做?
做类似的事情:
告诉用户他们没有兼容的相机应用程序,并引导他们下载一个你知道适用于你的应用程序的应用程序
不要依赖ACTION_IMAGE_CAPTURE并在您的应用中嵌入拍照功能
在需要返回的ACTION_IMAGE_CAPTURE设备上禁用所需的应用功能resolveActivity()null
等等.
小智 5
请检查AndroidManifest.xml中是否有使用权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
如果您使用,则使用此编辑过的代码来检查是否有相机。
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
}
Run Code Online (Sandbox Code Playgroud)
}
<uses-feature android:name="android.hardware.camera"
android:required="true" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4233 次 |
| 最近记录: |