Quantcast
Channel: Android*
Viewing all articles
Browse latest Browse all 531

Videowiedergabe mit Android-Mediaplayer

$
0
0

Ein wesentlicher Aspekt bei der Entwicklung von Android*-Anwendungen besteht darin, dass Anwendungen mithilfe einfacher Möglichkeiten die von anderen Anwendungen bereitgestellten Funktionen bequem aufrufen können.  Aufgrund der Tatsache, dass sich Funktionen von mehreren Anwendungen teilen lassen, lässt sich die bis zur Marktreife benötigte Entwicklungszeit verkürzen.

Sehen wir hierzu ein Beispiel an: Meine Restaurant-App soll ein Video abspielen, in dem das Tagesgericht präsentiert wird. Anstatt einen vollwertigen Videoplayer zu programmieren, rufe ich einfach eine bereits auf dem Gerät installierte Medienanwendung auf, die das Video abspielen soll. Die folgenden Screenshots zeigen den Ablauf des beschriebenen Szenarios: Der Benutzer verwendet die entsprechende Schaltfläche, um das Tagesgericht anzuschauen. Anschließend wird ein Dialog eingeblendet, in dem eine bereits auf dem Gerät installierte und für die Wiedergabe von Videos geeignete Medienanwendung ausgewählt werden kann. Sobald sich der Benutzer für eine Anwendung entschieden hat, wird die Wiedergabe des Videos gestartet.

Figure 1 Playing Video with another Media Application

Abbildung 1: Ein Video mit einer anderen Medienanwendung abspielen

Das Android-Intent-System

Die Möglichkeit, dass Anwendungen Funktionen gemeinsam nutzen, wird unter Android über den Intent-Mechanismus abgewickelt. Jede Android-Anwendung enthält eines oder mehrere Fenster, die intern als Android-Aktivitäten dargestellt werden. Eine Anwendung deklariert die von ihr unterstützen Android-Aktivitäten (UI-Fenster) in der Manifest-Datei. Wenn eine Aktivität (Fenster) für eine andere Anwendung verfügbar ist (im Fall einer Videowiedergabeanwendung zum Beispiel ein Videowiedergabefenster), wird in der Android-Manifest-Datei ein Intent-Filter für die Aktivität definiert.

Die im Intent-Filter festgelegten Mindestspezifikationen umfassen die Kategorien, die Aktionen und die Datentypen, die für den Aufruf durch andere Anwendungen unterstützt werden. Anhand dieser Informationen ermittelt das Android-System, welche Aktivität bzw. welches Fenster gestartet werden soll, wenn von einer Anwendung ein Aufruf erfolgt. Wenn eine Anwendung eine Funktion verwenden möchte, die von einer anderen Anwendung bereitgestellt wird, erstellt die aufrufende Anwendung einen Intent mit der Aktion und dem im Intent-Filter der aufgerufenen Anwendung festgelegten Datentyp. Der Intent wird anschließend an das Android-System übergeben. Sollten die Aktion und die Daten einem der im System registrierten Intent-Filter entsprechen, startet das System die Anwendung. Der Vorgang, eine Aktivität mit einem passenden Intent-Filter zu ermitteln, wird als „Intent-Resolution“ bezeichnet.

Das folgende Beispiel verwendet Aktivitäts- und Intent-Filter-Deklarationen aus der Gallery-App von Stock-Android. Die Aktivität, welche die Videowiedergabefunktion bereitstellt, ist „MovieActivity“. Die „MovieActivity“ definiert drei Intent-Filter:

  • Alle drei Intent-Filter unterstützen die „VIEW“-Intent-Aktion. Wir werden uns später anschauen, wie sich die VIEW-Aktion für den Aufruf der Anwendung einsetzen lässt.
  • Alle drei Intent-Filter unterstützen die Kategorien „DEFAULT“ und „BROWSABLE“. „DEFAULT“ wird benötigt, damit sich die Aktivität von anderen Anwendungen aufrufen lässt. „BROWSABLE“ wird nur dann benötigt, wenn die Aktivität von einem Browser aufrufbar sein soll.
  • Jeder Intent-Filter definiert zudem das URI-Schema und die von ihm unterstützten Datentypen. Beispiel: Der erste Filter unterstützt „rtsp“ (real time streaming scheme) und der zweite Filter unterstützt verschiedene Medienformate (MIME) unterschiedlicher URI-Schemata (http, https, content, file).
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/movie_view_label" android:name="com.android.gallery3d.app.MovieActivity"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/><data android:scheme="rtsp"/></intent-filter><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/><data android:scheme="http"/><data android:scheme="https"/><data android:scheme="content"/><data android:scheme="file"/><data android:mimeType="video/mpeg4"/><data android:mimeType="video/mp4"/><data android:mimeType="video/3gp"/><data android:mimeType="video/3gpp"/><data android:mimeType="video/3gpp2"/><data android:mimeType="video/webm"/><data android:mimeType="video/avi"/><data android:mimeType="application/sdp"/></intent-filter><intent-filter> !-- HTTP live support -->;<action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/><data android:scheme="http"/><data android:scheme="https"/><data android:mimeType="audio/x-mpegurl"/><data android:mimeType="audio/mpegurl"/><data android:mimeType="application/vnd.apple.mpegurl"/><data android:mimeType="application/x-mpegurl"/></intent-filter></activity>

Beispielcode für die Videowiedergabe mit einer Android-Medienanwendung

Das folgende Beispiel zeigt, wie eine Android-Medienanwendung von einer Anwendung mit Intent, der erforderlichen Aktion und den Datentypen aufgerufen wird. Die aufrufende Anwendung erstellt einen Intent mit der Aktion ACTION_VIEW, legt die Daten mit dem URI (file://) und MIME-Typ (video/mp4) der Videodatei fest und ruft „startActivity“ mit dem erstellten Intent auf, um die Videowiedergabe zu starten. Bitte beachten Sie, dass der Beispielcode die Videodatei aus dem lokalen Datenspeicher ausliest.

/**
* This method is called when the user clicks the button to play the toady's
* special video
*/
public void playVideo(View view) {
    File videoFile = new File (
        videoPath+"/today_special.mp4");
    if (videoFile.exists()) {
        Uri fileUri = Uri.fromFile(videoFile);
	  Intent intent = new Intent();
	  intent.setAction(Intent.ACTION_VIEW);
	  intent.setDataAndType(fileUri,
            URLConnection.guessContentTypeFromName(fileUri.toString()));
	  startActivity(intent);
    } else {
        Toast.makeText(this, "Video file does not exist",
            Toast.LENGTH_LONG).show();
    }
}

Das Android-System wird standardmäßig einen Dialog (Intent Chooser) anzeigen, wenn mehr als eine für den Intent-Filter geeignete Aktivität gefunden wurde (siehe Abbildung 1). So haben Benutzer die Möglichkeit, einen bevorzugten Videoplayer auszuwählen. In diesem Dialog können Benutzer zudem für den bevorzugten Videoplayer durch Anklicken von „Always“ festlegen, dass dieser von nun an immer verwendet und der Dialog in Zukunft nicht mehr angezeigt werden soll.

Über die Autorin

Die Softwaretechnikerin Mei-Lin Hsieh (Autorin des englischen Originals) hat 15 Jahre Erfahrung in der Entwicklung von Mobilanwendungen bei Intel und anderen Firmen. Sie arbeitet zurzeit in der Software Solutions Group an Projekten zur Unterstützung von Android-Anwendungen auf Tablets und Smartphones.

Hinweise

DIE INFORMATIONEN IN DIESEM DOKUMENT WERDEN IN ZUSAMMENHANG MIT INTEL® PRODUKTEN BEREITGESTELLT. DURCH DIESES DOKUMENT WERDEN WEDER AUSDRÜCKLICH NOCH KONKLUDENT ODER AUF ANDERE WEISE IRGENDWELCHE RECHTE AN GEISTIGEM EIGENTUM GEWÄHRT. MIT AUSNAHME DER FÜR DEN VERKAUF DIESER PRODUKTE IN DEN GESCHÄFTSBEDINGUNGEN VON INTEL DARGELEGTEN ANGABEN ÜBERNIMMT INTEL KEINE HAFTUNG. INTEL SCHLIESST IM ZUSAMMENHANG MIT DEM VERKAUF UND/ODER DER VERWENDUNG VON INTEL® PRODUKTEN JEDE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE HAFTUNG ODER GARANTIE AUS, EINSCHLIESSLICH DER HAFTUNG BZW. GARANTIE IN BEZUG AUF DIE EIGNUNG FÜR EINEN BESTIMMTEN ZWECK, DIE HANDELSÜBLICHKEIT ODER DIE VERLETZUNG VON PATENTEN, URHEBERRECHTEN ODER ANDEREN RECHTEN AUF GEISTIGES EIGENTUM. 
SOFERN NICHT ANDERWEITIG VON INTEL SCHRIFTLICH BESTÄTIGT, SIND DIE INTEL PRODUKTE NICHT FÜR ANWENDUNGEN KONZIPIERT ODER VORGESEHEN, BEI DENEN SITUATIONEN MIT MÖGLICHEN KÖRPERVERLETZUNGEN ODER VERLETZUNGEN MIT TODESFOLGE AUFTRETEN KÖNNTEN.

Intel behält sich das Recht vor, Spezifikationen und Produktbeschreibungen jederzeit ohne vorherige Ankündigung zu ändern. Entwickler dürfen nicht vom Vorhandensein oder Nichtvorhandensein bestimmter Funktionsmerkmale oder Produkteigenschaften, die als „reserved“ oder als „undefined“ gekennzeichnet sind, ausgehen. Intel behält sich eine künftige Definition derselben vor und lehnt jegliche Haftung hinsichtlich Inkompatibilität bzw. anderer Konflikte, die sich aus künftigen Änderungen dieser Merkmale ergeben, ab. Die hier angegebene Information kann sich jederzeit ohne besondere Mitteilung ändern. Nutzen Sie diese Angaben nicht für die Fertigstellung von Designs. 

Die in diesem Dokument beschriebenen Produkte können konstruktionsbedingte Defekte oder Fehler (Errata) enthalten, die zu Abweichungen der Produkteigenschaften von den angegebenen Spezifikationen führen. Eine Liste derzeit bekannter Errata ist auf Anfrage erhältlich. 

Wenden Sie sich an Ihr zuständiges Vertriebsbüro von Intel oder an Ihren Distributor, um die neuesten Spezifikationen zu erhalten, bevor Sie Produkte bestellen. 
Dokumente, die eine Bestellnummer haben, auf die in diesem Dokument verwiesen wird, sowie andere Literatur von Intel erhalten Sie im Internet unter: http://www.intel.com/design/literature.htm 

In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests wie SYSmark* und MobileMark* werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen.

       **Diese Quellcode-Beispiele werden unter dem Intel Lizenzvertrag für Quellcode-Beispiele veröffentlicht.

 

Icon Image: 

  • Developers
  • Android*

  • Viewing all articles
    Browse latest Browse all 531


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>