Androidで作るライブ壁紙(Live Wallpaper)
Androidで作るライブ壁紙(Live Wallpaper)
Android2.1よりライブ壁紙(Live Wallpaper)機能が追加されました。
ライブ壁紙機能とは、壁紙の自動更新機能付き版といったところでしょうか。
一定時間毎に更新し、表示を変化させることができます。
これにより、以下のようなことができます。
・写真を自動的に切り替え、スライドショー
・RSSより情報を取得し、最新ニュースを表示
・タッチに反応して動く壁紙
etc...
このように、壁紙が動くことにより、様々な可能性が広がります。
このライブ壁紙を使用し、今回作成するのは以下のようなアプリです。
・設定間隔毎にインターネットにアクセスし、画像を表示
・間隔は設定画面にて1分、5分、10分、30分、60分から選択できる
・更新はスクリーンがONの時のみ行う
・インターネットにつながっていない場合には更新を行わない
ちょっと感の良い方は気づいたかもしれませんが、
美人時計のようなものを作ろうという魂胆です。
今回は時計を持っているのが美人ではなく、
子供というだけになります。
かなりの親バカです。。。お恥ずかしい。
なので、今回作成するアプリはMarketの申請などは行わず、
自分のandroid端末にインストールして使えれば、
それでOKというものになります。
開発環境は以下のようなものを前提として説明してきます。
Mac OS X 10.7.2
eclipse Indigo
まずプロジェクトを作成します。
今回作る場合のアプリとしては、下記のような情報でアプリを作成していきます。
-------------------------------------------------------------------------------------------------------------------------
■project name
RikuWallpaper
■BuildTarget
2.1
■Application Name
rikuwallpaper
■Package Name
com.rmasco.wallpaper.riku
■Create Activity
チェックを外す
※今回はActivityを使用しないので、作成しない
-------------------------------------------------------------------------------------------------------------------------
では、実際のソースコードを見て行きましょう。
まずはアプリケーション設定ファイル(AndroidManifest.xml)から変更していきます。
-------------------------------------------------------------------------------------------------------------------------
<?xmlversion="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rmasco.wallpaper.riku"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7"/>
<uses-feature android:name="android.software.live_wallpaper"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="@string/app_name"android:icon="@drawable/icon">
<service android:name=".rikuwallpaper"
android:label="@+string/app_name"
android:permission="android.permission.BIND_WALLPAPER">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService"/>
</intent-filter>
<meta-data android:name="android.service.wallpaper"android:resource="@xml/wallpaper"/>
</service>
</application>
</manifest>
-------------------------------------------------------------------------------------------------------------------------
普通のアプリを作成する時との差分は赤字のところになります。
まず下記1行にてライブ壁紙を使用できるよう設定します。
<uses-feature android:name="android.software.live_wallpaper"/>
androidではすべてのデバイスで安全にサポートできない機能をuses-featureとして宣言することで、
サポートしていないデバイスにインストール出来ない仕組みを持っています。
書かなくても作成できますが、ここでは記述してあります。
また、今回画像はインターネットから取得するため、
インターネット接続の許可を要求します。
<uses-permission android:name="android.permission.INTERNET"/>
次に<service>です。
通常のアプリと異なり、ライブ壁紙はサービスとして起動するため、
サービスの設定が必要となります。
<service android:name=".rikuwallpaper"
サービスを起動するクラス名
android:label="@+string/app_name"
サービス名称
android:permission="android.permission.BIND_WALLPAPER">
壁紙を作成するのに必要な権限を割り当てる
次に<intent-filter>ですが、ここがあまりよくわかっていません。
サービスが応答できるインテントのタイプを特定します(?)
あんまりよくわかっていないが、どのイベントから画面を呼び出すかという設定っぽい。
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService"/>
</intent-filter>
meta-dataで壁紙の設定ファイルを指定します
<meta-data android:name="android.service.wallpaper"android:resource="@xml/wallpaper"/>
今日は遅くなったので、続きはまた今度書きます。。。
作成するときに使用した本