Перейти к содержанию
Fire Monkey от А до Я
  • 0

Доработка компонента для чтения штрих-кодов под RAD XE7


ophion

Вопрос

Добрый вечер дамы и господа.

 

Для RAD XE5 был написан замечательный компонент для работы со считыванием штрих-кодов на мобильных платформах.

Суть темы следующая...

 

Этот компонент очень легко переделать под RAD XE6, но вот под XE7 он никак не идёт, а разбираться с этой проблемой, честно говоря, нет времени.

 

Я выложу ссылочку на компонент, который отлично работает с XE5, а остальные представители сообщества, у которых найдется немного времени, могут допилить его для версий XE6 и XE7 и запостить в этой теме ссылочки и описания изменений.

 

Коллективный разум, так сказать...

 

Вот сама ссылочка для версии XE5

 

TKRBarCodeSanner.zip

 

P.S.

 

Если у кого-то имеются другие компоненты для работы со штрих-кодами, не поленитесь выкатить их в тему.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

 

 

Написал небольшой класс по работе с сканером 

 

Проверял на XE7 Update 1 под Android 4.1.2

 

Пример

Алексей, спасибо Вам большое!!! Но к сожелению на моём Sony Xperia Z1 Android 4.4.4 не работает, компилируется, запускается

но висит после нажатия на кнопку,

может у Вас есть соображения почему это может быть?

 

 

Решение простое, проверь у себя наличия программы https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=ru

так как мой пример и предыдущий класс использует эту программу для считывания штрихкода

    intent := TJIntent.Create;
    intent.setAction(StringToJString('com.google.zxing.client.android.SCAN'));
    SharedActivity.startActivityForResult(intent, 0);

Проверял у себя на Android 4.4.2, программа в начале не была установлена и симптомы были как у тебя, после установки все стало нормально, на многих устройствах эта программа уже предустановлена

 

Алексей, спасибо Вам большое, всё замечательно работает. :-)

Ссылка на комментарий
  • 0

А если не стоит https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=ru, разве андроид не должен предлагать ее установить? У меня не предлагает :-( Пришлось сделать linkedlabel рядом с кнопкой сканирования, с предложением скачать. 

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

 

P.S. Если Barcode scanner удалить, то запускается Google Now, сканирует нормально, но результат не возвращается. Как понимаю, строка (com.google.zxing.client.android.SCAN) для него нужна иная?

Ссылка на комментарий
  • 0

А если не стоит https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=ru, разве андроид не должен предлагать ее установить? У меня не предлагает :-( Пришлось сделать linkedlabel рядом с кнопкой сканирования, с предложением скачать. 

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

 

P.S. Если Barcode scanner удалить, то запускается Google Now, сканирует нормально, но результат не возвращается. Как понимаю, строка (com.google.zxing.client.android.SCAN) для него нужна иная?

function TMainForm.CheckBarcode :boolean;
var
  list : TStringList;
begin
  Result := true;

{$IFDEF Android}
  if BarcodeChecked then exit;
  list := TAndroidHelperClass.getListOfApplications();
  if list = nil then exit;
  try
    if not (list.Text.Contains('com.google.zxing.client.android')) then begin
      Result := false;
      MessageDlg('This application requires a QR code scanner application.'), TMsgDlgType.mtCustom, [TMsgDlgBtn.mbOK], 0,
              procedure(const AResult: TModalResult)
                begin
                  TAndroidHelperClass.openGooglePlayByAppPackage('com.google.zxing.client.android');
                end);
      exit;
    end
    else BarcodeChecked := true;
  finally
    list.Free;
  end;
{$ENDIF}

end;

Изменено пользователем aldi
Ссылка на комментарий
  • 0

Я вот так у себя сделал:

procedure TFormMain.CButtonScanClick(Sender: TObject);
begin
  If IsAppInstalled('com.google.zxing.client.android')Then
    TKRBarCodeScanner.Scan
  Else
   OpenURL('https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=ru');
end;

function TFormMain.IsAppInstalled(const AAppName: string): Boolean;
var PackageManager: JPackageManager;
begin
  PackageManager := SharedActivity.getPackageManager;
  try
    PackageManager.getPackageInfo(StringToJString(AAppName), TJPackageManager.JavaClass.GET_ACTIVITIES);
    Result := True;
  except
    on Ex: Exception do
      Result := False;
  end;
end;

procedure TFormMain.OpenURL(const AUrl: string);
{$IFDEF ANDROID}
var Uri: Jnet_Uri;
    OpenLinkIntent: JIntent;
{$ENDIF ANDROID}
begin
{$IFDEF MSWINDOWS}
  ShellExecute(0, 'open', PChar(AUrl), nil, nil, SW_SHOWNORMAL);
{$ENDIF MSWINDOWS}
{$IFDEF ANDROID}
  Uri := StrToJURI(AUrl);
  OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);
  SharedActivity.startActivity(OpenLinkIntent);
{$ENDIF ANDROID}
end;


Ссылка на комментарий
  • 0
Цитата

  intent := TJIntent.Create;
    intent.setAction(StringToJString('com.google.zxing.client.android.SCAN'));
    SharedActivity.startActivityForResult(intent, 0);

код работает. запускается программа, но как потом результат штрих-кода передать в программу? у меня просто вибрирует телефон и программа считывания кода закрывается и возвращается в мою программу откуда я ее вызвал.

Ссылка на комментарий
  • 0
2 часа назад, AndroidHalfNoob сказал:

код работает. запускается программа, но как потом результат штрих-кода передать в программу? у меня просто вибрирует телефон и программа считывания кода закрывается и возвращается в мою программу откуда я ее вызвал.

В первом сообщении этой темы есть ссылка на обсуждаемый здесь компонент  TKRBarCodeSanner.zip, у этого компонента есть событие TKRBarCodeScannerScanResult(Sender: TObject;  AResult: string), ну и  AResult - это то где находится результат сканирования.

Ссылка на комментарий
  • 0
18 минут назад, Евгений Корепов сказал:

В первом сообщении этой темы есть ссылка на обсуждаемый здесь компонент  TKRBarCodeSanner.zip, у этого компонента есть событие TKRBarCodeScannerScanResult(Sender: TObject;  AResult: string), ну и  AResult - это то где находится результат сканирования.

еще до своего поста скачал компонент и установил его. при компиляции выдается ошибка. к проекту подключил FMX.TKRBarCodeScanner.pas

Цитата

function TTKRBarCodeScanner.HandleAppEvent(AAppEvent: TApplicationEvent;
  AContext: TObject): Boolean;
begin
  Result := False;
  if FMonitorClipboard and (AAppEvent = aeBecameActive) then
  begin
    Result := GetBarcodeValue;
  end;
end;

в частности Делфи не известно aeBecameActive

Изменено пользователем AndroidHalfNoob
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...