我使用 Delphi XE6 创建了一个 Android 应用程序,并使用在 Internet 上找到的代码连接到 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;
我已经尝试了所有方法并尝试了所有方法,但我找不到解决方案。