以下是 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;

代码说明:

  1. 创建 Intent 对象:

    • 设置 Intent 的 Action 为 'ACTION_SEND',表示分享操作。
    • 设置 Intent 的 Type 为 'text/plain',表示要分享的是文本文件。
  2. 使用 FileProvider 创建 Uri 对象:

    • 使用 TJFileProvider.JavaClass.getUriForFile 方法创建 'content' 类型的 Uri 对象,用于代表要分享的文件。
    • com.example.myapp.fileprovider 是自定义的 FileProvider 授权文件访问的 Authority 字符串,需要在 AndroidManifest.xml 文件中声明。
    • AFileName 是要分享的文件路径。
  3. 将 Uri 添加到 Intent:

    • 使用 putExtra 方法将 Uri 对象作为 Parcelable 对象放入 Intent 的 EXTRA_STREAM 属性中。
  4. 授权其他应用读取文件:

    • 使用 addFlags 方法添加 FLAG_GRANT_READ_URI_PERMISSION 标志,授权其他应用可以读取分享的文件。
  5. 启动系统选择器:

    • 使用 startActivity 方法启动系统选择器,让用户选择要分享到的应用程序。

注意:

  • com.example.myapp.fileprovider 是示例 Authority 字符串,需要根据实际情况修改。
  • 在 AndroidManifest.xml 文件中声明 FileProvider,并在 <provider> 标签中配置 Authority 字符串。
  • 确保要分享的文件存在并且用户有权限访问。
  • 在 Android 12 及以上版本,需要使用 FileProvider 才能访问文件。

通过上述代码,可以实现 Delphi 应用在 Android 平台上将文件分享到其他应用程序的功能。

Delphi Android 12 文件分享代码示例 - 使用 Intent 实现跨应用分享

原文地址: https://www.cveoy.top/t/topic/n48q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录