Browse Source

minior tweak demo

KngStr 3 years ago
parent
commit
955a3d934c
1 changed files with 28 additions and 24 deletions
  1. 28 24
      Demos/Android Helper/Unit1.pas

+ 28 - 24
Demos/Android Helper/Unit1.pas

@@ -62,10 +62,10 @@ type
 const
   FILE_SELECT_CODE = 0;
 var
-  FMessageChooserID: Integer = 0;
-  FOpenFileCallback: TOpenFileCallback;
-  FOpenFileEvent: TOpenFileEvent;
-  FAction: JString;
+  FOpenFileMessageID: Integer = 0;
+  FOpenFileCallback: TOpenFileCallback = nil;
+  FOpenFileEvent: TOpenFileEvent = nil;
+  FOpenFileAction: JString = nil;
 
 // https://stackoverflow.com/questions/31002388/android-intent-extra-allow-multiple-allows-only-single-picking
 procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
@@ -138,15 +138,16 @@ begin
   if Assigned(LList) then
     FreeAndNil(LList);
 
-  if FMessageChooserID <> 0 then begin
-    TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FMessageChooserID);
-    FMessageChooserID := 0;
+  if FOpenFileMessageID <> 0 then begin
+    TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FOpenFileMessageID);
+    FOpenFileMessageID := 0;
     FOpenFileCallback := nil;
     FOpenFileEvent := nil;
   end;
 end;
 
-function OpenFileDialog(AExt, ADir: string; AData: Jnet_Uri = nil; AAllowMultiSelect: Boolean = False; AOpenFileCallback: TOpenFileCallback = nil; AOpenFileEvent: TOpenFileEvent = nil): Boolean;
+function OpenFileDialog(AOpenFileCallback: TOpenFileCallback; AOpenFileEvent: TOpenFileEvent;
+  AExt, ADir: string; AData: Jnet_Uri; AAllowMultiSelect: Boolean): Boolean;
 var
   LIntent: JIntent;
   LType: string;
@@ -164,13 +165,16 @@ begin
   if LType = '' then
     LType := '*/*';
 
-  LIntent := TJIntent.JavaClass.init(FAction);
+  if FOpenFileAction = nil then //默认值
+    FOpenFileAction := TJIntent.JavaClass.ACTION_GET_CONTENT;
+
+  LIntent := TJIntent.JavaClass.init(FOpenFileAction);
   LIntent.setType(StringToJString(LType));
 
   if AAllowMultiSelect then
     LIntent.putExtra(TJIntent.JavaClass.EXTRA_ALLOW_MULTIPLE, true);
 
-  if not FAction.equals(TJIntent.JavaClass.ACTION_PICK) then
+  if not FOpenFileAction.equals(TJIntent.JavaClass.ACTION_PICK) then
     LIntent.addCategory(TJIntent.JavaClass.CATEGORY_OPENABLE);
 
   if AData <> nil then
@@ -178,8 +182,8 @@ begin
   else if ADir <> '' then
     LIntent.setData(TAndroidHelperEx.UriParse(ADir));
 
-  if FMessageChooserID = 0 then begin
-    FMessageChooserID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
+  if FOpenFileMessageID = 0 then begin
+    FOpenFileMessageID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
     FOpenFileCallback := AOpenFileCallback;
     FOpenFileEvent := AOpenFileEvent;
   end;
@@ -200,46 +204,46 @@ procedure TForm1.btn1Click(Sender: TObject);
 begin
   //Intent.setData(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI) // 这个可以用来限定APP,比如这个就是 图库
   //Intent.setData(TJContactsContract_Contacts.JavaClass.CONTENT_URI) // 联系人,不指定这个的话会直接取消
-  FAction := TJIntent.JavaClass.ACTION_PICK;
-  OpenFileDialog('*/*', '', TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI, chkAllowMultiSelect.IsChecked,
-    procedure(const ACode: Integer; const APath: string; const APathes: TStrings) begin
+  FOpenFileAction := TJIntent.JavaClass.ACTION_PICK;
+  OpenFileDialog(procedure(const ACode: Integer; const APath: string; const APathes: TStrings) begin
       if APath <> '' then
         mmo1.Lines.Add(APath)
       else if Assigned(APathes) then
         mmo1.Lines.AddStrings(APathes)
       else
         mmo1.Lines.Add(Format('Error code: %d', [ACode]));
-    end
+    end,
+    nil, '*/*', '', TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI, chkAllowMultiSelect.IsChecked
   )
 end;
 
 procedure TForm1.btn2Click(Sender: TObject);
 begin
-  FAction := TJIntent.JavaClass.ACTION_GET_CONTENT;
-  OpenFileDialog('*/*', '', nil, chkAllowMultiSelect.IsChecked,
-    procedure(const ACode: Integer; const APath: string; const APathes: TStrings) begin
+  FOpenFileAction := TJIntent.JavaClass.ACTION_GET_CONTENT;
+  OpenFileDialog(procedure(const ACode: Integer; const APath: string; const APathes: TStrings) begin
       if APath <> '' then
         mmo1.Lines.Add(APath)
       else if Assigned(APathes) then
         mmo1.Lines.AddStrings(APathes)
       else
         mmo1.Lines.Add(Format('Error code: %d', [ACode]));
-    end
+    end,
+    nil, '*/*', '', nil, chkAllowMultiSelect.IsChecked
   )
 end;
 
 procedure TForm1.btn3Click(Sender: TObject);
 begin
-  FAction := TJIntent.JavaClass.ACTION_OPEN_DOCUMENT;
-  OpenFileDialog('*/*', '', nil, chkAllowMultiSelect.IsChecked,
-    procedure(const ACode: Integer; const APath: string; const APathes: TStrings) begin
+  FOpenFileAction := TJIntent.JavaClass.ACTION_OPEN_DOCUMENT;
+  OpenFileDialog(procedure(const ACode: Integer; const APath: string; const APathes: TStrings) begin
       if APath <> '' then
         mmo1.Lines.Add(APath)
       else if Assigned(APathes) then
         mmo1.Lines.AddStrings(APathes)
       else
         mmo1.Lines.Add(Format('Error code: %d', [ACode]));
-    end
+    end,
+    nil, '*/*', '', nil, chkAllowMultiSelect.IsChecked
   )
 end;