Delphi 11.3 Android 10 共享文件接收:完整指南和代码示例
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 和相关组件。
- 您可以根据您的具体需求修改代码,例如改变目标文件路径或使用其他组件来处理接收到的文件。
- 为了保证应用程序的安全性,请注意处理文件时的权限管理,防止恶意程序的入侵。
原文地址: https://www.cveoy.top/t/topic/n6z3 著作权归作者所有。请勿转载和采集!