NASAのAPODの画像をAndroidスマホで定期更新で壁紙に

NASAのサイトにAstronomy Picture of the Dayというのがあり、

日替わりで素敵な画像を載せてくれている。

http://apod.nasa.gov/apod/astropix.html

これをスマホの壁紙に定期的に取得・設定するアプリを自分用に作ったのでメモ。

 

f:id:kurihara-n:20131024211647j:plain

 

Androidの機能の勉強にもなったのでメモ。

要点は3つで、

1. 壁紙の設定

WallpaperManagerを使う。

wallman = WallpaperManager.getInstance(this);   

 

URL url = new URL(urlString);

InputStream istream = url.openStream();

wallman.setStream(istream);

istream.close();

 という感じでURLからInputStreamをつくり、それで設定できる。

 

2.画像のURLの取得

トップページのURLは分かっているので、そこのHTMLソースからjpg(jpeg)へのリンクを探す。

URL url = new URL("http://apod.nasa.gov/apod/astropix.html");

http = (HttpURLConnection) url.openConnection();

http.setRequestMethod("GET");

http.connect();

in = http.getInputStream(); 

 でInputStreamでHTMLソースが取得出来るので、その中のダブルクォートを手がかりにjpgを探す。

連結して画像URL生成。

 

 

3.Serviceで定期更新

Serviceクラスを作り、定期的に処理が行われるようにする。

マニフェストにserviceを追加で書き、メインアクティビティでインテント生成しstartService();

新規に作ったServiceを継承したクラスで、

onStartCommandの中でTimerTaskで更新処理を行う。

サービスが強制終了された場合にはサービスの再起動をしてほしいので、

onStartCommandの返り値はSTART_REDELIVER_INTENTに。

 

Serviceの使いかたが分かったのでためになった。

起動したServiceは実行中のアプリケーションの画面で確認できた。

配信するようなアプリにするなら、更新の停止等の設定を出来るようにしておく必要はあるかな。

 

参考:

Android sdk2.0のAPIを使用して壁紙を変更してみる

http://labs.techfirm.co.jp/android/iguchi/179

Android4.0で画像をURLから取得して表示してみる

http://devslog.com/article/20111206191039.html

Androidのバックグラウンド処理に使うServiceのまとめメモ

http://d.hatena.ne.jp/ria10/20121110/1352529426