Delphi Android 12 文件分享代码示例 - 使用 Intent 实现跨应用分享
以下是 Delphi 中分享文件给其他 APP 的代码示例,使用 Android 原生的 'Intent' 实现跨应用分享功能:
uses
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
Androidapi.Helpers,
FMX.Helpers.Android,
System.IOUtils;
procedure ShareFile(const AFileName: string);
var
Intent: JIntent;
Uri: Jnet_Uri;
Stream: JFileInputStream;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
Intent.setType(StringToJString('text/plain'));
Uri := TJFileProvider.JavaClass.getUriForFile(
SharedActivityContext,
StringToJString('com.example.myapp.fileprovider'),
TJFile.JavaClass.init(StringToJString(AFileName)));
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
SharedActivity.startActivity(TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence('Share File')));
end;
// 使用示例
procedure TForm1.Button1Click(Sender: TObject);
begin
ShareFile(TPath.Combine(TPath.GetDocumentsPath, 'example.txt'));
end;
代码说明:
-
创建 Intent 对象:
- 设置 Intent 的 Action 为 'ACTION_SEND',表示分享操作。
- 设置 Intent 的 Type 为 'text/plain',表示要分享的是文本文件。
-
使用 FileProvider 创建 Uri 对象:
- 使用
TJFileProvider.JavaClass.getUriForFile方法创建 'content' 类型的 Uri 对象,用于代表要分享的文件。 com.example.myapp.fileprovider是自定义的 FileProvider 授权文件访问的 Authority 字符串,需要在AndroidManifest.xml文件中声明。AFileName是要分享的文件路径。
- 使用
-
将 Uri 添加到 Intent:
- 使用
putExtra方法将 Uri 对象作为 Parcelable 对象放入 Intent 的EXTRA_STREAM属性中。
- 使用
-
授权其他应用读取文件:
- 使用
addFlags方法添加FLAG_GRANT_READ_URI_PERMISSION标志,授权其他应用可以读取分享的文件。
- 使用
-
启动系统选择器:
- 使用
startActivity方法启动系统选择器,让用户选择要分享到的应用程序。
- 使用
注意:
com.example.myapp.fileprovider是示例 Authority 字符串,需要根据实际情况修改。- 在
AndroidManifest.xml文件中声明 FileProvider,并在<provider>标签中配置 Authority 字符串。 - 确保要分享的文件存在并且用户有权限访问。
- 在 Android 12 及以上版本,需要使用 FileProvider 才能访问文件。
通过上述代码,可以实现 Delphi 应用在 Android 平台上将文件分享到其他应用程序的功能。
原文地址: https://www.cveoy.top/t/topic/n48q 著作权归作者所有。请勿转载和采集!