Я создал приложение для Android с помощью Delphi XE6 и использовал код, найденный в Интернете, для подключения к ZXing BarCode Scanner.
В новом проекте, который использует только этот код, все работает нормально!
Если я добавляю несколько TabControl
, ToolBar
, Label
, Edit
, Button
и других стандартных компонентов, у меня происходит вот что:
- ZXing запускается правильно, и если я регулярно сканирую штрих-код обратно в свое приложение.
- Если я закрываю ZXing с помощью аппаратной кнопки «Назад», ZXing закрывается, но приложение зависает с черным экраном.
При отладке приложение вроде не останавливается. Код возврата исправлен, и поток продолжается до конца, не выдавая никакой ошибки.
Код вызова:
function TZXing.ZXingScan: Boolean;
var
Intent: JIntent;
ResolveInfo: JResolveInfo;
begin
Intent := TJIntent.JavaClass.init( StringToJString( 'com.google.zxing.client.android.SCAN' ) );
Intent.setPackage( StringToJString( 'com.google.zxing.client.android' ) );
Intent.putExtra( StringToJString( 'SAVE_HISTORY' ), False );
ResolveInfo := SharedActivity.getPackageManager.resolveActivity( Intent, 0 );
Result := ResolveInfo <> nil;
if Result then
SharedActivity.startActivityForResult( Intent, 0 );
end;
Код процедуры обратного вызова:
procedure TZXing.OnZXingResult( RequestCode, ResultCode: Integer; Data: JIntent );
begin
TMessageManager.DefaultManager.Unsubscribe( TMessageResultNotification, FMessageSubscriptionID );
FMessageSubscriptionID := 0;
if ( RequestCode = 0 ) and Assigned( FResultProcedure ) then
begin
if ResultCode = TJActivity.JavaClass.RESULT_OK then
begin
if Assigned( Data ) then
Result := ( OK, JStringToString( Data.getStringExtra( StringToJString( 'SCAN_RESULT_FORMAT') ) ), JStringToString( Data.getStringExtra( StringToJString( 'SCAN_RESULT' ) ) ) )
else
Result := ERROR;
end else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then
Result := CANCELED;
end;
end;
Я пробовал все и пробовал все, но я не могу найти решение.