在针对 Android API < 24 的早期版本的 Delphi(10.3 Rio 之前)中,可以创建文件意图,如使用 delphi 使用外部图库打开图像的问题的答案中所示
但是,现在 10.3 以 Android API >= 24 为目标,该代码会产生作为此问题主题的错误。
我努力在Delphi Use android fileprovider to send intent to open and image file with the default android gallery中回答这个问题,但该问题被关闭为重复,即使答案更接近,是在 Android Java 中而不是在 Delphi 中。我的答案如下(经过几个小时的研究)
uses
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.Media,
Androidapi.Helpers,
Androidapi.JNI.Net,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.App,
Androidapi.JNI.Os,
Androidapi.JNI.Support,
System.IOUtils;
procedure TTabbedForm.Button1Click(Sender: TObject);
var
Intent: JIntent;
FileName, DestFileName: string;
Data: Jnet_Uri;
CompName: JComponentName;
lFile: JFile;
const
IMAGE_FILENAME = 'small_what.jpg';
begin
FileName := System.IOUtils.TPath.GetPublicPath + PathDelim + IMAGE_FILENAME; // deployed to "assets"
DestFileName := TPath.GetDownloadsPath + PathDelim + IMAGE_FILENAME;
TFile.Copy(FileName, DestFileName, true);
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
if TJBuild_VERSION.JavaClass.SDK_INT >= TJBuild_VERSION_CODES.JavaClass.N then
begin
lFile := TJFile.JavaClass.init(StringToJString(FileName));
Intent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
Data := TJFileProvider.JavaClass.getUriForFile(TAndroidHelper.Context,
StringToJString('com.embarcadero.TestIntents.fileprovider'), lFile);
end
else
Data := TJnet_Uri.JavaClass.parse(StringToJString('file://' + DestFileName));
Intent.setDataAndType(Data, StringToJString('image/jpg'));
try
TAndroidHelper.Activity.startActivity(Intent);
except
on E: Exception do
begin
Label1.Text := E.Message;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2082 次 |
| 最近记录: |