Howto – Daydream / Screensaver App erstellen

Ab Android 4.2 – Api Level 17 bietet Android die Möglichkeit mit Daydream einen Screensaver einzurichten. Daydream startet wenn das Gerät
am Netz hängt oder in einer Dockingstation steckt. Daydream kann man in den Systemeinstellungen unter Display -> Daydream aktivieren.
Ich beschreibe an dieser Stelle wie man einen einfachen DayDream Service implementiert der bei Aktivierung ein Video abspielt, damit alles schön übersichtlich bleibt.

Daydream wird als Service implementiert der von android.service.dreams.DreamService erbt, man hat den vollen Zugriff auf die UI, kann also Layouts, Canvas, 3d und Animationen nutzen.

Manifest

Im Manifest muß nur der Service deklariert werden. Falls ein Settingsmenü benötigt wird muß die Klasse im Meta gesetzt werden gesetzt werden.

<service
    android:name=".VideoDreamService"
    android:exported="true"
    android:label="@string/my_daydream_name" >
    <intent-filter>
        <action android:name="android.service.dreams.DreamService" />
 
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
 
    <meta-data
        android:name="android.service.dream"
        android:resource="@xml/dream_info" />
</service>

Layout

Zum einfacheren Testen benutze ich ein ganz normales Layout mit einer VideoView .

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" >
 
    <VideoView
        android:id="@+id/videoView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" />
 
</RelativeLayout>

Service

In meinem Beispiel wird ein Video ohne Ton in einer Endlosschleife abgespielt.

package de.schmitt.michael.daydream;
 
/******* imports ***********/
/** ...**/
 
public class VideoDreamService extends DreamService {
 
 
	public void onDreamingStarted() {
		super.onDreamingStarted();
 
		setContentView(R.layout.activity_main);
 
 
		VideoView vv = (VideoView)findViewById(R.id.videoView1);
		vv.setVideoURI(Uri.parse("android.resource://" + getPackageName() +"/"+R.raw.video));
 
		Log.i(TAG,  Environment.getExternalStorageDirectory().toString());
		Log.i(TAG,  getApplicationContext().getPackageName() );
		vv.setOnPreparedListener(new OnPreparedListener() {
		    @Override
		    public void onPrepared(MediaPlayer mp) {
		        mp.setLooping(true);
 
		    }
		});
 
		vv.setSoundEffectsEnabled(false);
 
		vv.start();
	}
	public void onDreamingStopped() {
		// Wird aufgerufen wenn der Service beendet wird. 
 
        }
 
}

Links

http://android-developers.blogspot.de/2012/12/daydream-interactive-screen-savers.html

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.