アンドロイドアプリサンプルソース バッテリー情報取得編 | ゲームアプリの攻略情報から人気のスマホサービス・アプリを特集して紹介 | スマホ情報は≪アンドロック≫

アンドロイドアプリサンプルソース バッテリー情報取得編

[最終更新日]:2011/10/25

イントロダクション

今回はAndRockで開発した『ゆるキャラ育成ゲーム的な「ガリレオ」』を例に、アンドロイドアプリの開発情報を紹介します。
どのようにバッテリー情報を取得して表示する文言や画像に反映しているかの解説を行いたいと思います。

ゆるキャラ育成ゲーム的な「ガリレオ」

『ガリレオ』の構成

バッテリー残量によってイラストと台詞が変更されるウィジェットです。
主な処理としては、起動したService内で以下の二点を行っています。

  • バッテリー情報の取得
  • ウィジェットの表示内容の更新

Serviceの起動

ACTION_BATTERY_CHANGEDアクションを追加することにより、バッテリー情報の変更を取得できるようになります。
情報の取得とそれに伴う処理はmBroadcastReceiverで行います。

public void onStart(Intent intent, int startId){
	super.onStart(intent, startId);
	//インテントフィルタの登録
	IntentFilter filter = new IntentFilter();
	//インテントフィルタへACTION_BATTERY_CHANGEDアクションを追加
	filter.addAction(Intent.ACTION_BATTERY_CHANGED);
	//ブロードキャストレシーバを登録する
	registerReceiver(mBroadcastReceiver, filter);
}
ACTION_BATTERY_CHANGEDの情報の取得

バッテリーの情報をintentで受け取ります。
levelは充電の残量、scaleは充電の最大値です。
getIntentExtraの引数を変えることにより、バッテリーの温度や電圧を取得することもできます。

//ブロードキャストレシーバの実装
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

	int scale = 100;
	int level = 0;

	@Override
	public void onReceive(Context context, Intent intent) {

		String action = intent.getAction();
		if(action.equals(Intent.ACTION_BATTERY_CHANGED)){
			level = intent.getIntExtra("level", 0);
			scale = intent.getIntExtra("scale", 0);
		}
		int restBattery = (int)(level * 100 / scale);
}
表示内容の変更

RemoteViewsにより、ウィジェットのview情報を取得できます。
今回は充電中とそうでないときでlayoutを変更しているため、remoteViewsに入る値について分岐があります。
ふきだしの画像はTextViewの背景として表示していますが、動的に変える方法が見つからなかったためです。
(標準のふきだしの色は黄色、充電中はオレンジにしています)

//表示する文字列とアイコンの変更
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(context, MainActivity.class);
RemoteViews remoteViews;

//画像と文言を指定する際に使う共通のキー
String key = KEY_EMPTY;

//充電中かどうかで表示するxmlとkeyが分岐
int status = intent.getIntExtra("status", 0);
if(status == BatteryManager.BATTERY_STATUS_CHARGING){
	remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_charging);
	key = KEY_CHARGING;
}
else if(status == BatteryManager.BATTERY_STATUS_FULL){
	remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_normal);
	key = KEY_FULLCHARGE;
}
else{
	remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_normal);
	if(restBattery >= 91){
		key = KEY_FULL;
	}
	else if(restBattery >= 51){
		key = KEY_NORMAL;
	}
	else if(restBattery >= 25){
		key = KEY_LOW;
	}
	else if(restBattery >= 0){
		key = KEY_EMPTY;
	}
}

上で充電の残量によって振り分けていたkeyは、表示する画像と台詞を指定するためのものです。
表示する画像と台詞の情報をそれぞれ予めHashMapに格納しておき、上記のkeyを用いて表示します。

//画像と文言をセット
Random random = new Random();
//各範囲ごとに登録している文言の数が異なるため
int randomKey = random.nextInt(msg.get(key).length);
remoteViews.setTextViewText(R.id.baloon, msg.get(key)[randomKey]);
remoteViews.setImageViewResource(R.id.img_galileo, image.get(key));

//クリックイベントが上書き消去されないように、updateAppWidgetの前に記述
Intent infoIntent = new Intent(context, Info.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, infoIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.img_galileo, pendingIntent);

//表示の更新
appWidgetManager.updateAppWidget(componentName, remoteViews);

苦労話

ソースのコメントでも触れていますが、デバッグ中、ガリレオ画像をタッチしても情報画面が開かなくなることがありました。
おそらく、バッテリー情報の変更に伴ってRemoteViews(ウィジェットの情報)を変更(=情報の上書き)するときに、タッチイベントがなくなってしまうためだろうと判断し、ウィジェットの表示を更新する際はクリックイベントも再度登録し直すことで改善されました。
また、Android実機を横回転させたときに縦のときとdipが異なることを知らず、終盤で慌てて表示の調整を行いました。横回転にすると、画面の縦幅が小さくなってしまう関係で、キャラクターとふきだしの大きさのバランスが悪くなったので、縦画面用のxmlと横画面用のxmlを分けて作りました。

裏話

バッテリー情報の取得処理に関する情報はネットにも本にも載っていて探しやすいため、骨格となる部分の処理の作成にはそれほど時間がかかりませんでした。
むしろ画像の表示といったデザイン部分に手間取ってしまいました。
また、「キャラクターにバッテリーを長持ちさせるコツを喋らせよう」という話になったはいいものの、意外と情報が少なくて苦労しました。充電を長持ちさせる方法は色々見かけるものの、バッテリーそのものの寿命を延ばす方法はかなり少なく驚きました。



あなたにオススメの記事

この記事を共有する

  • このエントリーをはてなブックマークに追加

スマホ情報のAndRockを共有する



follow us in feedly


アンドロイド携帯向けアプリの人気ランキングページです。ビジネスに、遊びに、とてもお役立ちのアンドロイドアプリが勢ぞろい。どのアプリも人気のある「10個」です。厳選されたラインナップ。もしかしたらあなたの携帯ライフを劇的に変えるアプリも現れるかもしれません!日々変わるこのアプリのランキング動向を、ぜひチェックしてください。




人気・定番のアンドロイドアプリレビュー

Simeji(日本語文字入力&顔文字キーボード)

Simeji(日本語文字入力&顔文字キーボード)

「フリック入力」、「ケータイ方式」等さまざまな日本式の入力方式をサポート

実況パワフルプロ野球

実況パワフルプロ野球

サクセスが遊べるパワプロアプリ遂に登場

『AbemaTV』ニュースも音楽もバラエティーもプロレスも無料で見放題!

『AbemaTV』ニュースも音楽もバラエティーもプロレスも無料で見放題!

サイバーとテレ朝が共同設立した動画チャンネル!




スマートフォン、アンドロイド、アプリの使い方を解説

LINE アプリの使い方 完全マニュアル(Android,iPhone)

6000万ダウンロードを突破した無料通話・チャットが使える神アプリLINEの使い方のまとめ


Viberの使い方、設定まとめ (Android , iPhone)

無料通話のできるViberの使い方から、初期設定、日本語化などなどのまとめ


Skypeの使い方、設定(Android , iPhone)

無料通話・無料チャットの定番Skypeの使い方まとめ


無料・おトク電話アプリ「050 plus」のまとめ

スマートフォンで月額を抑えたい人におススメのアプリ!「050 plus」の使い方を解説




ドラゴンボールZドッカンバトル攻略情報
ONE PIECE トレジャークルーズ攻略情報
LINE アプリの使い方 完全マニュアル(Android,iPhone)
インスタグラム完全使い方ガイド
iPhone説明書
LINEで絶対使いたいLINEスタンプ検索

アプリ人気ランキング

Androidアプリ
iPhone/iOSアプリ

1
Coke ON (コークオン) Coke ON (コークオン)

自販機で買ってスタンプを溜めよう!

3
ラクサス(ブランドバッグ◆レンタルし放題◆) ラクサス(ブランドバッグ◆レンタルし放題◆)

憧れだった高級人気バッグがあなたのものに

4
ワンダーオラクル ワンダーオラクル

戦姫を蘇らせて戦うRTS

5
中古車カーセンサーnet 中古車カーセンサーnet

豊富な絞り込み条件で簡単中古車検索


▼アンドロイドアプリのランキング

新着スマホ情報


▼アプリ・記事の新着一覧へ

LINEで使えるオススメのスタンプアプリ まとめ20選

スマホアプリ カテゴリ一覧

スマートフォンサイト
QR-code AndRock(アンドロック)は、スマートフォンでもご利用いただけます。 QRコードスキャナーで読み取ってご利用ください。
Follow Us