![]() |
Android: Datei öffnen mit Std. Anwendung
Hallo,
ich möchte in meiner Android App einen Videostream öffnen; unter Windows nehme ich dazu einfach ShellExecute. Ich verwende aktuell folgenden Code:
Code:
Das funktioniert auch fast perfekt, allerdings nicht auf einem HTC. Dort muss ich mittels Zurück-Taste das Video beenden und das beendet dann meine App. Es muss noch eine andere Art und Weise geben, bei der ich die Anwendung auswählen kann, dann kommt "Wählen Sie aus, mit was Sie das Video abspielen möchten". Kennt die jemand? Oder ev. einen anderen Weg, um den Default-Videoplayer aufzurufen?
function OpenVideo(const URL: string): Boolean;
var Intent: JIntent; begin try Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setDataAndType(StrToJURI(URL), StringToJString('video/mpg')); SharedActivity.startActivity(Intent); Result := true; except Result := false; end; end; {$ENDIF} |
AW: Android: Datei öffnen mit Std. Anwendung
Wir haben das bei uns so gelöst:
Delphi-Quellcode:
const
cFileUrlPrefix = 'file://'; function GetMimeType: JString; var jstr: JString; begin // MIME-Type auslesen result := StringToJString('application/pdf'); // Standard jstr := TJMimeTypeMap.JavaClass.getFileExtensionFromUrl(StringToJString(cFileUrlPrefix + FFilename)); if jstr <> nil then begin jstr := TJMimeTypeMap.JavaClass.getSingleton.getMimeTypeFromExtension(jstr); if jstr <> nil then result := jstr; end; end; procedure TShareButton.DoOpenAction; var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); Intent.setDataAndType(TJnet_Uri.JavaClass.parse(StringToJString(cFileUrlPrefix + FFileName)), GetMimeType); TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence('Bitte App auswählen...'))); end; |
AW: Android: Datei öffnen mit Std. Anwendung
Woher kommt "TJMimeTypeMap"?
|
AW: Android: Datei öffnen mit Std. Anwendung
Zitat:
Delphi-Quellcode:
Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Net,
Androidapi.JNI.Provider, Androidapi.JNI.Webkit, Androidapi.JNI.App, FMX.Helpers.Android |
AW: Android: Datei öffnen mit Std. Anwendung
Hey super, vielen Dank. Hier der Code für XE8:
Code:
Uses ... Androidapi.JNI.Webkit;
function GetMimeType(FFilename: String; IsLocalFile: Boolean): JString; {$IFDEF ANDROID} var jstr: JString; const _Default = 'video/mp4'; begin Try result := StringToJString(_Default); // Standard If IsLocalFile then jstr := TJMimeTypeMap.JavaClass.getFileExtensionFromUrl(StringToJString(cFileUrlPrefix + FFilename)) Else jstr := TJMimeTypeMap.JavaClass.getFileExtensionFromUrl(StringToJString(FFilename)); if jstr <> nil then begin jstr := TJMimeTypeMap.JavaClass.getSingleton.getMimeTypeFromExtension(jstr); if jstr <> nil then result := jstr; end; Except Result := StringToJString(_Default); End; end; {$ELSE} begin raise Exception.Create('Not supported!'); end; {$ENDIF} Function OpenVideo(const URL: string; IsLocalFile: Boolean): Boolean; {$IFDEF ANDROID} var Intent: JIntent; begin Try Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); If IsLocalFile then Intent.setDataAndType(TJnet_Uri.JavaClass.parse(StringToJString(cFileUrlPrefix + URL)), GetMimeType(URL,IsLocalFile) ) Else Intent.setDataAndType(TJnet_Uri.JavaClass.parse(StringToJString(URL)), GetMimeType(URL,IsLocalFile) ); SharedActivity.startActivity(TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence('Bitte App auswählen...'))); Result := true; Except Result := false; End; end; {$ELSE} begin raise Exception.Create('Not supported!'); end; {$ENDIF} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz