تحقق مما إذا كان لدى الجهاز كاميرا؟
-
20-09-2019 - |
سؤال
في تطبيقي ، أرغب في استخدام الكاميرا ، إذا كان الجهاز يحتوي على واحد. هل هناك أي أجهزة تعمل على تشغيل Android لاتفعل لديك كاميرا؟ من خلال تضمين ما يلي في بيواني:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
ثم يقول بشكل أساسي "سأستخدم كاميرا إذا كانت هناك واحدة ، لكن لا تحتاج إلى تشغيل التطبيق".
كيف يمكنني التحقق مما إذا كانت الكاميرا موجودة على الجهاز ، قبل محاولة استخدام فئة الكاميرا؟
المحلول
لم أجربها ، لكن:
private android.hardware.Camera mCameraDevice;
try {
mCameraDevice = android.hardware.Camera.open();
} catch (RuntimeException e) {
Log.e(TAG, "fail to connect Camera", e);
// Throw exception
}
قد يكون ما تحتاجه.
نصائح أخرى
هذا ما أستخدمه
import android.content.pm.PackageManager;
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}
جميع أنواع الأشياء الممتعة الأخرى التي يجب اختبارها متوفرة أيضًا - بوصلة متوفرة ، هل هناك كاميرا تواجه الأمامية:http://developer.android.com/reference/android/content/pm/packagemanager.html
لمعرفة عدد الكاميرات المتوفرة على جهازك ، يمكنك الاتصال:
import android.hardware.Camera;
int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
hasCamera = true;
}
Camera.GetNumberOfCameras () ثابت ، لذلك لا يتطلب الاتصال فعليًا بالكاميرا. هذا يعمل منذ API 9.
تعديل:
مع أحدث API Camera2 ، يمكنك أيضًا الاتصال Cameramanager.getCameraidList (), ، والتي تعطي قائمة بجميع معرفات الكاميرا الصالحة ، بدلاً من العد فقط.
يجب عليك استخدام هذا للعثور على الكاميرا في جهازك
public static boolean isCameraAvailable(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
استخدم ال packagemanager.hassystemfeature () طريقة للتحقق من الكاميرا:
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
مصدر: https://developer.android.com/guide/topics/media/camera.html#custom-camera
يتم إهمال camera.getNumberOfCameras (). يمكنك استخدام:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int getNumberOfCameras() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
return ((CameraManager) getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length;
} catch (CameraAccessException e) {
Log.e("", "", e);
}
}
return Camera.getNumberOfCameras();
}
جرب هذا :
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
من عند : http://developer.android.com/guide/topics/media/camera.html
من خلال التالي ، يمكننا التحقق من أن الجهاز يحتوي على كاميرا أم لا.
/** Check if this device has a camera */
public static boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA))
{
return true;
}
else if(context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FRONT))
{
return true;
}
else {
return false;
}
}
إذا كنت تستخدم Android 2.3 ، فهناك بعض واجهات برمجة التطبيقات التي يمكنك التحقق من حالة الكاميرا ، مثل عدد الكاميرات (الأمامية والخلف)
جرب هذا
للكاميرا الأمامية
Context context = this;
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {
Utils.makeAlertDialog(context, "Has Front Camera ?", "YES");
} else {
Utils.makeAlertDialog(context, "Has Front Camera ?", "NO");
}
للكاميرا الظهر
Context context = this;
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Utils.makeAlertDialog(context, "Has back Camera ?", "YES");
} else {
Utils.makeAlertDialog(context, "Has back Camera ?", "NO");
}
وفقا ل توثيق, ، يجب عليك استخدام Package Manager للتحقق مما إذا كانت الكاميرا متوفرة على الجهاز أم لا
في جافا:
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
في كوتلين:
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
لقد وجدت في مربعات تلفزيون Android حيث يمكنك توصيل وتشغيل كاميرا USB عدة مرات. في وقت ما ، تبدأ خدمة الكاميرا في القول إنها اكتشفت كاميرا واحدة في النظام بينما لا توجد كاميرا متصلة بالنظام. يحدث هذا عند توصيل/الخروج من الكاميرا عدة مرات. لإصلاح ذلك ، وجدت هذا الحل يعمل:
//under oncreate:
//cameraManager = ((CameraManager) getSystemService(Context.CAMERA_SERVICE));
public int getNumberOfCameras() {
int count_ = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
count_ = cameraManager.getCameraIdList().length;
if(count_==1)
{
try {
cameraManager.getCameraCharacteristics(cameraManager.getCameraIdList()[0]);
}catch (Exception e)
{
count_ = 0;
}
}
} catch (Exception e) {
//e.printStackTrace();
}
}
else {
count_ = Camera.getNumberOfCameras();
}
return count_;
}
حل سطر واحد:
public static boolean hasCamera(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}
ضع هذه الطريقة في فئة مشروع utils.java.
حسب وثائق أندرويد:
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
راجع المزيد حول API الكاميرا:
https://developer.android.com/guide/topics/media/camera.html#detect-camera