检查相机是否可以在 Android 与 Intent 上的 resolveActivity 中使用
Checking if the camera can be used in Android vs. resolveActivity on the Intent
我在网上看到了一些不同的东西,所以我想确保我做的是正确的:
检查 phone 是否有摄像头:
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
//proceed
}
不过我也看到了http://developer.android.com/training/camera/photobasics.html
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
PackageManager pm = context.getPackageManager();
if (takePictureIntent.resolveActivity(pm) != null) {
//proceed
}
我知道第一个是"correct"用来验证摄像头是否存在的,但是第二个到底是干什么的呢?在继续之前实际检查这两个条件是个好主意,还是只检查一个或另一个就足够了?
根据 http://developer.android.com/reference/android/content/pm/PackageManager.html#resolveActivity%28android.content.Intent,%20int%29 它说 resolveActivity
"Determine the best action to perform for a given Intent" 但我真的不知道那意味着什么。这是 "check for the camera" 的另一种方式吗?
第二个是检查设备上是否有接受相机意图的相机应用程序。检查以确保是否有可以处理相机意图的应用程序没有错。
虽然我猜测设备有摄像头时可能没有摄像头应用程序,但这种可能性极小。
but what is the second one doing exactly?
确定设备上是否安装了提供 ACTION_IMAGE_CAPTURE
activity 您可以启动的应用程序。可能没有这样的应用程序,或者可能有应用程序但当前用户可能没有权限。
Is it a good idea to actually check for both conditions before proceeding, or does it suffice to just check one or the other?
要么使用 resolveActivity()
/queryIntentActivities()
提前检测是否存在您要调用的隐式 Intent
的应用程序,要么捕获 ActivityNotFoundException
如果您调用 startActivity()
/startActivityForResult()
并且没有匹配的 activity,则会引发此问题。对于任何隐式 Intent
.
都是如此
从技术上讲,检查是否有硬件相机更多是使用相机 API 的应用程序的责任。但是,您可以自己检查一下,特别是如果您想要在用户无法拍照时禁用 UI 选项(例如,操作栏项目)。在这种情况下,仅在以下情况下启用 UI 选项:
- 有摄像头,和
- 有一个
ACTION_IMAGE_CAPTURE
activity
我在网上看到了一些不同的东西,所以我想确保我做的是正确的:
检查 phone 是否有摄像头:
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
//proceed
}
不过我也看到了http://developer.android.com/training/camera/photobasics.html
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
PackageManager pm = context.getPackageManager();
if (takePictureIntent.resolveActivity(pm) != null) {
//proceed
}
我知道第一个是"correct"用来验证摄像头是否存在的,但是第二个到底是干什么的呢?在继续之前实际检查这两个条件是个好主意,还是只检查一个或另一个就足够了?
根据 http://developer.android.com/reference/android/content/pm/PackageManager.html#resolveActivity%28android.content.Intent,%20int%29 它说 resolveActivity
"Determine the best action to perform for a given Intent" 但我真的不知道那意味着什么。这是 "check for the camera" 的另一种方式吗?
第二个是检查设备上是否有接受相机意图的相机应用程序。检查以确保是否有可以处理相机意图的应用程序没有错。
虽然我猜测设备有摄像头时可能没有摄像头应用程序,但这种可能性极小。
but what is the second one doing exactly?
确定设备上是否安装了提供 ACTION_IMAGE_CAPTURE
activity 您可以启动的应用程序。可能没有这样的应用程序,或者可能有应用程序但当前用户可能没有权限。
Is it a good idea to actually check for both conditions before proceeding, or does it suffice to just check one or the other?
要么使用 resolveActivity()
/queryIntentActivities()
提前检测是否存在您要调用的隐式 Intent
的应用程序,要么捕获 ActivityNotFoundException
如果您调用 startActivity()
/startActivityForResult()
并且没有匹配的 activity,则会引发此问题。对于任何隐式 Intent
.
从技术上讲,检查是否有硬件相机更多是使用相机 API 的应用程序的责任。但是,您可以自己检查一下,特别是如果您想要在用户无法拍照时禁用 UI 选项(例如,操作栏项目)。在这种情况下,仅在以下情况下启用 UI 选项:
- 有摄像头,和
- 有一个
ACTION_IMAGE_CAPTURE
activity