Другой способ взглянуть на это: Используются 64 бита для представления чисел. Как следствие, не может быть представлено более 2 ** 64 = 18 446 744 073 709 551 616 различных чисел.
Тем не менее, Math говорит, что существует уже бесконечное число десятичных знаков между 0 и 1. IEE 754 определяет кодировку для эффективного использования этих 64 бит для гораздо большего количества пробелов плюс NaN и +/- Infinity, поэтому есть пробелы между точно представленными числами, заполненными числами, только приближены.
К сожалению, 0,3 сидит в промежутке.
попробуйте это ...
static Camera camera = null;
объявить его сверху.
try{
if(clickOn == true) {
clickOn = false;
camera = Camera.open();
Parameters parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
remoteViews.setViewVisibility(R.id.button1, View.GONE);
remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
localAppWidgetManager.updateAppWidget(componentName, remoteViews);
} else {
clickOn = true;
camera.stopPreview();
camera.release();
camera = null;
remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
remoteViews.setViewVisibility(R.id.button2, View.GONE);
localAppWidgetManager.updateAppWidget(componentName, remoteViews);
}
} catch(Exception e) {
Log.e("Error", ""+e);
}
Эта проблема может возникнуть в android 6.0, если вы не разрешили разрешение камеры для своего приложения. Как и в случае с Android 6.0, вы можете обрабатывать разрешение на разрешение приложения, которое вы предоставите или не имеете конкретных прав для приложения.
Итак, вам нужно разрешить разрешение из settings->apps->your_app->enable camera permission
, если оно еще не включено.
Попробуйте использовать эту строку, когда вы выходите из приложения:
System.exit(0);
Я откуда-то получил код приложения фонарика. Он использовал System.exit(0)
, чтобы закрыть приложение. Я удалил его, зная, что это не очень хорошая практика. Затем я начал получать эти ошибки. Я попробовал решение принятого ответа, но потом начал получать некоторые другие ошибки. Поэтому вместо их решения я просто вернул эту строку System.exit(0)
. И он начал нормально работать. Я знаю, что это не очень хорошо, но для небольшого приложения для фонарей вы можете попробовать это быстрое решение.
Привет, я надеюсь, что вы имеете дело с факельным видом приложения или чем-то, связанным с флеш-памятью, и было много обсуждений по этому поводу раньше, и вот несколько полезных ссылок и руководств для достижения ваших потребностей, пожалуйста, пройдите через них, надеюсь, они могут помочь вы
Как включить программную вспышку камеры в Android?
http://www.androidhive.info/2013/04/ android-development-flashlight-application /
http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight. html # .U4WH5Xbc3o4
http://android.programmerguru.com/android-flashlight-example/
, если вы попытаетесь открыть камеру с помощью идентификатора камеры, который не существует, вы получите ту же самую ошибку (java.lang.RuntimeException: Fail to Connect to camera service)
посмотрите на свой код на этот блок
camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;
Вызовите release()
, чтобы освободить камеру для использования другими приложениями. Приложения должны немедленно отпустить камеру в onPause()
(и снова открыть () в onResume().
. В приведенном выше коде сразу после выпуска вы помещаете нуль в камеру
Я также видел эту ошибку:
java.lang.RuntimeException: Не удалось подключиться к службе камеры
blockquote>, экспериментируя с приложением для фонарика. Оказывается, я был немного неряшлив с моими разрешениями и скопировал их в тело блока приложения в файле manifest.xml. Поэтому вам действительно нужно подчиняться синтаксису, как описано в:
http://developer.android.com/guide/topics/manifest/manifest-element.html
В противном случае приложение будет терпеть неудачу при сбое подключения к службе на вызове Camera.open (). Он должен выглядеть так, основываясь на ваших разрешениях на вопрос:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus"/> <application
Убедитесь, что ваше разрешение и список функций содержатся только в разделе манифеста и не захоронены в разделе приложения!
Простой ответ, который я могу найти в этой проблеме, заключается в том, что я не просил разрешения для камеры для пользователя, и поэтому по умолчанию разрешение камеры не было доступно моему приложению на устройствах Marshmallow. Я просто добавил проверку доступа к камере перед запуском камеры, и все работает нормально.
В моем андроид-проекте есть такая же проблема. Это моя ошибка Logcat
03-29 19: 26: 04.194 224-608 /? V / EmulatedCamera_BaseCamera: getCameraInfo 03-29 19: 26: 04.196 224-224 /? I / CameraService: CameraService :: connect call (PID -1 «com.proitzen.staffapp», ID камеры 1) для версии HAL по умолчанию и Camera API версии 1 03-29 19: 26: 04.196 224-224 /? W / ServiceManager: Ошибка разрешения: android.permission.CAMERA от uid = 10067 pid = 1776 03-29 19: 26: 04.196 224-224 /? E / CameraService: Разрешение: нельзя использовать камеру pid = 1776, uid = 10067 03-29 19: 26: 04.196 1776-1776 / com.proitzen.staffapp W / CameraBase: Произошла ошибка при подключении к камере 1: Сервис недоступен 03-29 19: 26: 04.200 1776-1776 / com.proitzen.staffapp D / AndroidRuntime: Завершение работы VM
blockquote>
Ни один из вышеперечисленных решений не работал для меня. Мое приложение для Android отработало на физических устройствах Android и дало указанную выше ошибку только в Genymotion.
Решение: запустите настройки эмулятора Genumotion -> Приложения ---> выберите приложение -> Разрешения -> включить камера и микрофон и память.
Если весь ваш код в порядке, вы должны проверить, есть ли какое-либо другое приложение, использующее вашу камеру. Затем вы должны закрыть другое приложение, которое в настоящее время использует вашу камеру.
Если ваша версия os 6.0 или более поздняя версия попробуйте это, надеюсь, что это поможет.
public class RequestUserPermission {
private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
public RequestUserPermission(Activity activity) {
this.activity = activity;
}
public void verifyStoragePermissions() {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
}
**//CALL FROM YOUR ACTIVITY**
RequestUserPermission requestUserPermission = new RequestUserPermission(this);
requestUserPermission.verifyStoragePermissions();
У меня была такая же проблема, что ни один из ответов здесь не был решен, поэтому, после его решения, я добавляю свой способ решения проблемы. Это относится к новым версиям Android, поддерживающим настройку разрешений для каждого приложения (начиная с Marshmallow, 6.0). Разрешение на камеру может быть отключено и должно быть включено из настроек приложения. Настройки -> Приложения -> [Ваше приложение] -> Разрешения
Подробнее об этом здесь: http://developer.android.com/training/permissions/requesting.html
После того, как вы вернулись с камеры, вам нужно stopPreview()
и release()
, чтобы другое приложение могло получить к нему доступ. Сделайте класс «Камера» статичным и назовите его как null
в onPause()
. Это разрешает мою проблему.
Попробуйте:
public class CameraPhotoCapture extends Activity{
static Camera mcamera = null;
@Override
protected void onPause() {
// TODO Auto-generated method stub
if (mcamera != null) {
mcamera.stopPreview();
mcamera.release();
mcamera = null;
Log.d(DEBUG_TAG, "releaseCamera -- done");
}
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
if (mcamera != null) {
Camera.open();
Log.d(DEBUG_TAG, "openCamera -- done");
}
super.onResume();
}
}