处理存储中多个选定文件的意图结果
Handling intent result of multiple selected files from the storage
我对 android 意图感到头疼。我正在尝试从存储中 select 多个图像。我让它工作到处理结果的程度。我的猜测是某种获取所有文件路径的 For 循环?我的代码中的结果 returns 为空,我不知道是什么问题。到目前为止我的代码:
//Button to launch activity :
var
Intent: JIntent;
begin
FMessageSubscriptionID :=
TMessageManager.DefaultManager.SubscribeToMessage
(TMessageResultNotification, HandleActivityMessage);
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_PICK);
Intent.setType(StringToJString('image/*'));
Intent.setAction(TjIntent.JavaClass.ACTION_GET_CONTENT);
Intent.putExtra(TJIntent.JavaClass.EXTRA_ALLOW_MULTIPLE, true);
SharedActivity.startActivityForResult(Intent, 0);
end;
//Handling Result :
procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
...
procedure TForm3.HandleActivityMessage(const Sender: TObject;
const M: TMessage);
begin
if M is TMessageResultNotification then
OnActivityResult(TMessageResultNotification(M).RequestCode,
TMessageResultNotification(M).ResultCode,
TMessageResultNotification(M).Value);
end;
function TForm3.OnActivityResult(RequestCode, ResultCode: Integer;
Data: JIntent): Boolean;
var
filename : string; list : Tstrings;
begin
Result := False;
TMessageManager.DefaultManager.Unsubscribe(
TMessageResultNotification, FMessageSubscriptionID);
FMessageSubscriptionID := 0;
if RequestCode = ScanRequestCode then
begin
if ResultCode = TJActivity.JavaClass.RESULT_OK then
begin
if Assigned(Data) then
begin
//
filename := JStringToString(
Data.getStringExtra(
StringToJString('RESULT'))
);
filename := JStringToString(
Data.getStringExtra(
TJIntent.JavaClass.EXTRA_TEXT
)
);
ShowMessage('Result : '+filename);
memo1.Lines.Add(filename);
end;
Toast(Format(
'Found %s format barcode:'#10'%s', [ScanFormat,
ScanContent]), LongToast
);
end;
end
else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then
begin
ShowMessage('No');
end;
Result := True;
结束;
结束;
使用 IDE : Delphi 10.3.3 和 Android 9
我找到了解决办法。给你:
// loop through all images
JStringToString(Data.getClipData.getItemAt(i).getUri.toString
我对 android 意图感到头疼。我正在尝试从存储中 select 多个图像。我让它工作到处理结果的程度。我的猜测是某种获取所有文件路径的 For 循环?我的代码中的结果 returns 为空,我不知道是什么问题。到目前为止我的代码:
//Button to launch activity :
var
Intent: JIntent;
begin
FMessageSubscriptionID :=
TMessageManager.DefaultManager.SubscribeToMessage
(TMessageResultNotification, HandleActivityMessage);
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_PICK);
Intent.setType(StringToJString('image/*'));
Intent.setAction(TjIntent.JavaClass.ACTION_GET_CONTENT);
Intent.putExtra(TJIntent.JavaClass.EXTRA_ALLOW_MULTIPLE, true);
SharedActivity.startActivityForResult(Intent, 0);
end;
//Handling Result :
procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
...
procedure TForm3.HandleActivityMessage(const Sender: TObject;
const M: TMessage);
begin
if M is TMessageResultNotification then
OnActivityResult(TMessageResultNotification(M).RequestCode,
TMessageResultNotification(M).ResultCode,
TMessageResultNotification(M).Value);
end;
function TForm3.OnActivityResult(RequestCode, ResultCode: Integer;
Data: JIntent): Boolean;
var
filename : string; list : Tstrings;
begin
Result := False;
TMessageManager.DefaultManager.Unsubscribe(
TMessageResultNotification, FMessageSubscriptionID);
FMessageSubscriptionID := 0;
if RequestCode = ScanRequestCode then
begin
if ResultCode = TJActivity.JavaClass.RESULT_OK then
begin
if Assigned(Data) then
begin
//
filename := JStringToString(
Data.getStringExtra(
StringToJString('RESULT'))
);
filename := JStringToString(
Data.getStringExtra(
TJIntent.JavaClass.EXTRA_TEXT
)
);
ShowMessage('Result : '+filename);
memo1.Lines.Add(filename);
end;
Toast(Format(
'Found %s format barcode:'#10'%s', [ScanFormat,
ScanContent]), LongToast
);
end;
end
else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then
begin
ShowMessage('No');
end;
Result := True;
结束; 结束;
使用 IDE : Delphi 10.3.3 和 Android 9
我找到了解决办法。给你:
// loop through all images
JStringToString(Data.getClipData.getItemAt(i).getUri.toString