实际上的代码就是这样几行:
procedure btnPdfClick(Sender: TObject);
var
fName : String;
{$IFDEF ANDROID}
Intent : JIntent;
URI : Jnet_Uri;
{$ENDIF}
begin
fName := TPath.GetSharedDownloadsPath + PathDelim + 'test.pdf';
{$IFDEF ANDROID}
URI := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + fName));
intent := TJIntent.Create;
intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
intent.setDataAndType(URI,StringToJString('application/pdf'));
SharedActivity.startActivity(intent);
{$ENDIF}
end;
有了这几行代码,任何安卓系统支持的文件,都可以打开。
这里对于文件的描述,是一个 URI,因此,理论上,是一个网络文件,比如 http://xxx.xxx.xx/abc.mp4 也是能打开的。
不过根据我的经验,如果你的手机安装了多个播放器,这时候系统会问你用哪个播放器。
最近要播放 MP4,再次把这段代码拿来测试了一下。发现在 Delphi 10.3.1 + Android 9.0 的情况下:
URI := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + fName)); 这一句搞出来的 URI 会导致异常。
网上查了一下:
https://en.delphipraxis.net/topic/1437-pdf-view-on-android/
LUri := TAndroidHelper.JFileToJURI(TJFile.JavaClass.init(StringToJString(AFileName)));
因此,如果要播放 MP4,代码就是这样:
Uri := TAndroidHelper.JFileToJURI(TJFile.JavaClass.init(StringToJString(AURI)));
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW);
intent.setDataAndType(uri, StringToJstring('video/mp4'));
Intent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
TAndroidHelper.Activity.startActivity(Intent); //pcplayer 2018-4-11