Delphi 11.3 Android 10 共享文件接收:完整指南和代码示例

在 Delphi 11.3 中,您可以利用 Android Intents 来接收其他应用程序共享的文件。本文将提供一个完整的指南,包括代码示例和详细解释,帮助您实现此功能。

代码示例

procedure TForm1.btnReceiveClick(Sender: TObject);
var
  Intent: JIntent;
  Uri: Jnet_Uri;
begin
  Intent := TJIntent.Wrap(TJIntent.JavaClass.create);
  Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
  Intent.setType(StringToJString('*/*'));

  if (TJBuild_VERSION.JavaClass.SDK_INT >= 19) then
  begin
    Intent.addCategory(StringToJString(TJIntent.JavaClass.CATEGORY_OPENABLE));
  end;

  Uri := TJnet_Uri.JavaClass.parse(StringToJString('content://' + JStringToString(TAndroidHelper.Context.getPackageName()) + '/shared_file.txt'));
  Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));

  if (Intent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then
  begin
    TAndroidHelper.Activity.startActivityForResult(Intent, 0);
  end
  else
  begin
    ShowMessage('No application found to handle this request');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TAndroidHelper.Context.getPackageManager().setComponentEnabledSetting(
    TAndroidHelper.Context.getApplicationContext().getComponentName(),
    TJPackageManager.JavaClass.COMPONENT_ENABLED_STATE_ENABLED,
    TJPackageManager.JavaClass.DONT_KILL_APP);
  TAndroidHelper.Context.getApplicationContext().getContentResolver().takePersistableUriPermission(
    TJnet_Uri.JavaClass.parse(StringToJString('content://' + JStringToString(TAndroidHelper.Context.getPackageName()) + '/shared_file.txt')),
    TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION);
end;

procedure TForm1.FormShow(Sender: TObject);
var
  Data: JIntent;
  Uri: Jnet_Uri;
begin
  Data := TAndroidHelper.Activity.getIntent();
  if (Data.getAction().equals(TJIntent.JavaClass.ACTION_SEND) and (Data.getType().equals(StringToJString('*/*')))) then
  begin
    Uri := TJnet_Uri.Wrap(Data.getParcelableExtra(TJIntent.JavaClass.EXTRA_STREAM));
    Memo1.Lines.LoadFromFile(JStringToString(Uri.getPath()));
  end;
end;

代码解析

  • btnReceiveClick:此过程用于启动接收共享文件的操作,设置 Intent 的 Action 和 Type,并检查是否有应用程序可以处理该请求。
  • FormCreate:在应用程序创建时,获取应用程序的永久 URI 权限,以便在需要时访问共享文件。
  • FormShow:在应用程序显示时,检查是否有共享数据可用,并将其加载到 Memo1 组件中。

AndroidManifest.xml 配置

您需要在 AndroidManifest.xml 文件中添加以下代码,以便在应用程序启动时将您的应用程序注册为接收共享数据的目标:

<intent-filter>
  <action android:name="android.intent.action.SEND" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="*/*" />
</intent-filter>

权限设置

您还需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

总结

通过以上步骤,您就可以在您的 Delphi 11.3 Android 应用程序中成功接收来自其他应用程序的共享文件。此指南提供了一个全面的框架,帮助您理解和应用相关代码和配置,实现这一功能。

注意:

  • 请确保您已在您的 Delphi 项目中配置了 Android SDK 和相关组件。
  • 您可以根据您的具体需求修改代码,例如改变目标文件路径或使用其他组件来处理接收到的文件。
  • 为了保证应用程序的安全性,请注意处理文件时的权限管理,防止恶意程序的入侵。
Delphi 11.3 Android 10 共享文件接收:完整指南和代码示例

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

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