ただのプログラマの日記

何かしたいプログラマの奮闘日記。androidアプリ、iphoneアプリ、その他プログラムのこととか書いていきたいと思います。

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"/>

 

今日は遅くなったので、続きはまた今度書きます。。。

 

作成するときに使用した本