LiveWallpaperの作り方かたは方々で紹介されているが、
LiveWallpaperを自前のアプリから設定する方法がどこにもない。

壁紙を~アプリから設定できて~みたいな企画担当者は絶対に出てくる。
ということでどうにかして設定できないのかをしらべてみました。

自分なりに考えていたストーリーは以下の通りである。

やりたいこととしてはは自作壁紙の設定。
設定するためのAPIは公開されているか?
setWallpaperはビットマップしか対応していない。
他の話は聞いたこともないしsetLiveWallpaper的なものは見当たらない。

それならシステムアプリケーションのcom.android.wallpapeからは設定しているわけだから
要はLive壁紙の設定画面を呼び出せればそれでいい。

あれ、これいけんじゃね要はIntentにそれらしきActivity特定して叩けばいいわけじゃん。と思ったのですが。

まずはLive壁紙を設定しているアプリの特定から、
googleが公開しているandroidのソースコードを探ると
com.android.wallpaper.livepickerというパッケージがある。
こいつがLive壁紙を設定しているActivity本体。

こいつのMAIN指定されているActivityをキックしてあげればいいのでソースコードは以下の通りになる。

String clazz = "com.android.wallpaper.livepicker.LiveWallpaperListActivity";
Intent intent = new Intent(Intent.ACTION_MAIN);
int idx = clazz.lastIndexOf('.');
String pkg = clazz.substring(0, idx);
intent.setClassName(pkg, clazz);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);


これでライブ壁紙を選択するリストは出てくる。
しかもリストまでなら自作も可能。

問題は最終的にプレビューを表示して壁紙を設定しているLiveWallpaperPreview。。
こいつがimportしている下記のライブラリがどうも公開されていないらしく、SDKでは参照を解決できないらしい。
(NDK開発しているような偉い人なら分かるのかも)

import android.service.wallpaper.IWallpaperConnection;
import android.service.wallpaper.IWallpaperService;
import android.service.wallpaper.IWallpaperEngine;
import android.service.wallpaper.WallpaperSettingsActivity;
import android.content.ServiceConnection;


そもそもこのアクティビティをキックすればいいんだと思ったが、
このアクティビティは呼び出しかたがちょっと特殊で自分のスペックではどうにも解決不可能。。

ということでライブ壁紙設定アプリの呼び出しまではどうにでもなるが、
ライブ壁紙設定画面を直接呼ぶ方法または自力実装が難しいという結論に。


このあたり分かる人がいれば教えてほしいです。
AD