Сканирование QR-кода в Samsung Galaxy s4. Сервисные коды и комбинации клавиш для смартфонов Samsung Galaxy Зачем мне вообще сканировать QR-коды

QR-код - специальный матричный код, разработанный еще в 1994 году, который приобрел широкую известность лишь несколько лет назад. Под QR-кодом может быть скрыта самая разнообразная информация: ссылка на веб-сайт, изображение, электронная визитка и т.д. Сегодня мы рассмотрим, какие существуют методы распознавания QR-кодов на iPhone.

На iPhone отсканировать QR-код можно двумя способами: штатными средствами и с помощью специальных приложений.

Способ 1: Приложение Камера

В iOS 11 появилась одна очень интересная возможность: теперь приложение Камера может автоматически искать и распознавать QR-коды. Вам потребуется лишь убедиться, что соответствующая настройка включена в параметрах смартфона.

Способ 2: QRScanner

Сторонние приложения для сканирования, которые распространяются в App Store, предоставляют больше возможностей, нежели штатные средства iPhone. Более того, если вы являетесь владельцем устаревшей модели яблочного смартфона, то наверняка у вас нет возможности обновиться до одиннадцатой версии. А значит, подобные приложения - это единственная возможность наделить свой телефон функцией сканирования.

Способ 3: Kaspersky QR Scanner

Не все ссылки, которые скрываются под QR-кодами, являются безопасными. Некоторые из них ведут на вредоносные и фишинговые ресурсы, которые могут нанести серьезный вред устройству и вашей конфиденциальности. И чтобы обезопасить себя от возможной угрозы, рекомендуется использовать приложение Kaspersky QR Scanner, которое является не только сканером, но и защитным инструментом против вредоносных веб-сайтов.

Сервисные становятся полезными в тех случаях, когда пользователю необходимо получить доступ к некоторым функциям, которые недоступны в обычном режиме. По большому счету они были придуманы для тестирования работы устройства, но мы также может использовать их для вызова различных меню.

Продвинутые пользователи постоянно имеют с ними дело. К примеру, на некоторых Galaxy-устройствах вы можете настроить громкость звука, узнать скрытую информацию о телефоне и многое другое. Сейчас мы разберем самые полезные сервисные коды, которые подойдут пользователям смартфонов и планшетов компании Samsung.

Как ввести сервисный код?

Все очень просто. Открываете номеронабиратель и вводите цифры со знаками, которые соответствую тому меню, которое вы хотите выполнить. После ввода последнего символа меню должно автоматически запуститься, никаких дополнительных действий производить не нужно.

Отказ от ответственности: эта информация предназначена опытных пользователей. Не стоит пробовать что-либо изменять в настройках, если вы мало знакомы с мобильными устройствам. Мы не несем ответственность за возникшие впоследствии проблем, включая потерю данных или повреждения аппаратного обеспечения.

Все сервисные коды для смартфонов и планшетов Samsung Galaxy


Повторюсь, что не стоит трогать те параметры, о значении которых вы не знаете. Вы рискуете потерять функционал вашего телефона или ценные данные.

Полезные комбинации клавиш для Samsung Galaxy

  • Войти в рекавери: в выключенном состоянии телефона зажимаем кнопки громкости вверх, Домой и питания
  • Режим бутлоадера/fastboot: тоже нужно выключить телефон, а затем зажать кнопки громкости вниз, Домой и питания
  • Создать снимок экрана: на нужном экране зажимаем громкость вверх, питания и, конечно, кнопку Домой.
  • Заставить телефон перейти в выключенное состояние: одновременно зажать кнопки громкость вниз и питания

Надеемся данные системные коды и комбинации клавиш пригодятся вам, но, как в 100-й раз хотим предупредить вас, что использовать их стоит в двойной осторожностью.

Я создал приложение, которое может сканировать QR-код. Он хорошо работает со всеми устройствами Android, за исключением Samsung Galaxy s4 .
Приложение не сканирует QR-код при использовании устройства Galaxy s4.
Теперь, когда эта Galaxy s4 имеет версию Android 4.2.2, я также проверил свое приложение на других устройствах, имеющих такую же версию Android (4.2.2), что и Nexus-4, и с ней все отлично работает.
Является ли какое-либо другое оборудование, используемое для сканирования QR-кода в Galaxy s4?
Нужна помощь в решении этой странной проблемы!

Ниже приведен код, который я использовал в своем приложении.

CameraManager.java

/** * This object wraps the Camera service object and expects to be the only one talking to it. The * implementation encapsulates the steps needed to take preview-sized images, which are used for * both preview and decoding. * * @author [email protected] (Daniel Switkin) */ public final class CameraManager { private static final String TAG = CameraManager.class.getSimpleName(); private static final int MIN_FRAME_WIDTH = 240; private static final int MIN_FRAME_HEIGHT = 240; private static final int MAX_FRAME_WIDTH = 480; private static final int MAX_FRAME_HEIGHT = 360; private static CameraManager cameraManager; static final int SDK_INT; // Later we can use Build.VERSION.SDK_INT static { int sdkInt; try { sdkInt = Integer.parseInt(Build.VERSION.SDK); } catch (NumberFormatException nfe) { // Just to be safe sdkInt = 10000; } SDK_INT = sdkInt; } private final Context context; private final CameraConfigurationManager configManager; private Camera camera; private Rect framingRect; private Rect framingRectInPreview; private boolean initialized; private boolean previewing; private boolean reverseImage; private final boolean useOneShotPreviewCallback; /** * Preview frames are delivered here, which we pass on to the registered handler. Make sure to * clear the handler so it will only receive one message. */ private final PreviewCallback previewCallback; /** Autofocus callbacks arrive here, and are dispatched to the Handler which requested them. */ private final AutoFocusCallback autoFocusCallback; /** * Initializes this static object with the Context of the calling Activity. * * @param context The Activity which wants to use the camera. */ public static void init(Context context) { if (cameraManager == null) { cameraManager = new CameraManager(context); } } /** * Gets the CameraManager singleton instance. * * @return A reference to the CameraManager singleton. */ public static CameraManager get() { return cameraManager; } private CameraManager(Context context) { this.context = context; this.configManager = new CameraConfigurationManager(context); // Camera.setOneShotPreviewCallback() has a race condition in Cupcake, so we use the older // Camera.setPreviewCallback() on 1.5 and earlier. For Donut and later, we need to use // the more efficient one shot callback, as the older one can swamp the system and cause it // to run out of memory. We can"t use SDK_INT because it was introduced in the Donut SDK. useOneShotPreviewCallback = Integer.parseInt(Build.VERSION.SDK) > 3; // 3 = Cupcake previewCallback = new PreviewCallback(configManager, useOneShotPreviewCallback); autoFocusCallback = new AutoFocusCallback(); } /** * Opens the camera driver and initializes the hardware parameters. * * @param holder The surface object which the camera will draw preview frames into. * @throws IOException Indicates the camera driver failed to open. */ public void openDriver(SurfaceHolder holder) throws IOException { if (camera == null) { camera = Camera.open(); if (camera == null) { throw new IOException(); } } camera.setPreviewDisplay(holder); if (!initialized) { initialized = true; configManager.initFromCameraParameters(camera); } configManager.setDesiredCameraParameters(camera); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); reverseImage = prefs.getBoolean(PreferencesActivity.KEY_REVERSE_IMAGE, false); if (prefs.getBoolean(PreferencesActivity.KEY_FRONT_LIGHT, false)) { FlashlightManager.enableFlashlight(); } } /** * Closes the camera driver if still in use. */ public void closeDriver() { if (camera != null) { FlashlightManager.disableFlashlight(); camera.release(); camera = null; // Make sure to clear these each time we close the camera, so that any scanning rect // requested by intent is forgotten. framingRect = null; framingRectInPreview = null; } } /** * Asks the camera hardware to begin drawing preview frames to the screen. */ public void startPreview() { if (camera != null && !previewing) { camera.startPreview(); previewing = true; } } /** * Tells the camera to stop drawing preview frames. */ public void stopPreview() { if (camera != null && previewing) { if (!useOneShotPreviewCallback) { camera.setPreviewCallback(null); } camera.stopPreview(); previewCallback.setHandler(null, 0); autoFocusCallback.setHandler(null, 0); previewing = false; } } /** * A single preview frame will be returned to the handler supplied. The data will arrive as byte * in the message.obj field, with width and height encoded as message.arg1 and message.arg2, * respectively. * * @param handler The handler to send the message to. * @param message The what field of the message to be sent. */ public void requestPreviewFrame(Handler handler, int message) { if (camera != null && previewing) { previewCallback.setHandler(handler, message); if (useOneShotPreviewCallback) { camera.setOneShotPreviewCallback(previewCallback); } else { camera.setPreviewCallback(previewCallback); } } } /** * Asks the camera hardware to perform an autofocus. * * @param handler The Handler to notify when the autofocus completes. * @param message The message to deliver. */ public void requestAutoFocus(Handler handler, int message) { if (camera != null && previewing) { autoFocusCallback.setHandler(handler, message); //Log.d(TAG, "Requesting auto-focus callback"); camera.autoFocus(autoFocusCallback); } } /** * Calculates the framing rect which the UI should draw to show the user where to place the * barcode. This target helps with alignment as well as forces the user to hold the device * far enough away to ensure the image will be in focus. * * @return The rectangle to draw on screen in window coordinates. */ public Rect getFramingRect() { if (framingRect == null) { if (camera == null) { return null; } Point screenResolution = configManager.getScreenResolution(); int width = screenResolution.x * 3 / 4; if (width < MIN_FRAME_WIDTH) { width = MIN_FRAME_WIDTH; } else if (width > MAX_FRAME_WIDTH) { width = MAX_FRAME_WIDTH; } int height = screenResolution.y * 3 / 4; if (height < MIN_FRAME_HEIGHT) { height = MIN_FRAME_HEIGHT; } else if (height > MAX_FRAME_HEIGHT) { height = MAX_FRAME_HEIGHT; } int leftOffset = (screenResolution.x - width) / 2; int topOffset = (screenResolution.y - height) / 2; framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); Log.d(TAG, "Calculated framing rect: " + framingRect); } return framingRect; } /** * Like {@link #getFramingRect} but coordinates are in terms of the preview frame, * not UI / screen. */ public Rect getFramingRectInPreview() { if (framingRectInPreview == null) { Rect rect = new Rect(getFramingRect()); Point cameraResolution = configManager.getCameraResolution(); Point screenResolution = configManager.getScreenResolution(); /* updated to allow for portrait instead of landscape rect.left = rect.left * cameraResolution.y / screenResolution.x; rect.right = rect.right * cameraResolution.y / screenResolution.x; rect.top = rect.top * cameraResolution.x / screenResolution.y; rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y; */ rect.left = rect.left * cameraResolution.x / screenResolution.x; rect.right = rect.right * cameraResolution.x / screenResolution.x; rect.top = rect.top * cameraResolution.y / screenResolution.y; rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y; framingRectInPreview = rect; } return framingRectInPreview; } /** * Allows third party apps to specify the scanning rectangle dimensions, rather than determine * them automatically based on screen resolution. * * @param width The width in pixels to scan. * @param height The height in pixels to scan. */ public void setManualFramingRect(int width, int height) { Point screenResolution = configManager.getScreenResolution(); if (width > screenResolution.x) { width = screenResolution.x; } if (height > screenResolution.y) { height = screenResolution.y; } int leftOffset = (screenResolution.x - width) / 2; int topOffset = (screenResolution.y - height) / 2; framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); Log.d(TAG, "Calculated manual framing rect: " + framingRect); framingRectInPreview = null; } /** * A factory method to build the appropriate LuminanceSource object based on the format * of the preview buffers, as described by Camera.Parameters. * * @param data A preview frame. * @param width The width of the image. * @param height The height of the image. * @return A PlanarYUVLuminanceSource instance. */ public PlanarYUVLuminanceSource buildLuminanceSource(byte data, int width, int height) { Rect rect = getFramingRectInPreview(); int previewFormat = configManager.getPreviewFormat(); String previewFormatString = configManager.getPreviewFormatString(); switch (previewFormat) { // This is the standard Android format which all devices are REQUIRED to support. // In theory, it the only one we should ever care about. case PixelFormat.YCbCr_420_SP: // This format has never been seen in the wild, but is compatible as we only care // about the Y channel, so allow it. case PixelFormat.YCbCr_422_SP: return new PlanarYUVLuminanceSource(data, width, height, rect.left, rect.top, rect.width(), rect.height(), reverseImage); default: // The Samsung Moment incorrectly uses this variant instead of the "sp" version. // Fortunately, it too has all the Y data up front, so we can read it. if ("yuv420p".equals(previewFormatString)) { return new PlanarYUVLuminanceSource(data, width, height, rect.left, rect.top, rect.width(), rect.height(), reverseImage); } } throw new IllegalArgumentException("Unsupported picture format: " + previewFormat + "/" + previewFormatString); } }

PreviewCallback.java

Final class PreviewCallback implements Camera.PreviewCallback { private static final String TAG = PreviewCallback.class.getSimpleName(); private final CameraConfigurationManager configManager; private final boolean useOneShotPreviewCallback; private Handler previewHandler; private int previewMessage; PreviewCallback(CameraConfigurationManager configManager, boolean useOneShotPreviewCallback) { this.configManager = configManager; this.useOneShotPreviewCallback = useOneShotPreviewCallback; } void setHandler(Handler previewHandler, int previewMessage) { this.previewHandler = previewHandler; this.previewMessage = previewMessage; } public void onPreviewFrame(byte data, Camera camera) { Point cameraResolution = configManager.getCameraResolution(); if (!useOneShotPreviewCallback) { camera.setPreviewCallback(null); } if (previewHandler != null) { Message message = previewHandler.obtainMessage(previewMessage, cameraResolution.x, cameraResolution.y, data); message.sendToTarget(); previewHandler = null; } else { Log.d(TAG, "Got preview callback, but no handler for it"); } } }

Помимо приложений соцсетей и игр, на смартфоне не помешает иметь и полезные в быту программы. Сейчас QR-коды встречаются практически повсеместно: на улицах города, упаковках продуктов и визитных карточках. Понятное дело, чтобы прочитать их, понадобится специальный софт. О пяти лучших решениях для этой задачи пойдет речь далее.

QR Droid отличается прежде всего приятным и, что немаловажно, понятным интерфейсом. Приложение давно известно среди пользователей Android-устройств. После запуска вы можете сразу же отсканировать необходимый код. Если в нем была ссылка на веб-страницу, то автоматически произойдет переход во встроенный браузер. Впрочем, это можно отключить в настройках, либо же установить в качестве браузера по умолчанию свой вариант. Интересно также, что прямо из программы вы можете создать собственный QR-код с необходимой информацией.

2. QR Code Reader

Если вы не хотите усложнять себе жизнь и ищите простой сканер, то QR Code Reader станет отличным решением. Здесь лишь камера (можно выбрать и готовое изображение из галереи), история отсканированных QR-кодов и кнопка вспышки, ничего больше.

3. BIDI

Приложение BIDI во многом схожо c QR Droid. Тут у нас есть большие возможности не только по обычному распознаванию QR-кодов, но созданию собственных. Например, визитных карточек. Очень удобно. Есть специальные разделители для номера телефона, адреса, email и т. п. В любое поле можно после внести нужные правки.

4. Neo Reader

Neo Reader, пожалуй, одно из самых мощных решений, поскольку позволяет считывать информацию не только с QR-кодов, но и со штрих-кодов. Прямо как в магазине: если приложению не удастся распознать код, то вы можете вручную ввести цифры, расположенные под ним. Еще есть возможность включить или выключить звук, а также привязку к местоположению. Единственное, что странно, создание собственных QR-кодов непосредственно в программе не предусмотрено. В качестве альтернативы предлагается быстрая ссылка на соответствующий сайт.

5. QR Reader

Первое, что привлекает внимание после запуска, так это движущаяся красная линия. Не уверены, что она выполняют какую-то роль (скорее это просто декоративный элемент), но выглядит интересно. Ещё один момент: приложение, судя по расположению системных кнопок, работает в горизонтальном режиме, имейте это в виду (хотя в режиме чтения весь контент расположен вертикально). В меню есть история сканирований и закладки. Можно создавать свои QR-коды.

А каким приложением для чтения QR-кодов пользуетесь вы?

По материалам AndroidPit