{   Google ZXing Call demo   Delphi Version: Delphi XE5 Version 19.0.13476.4176   By: flcop([email protected]) }unit UMain;interfaceuses  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,  FMX.Layouts, FMX.Memo,  System.Rtti,   FMX.Helpers.Android,  Androidapi.JNI.Net,  Androidapi.JNI.GraphicsContentViewText,  Androidapi.JNI.JavaTypes,  FMX.platform,  FMX.Platform.Android;type  TFrmMain = class(TForm)    Memo1: TMemo;    Button1: TButton;    Button2: TButton;    Button3: TButton;    PanelOpt: TPanel;    Panel2: TPanel;    SBTitle: TSpeedButton;    procedure Button1Click(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure SBTitleClick(Sender: TObject);  private    { Private declarations }    FClipboardService: IFMXClipboardService;    FClipboardValue: TValue;    FZXingCalled: Boolean;    procedure CallZXing(const ACodeMode: string);    function IsIntentCallable(const AIntent: JIntent): Boolean;    function GetZXingIntent: JIntent;    procedure ClipboardSave;    procedure ClipboardBack;    procedure ShowInfo(const AInfo: string);    function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;    procedure CheckEnvironment;    procedure OpenURL(const AURL: string);  public    { Public declarations }  end;var  FrmMain: TFrmMain;implementation{$R *.fmx}const  CodeModes: array[0..2] of string = ('PRODUCT_MODE', 'QR_CODE_MODE', 'SCAN_MODE');procedure TFrmMain.Button1Click(Sender: TObject);begin  // 0, 1, 2  CallZXing(CodeModes[TButton(Sender).Tag]);end;procedure TFrmMain.CallZXing(const ACodeMode: string);var  LIntent: JIntent;begin  ClipboardSave;  FClipboardService.SetClipboard('');  LIntent := GetZXingIntent();  LIntent.putExtra(StringToJString('SCAN_MODE'), StringToJString(ACodeMode));  SharedActivity.startActivityForResult(LIntent, 0);  FZXingCalled := True;end;procedure TFrmMain.CheckEnvironment;var  LFMXApplicationEventService: IFMXApplicationEventService;  LIsZXingCallable: Boolean;  LStr: string;begin  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService,       IInterface(LFMXApplicationEventService)) then    LFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent)  else    LStr := '调用失败,不支持IFMXApplicationEventService!';  if not TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,       IInterface(FClipboardService)) then    LStr := LStr + sLineBreak + '调用失败, 不支持IFMXClipboardService!';  LIsZXingCallable := IsIntentCallable(GetZXingIntent);  if not LIsZXingCallable then  begin    SBTitle.Text := '点我去ZXing下载页...';    SBTitle.OnClick := SBTitleClick;    LStr := LStr + sLineBreak + '未发现ZXing, 请安装ZXing后重新启动本程序';  end else    SBTitle.Text := 'Google ZXing Call';  ShowInfo(LStr.Trim);  PanelOpt.Enabled := Assigned(LFMXApplicationEventService) and                      Assigned(FClipboardService) and LIsZXingCallable;end;procedure TFrmMain.ClipboardBack;begin  FClipboardService.SetClipboard(FClipboardValue);end;procedure TFrmMain.ClipboardSave;begin  FClipboardValue := FClipboardService.GetClipboard;end;procedure TFrmMain.FormCreate(Sender: TObject);begin  CheckEnvironment;end;function TFrmMain.GetZXingIntent: JIntent;const  GOOGLE_ZXING = 'com.google.zxing.client.android.SCAN';  GOOGLE_ZXING_PACKAGE = 'com.google.zxing.client.android';begin  Result := TJIntent.JavaClass.init(StringToJString(GOOGLE_ZXING));  Result.setPackage(StringToJString(GOOGLE_ZXING_PACKAGE));end;function TFrmMain.HandleAppEvent(AAppEvent: TApplicationEvent;  AContext: TObject): Boolean;var  LResult: string;begin  if FZXingCalled and (AAppEvent = TApplicationEvent.aeBecameActive) then  begin    LResult := FClipboardService.GetClipboard.ToString;    if LResult.IsEmpty then      ShowInfo('扫描取消')    else      ShowInfo(LResult);    ClipboardBack;    FZXingCalled := False;  end;  Result := True;end;function TFrmMain.IsIntentCallable(const AIntent: JIntent): Boolean;var  LJPackageManager: JPackageManager;begin  Result := False;  if Assigned(AIntent) then  begin    LJPackageManager := SharedActivityContext.getPackageManager;    Result := LJPackageManager.queryIntentActivities(AIntent,      TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size <> 0;  end;end;procedure TFrmMain.OpenURL(const AURL: string);var  LIntent: JIntent;begin  LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW,     TJnet_Uri.JavaClass.parse(StringToJString(AURL)));  SharedActivity.startActivity(LIntent);end;procedure TFrmMain.SBTitleClick(Sender: TObject);begin  OpenURL('http://code.google.com/p/zxing/downloads/list');end;procedure TFrmMain.ShowInfo(const AInfo: string);begin  Memo1.Text := AInfo;end;end.

更多相关文章

  1. Android 程序真退出与假退出后台运行详解
  2. 判断android应用程序是否已安装
  3. Android应用程序之间共享文字和图片(一)
  4. Android实时采集视频,并在PC上显示出采集到的视频的程序
  5. Android 检测程序异常崩溃,重启应用
  6. Android应用程序获取ROOT权限代码
  7. android交叉编译c程序
  8. Android应用程序键盘(Keyboard)消息处理机制分析(23)
  9. Android判断程序是否第一次启动

随机推荐

  1. Android应用集成开发环境,强烈推荐使用
  2. android so库多平台引用第三方so库,及多平
  3. Android(安卓)map转json格式,附上Jackson
  4. Android程序如何全屏显示
  5. ImageButton的使用,如何设置背景图占满整
  6. Android的layout_weight属性详解
  7. Android(安卓)Animation动画
  8. 用GDB调试Android中C/C++程序(命令行)
  9. 如何在android style文件中使用自定义属
  10. Android学习笔记之动画效果Animation