SQLの窓

2017年05月26日


Android Studio : BroadcastReceiver を Anonymous Inner Class で使用し、バッテリーの状態をエミュレータで簡単にテスト

▼ log.i の出力
I/lightbox: android.intent.action.BATTERY_CHANGED
I/lightbox: level : 10 ( / 100 )
I/lightbox: GOOD
I/lightbox: android.intent.action.BATTERY_CHANGED
I/lightbox: level : 50 ( / 100 )
I/lightbox: GOOD
I/lightbox: android.intent.action.BATTERY_CHANGED
I/lightbox: level : 100 ( / 100 )
I/lightbox: GOOD
内部クラスや、サブクラスで実装してもいいですが、内容としてはあまりしょっちゅう行うものでも無いし、テストとしては、telnet で adb に power capacity するほうが重要なのでこのような感じになりました。 BroadcastReceiver に代入する処理は、通常のイベント作成と同じく、new の後で CTRL+SPACE で候補を表示させて、BroadcastReceiver を選択すれば自動的に public void onReceive が作成されるので、その中に処理を記述するたけです。
package com.example.lightbox.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private BroadcastReceiver broadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("lightbox", "onResume");

        broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                String action = intent.getAction();
                Log.i("lightbox", action);

                int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
                Log.i("lightbox", String.format("level : %d ( / %d )",level,scale));
                int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,-1);
                switch( health ) {
                    case BatteryManager.BATTERY_HEALTH_COLD:
                        Log.i("lightbox", "COLD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_DEAD:
                        Log.i("lightbox", "DEAD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_GOOD:
                        Log.i("lightbox", "GOOD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                        Log.i("lightbox", "OVER_VOLTAGE");
                        break;
                    case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                        Log.i("lightbox", "OVERHEAT");
                        break;

                }

            }
        };

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(MainActivity.this.getIntent().ACTION_BATTERY_CHANGED);
        // レシーバーを登録
        MainActivity.this.registerReceiver(broadcastReceiver,intentFilter);

    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("lightbox", "onPause");

        MainActivity.this.unregisterReceiver(broadcastReceiver);
    }
}

実際には switch 部分すら必要ありませんが、Android のドキュメントを覘くためのヒントとして使っています。

1) BatteryManager
2) BatteryManager.EXTRA_LEVEL

adb.exe がある場所

Android Studio で実行して、エミュレータ上で実行されたら、タスクマネージャでプロセスを表示してから、イメージ名をクリックしてソートすると、adb.exe がほぼ一番上に表示されるので、右クリックから『ファイルの場所を開く』を選択すると、でエクスプローラで開く事ができます



さらに、エクスプローラでそのフォルダを選択して SHIFT キーを押しながら右クリックして、『コマンドウインドウをここで開く』を選択します。

telnet を使えるように

既に使用している場合は必要無いですが、昨今めったに使う事が無いので Windows で使用できないようになっています。『プログラムと機能』の左サイドにある『Windows の機能の有効化または無効化』で開いたツリーで telnet を有効にします



コマンドプロンプトより adb にアクセス

まず、adb devices をコマンドプロンプトで実行して、現在のエミュレータの id を確認します。
List of devices attached
emulator-5554   device
次に、telnet localhost 5554 を実行して、telnet で adb にアクセスします。
Android Console: Authentication required
Android Console: type 'auth ' to authenticate
Android Console: you can find your  in
'C:\Users\lightbox\.emulator_console_auth_token'
ここで、まず auth コマンドでトークンを入力する必要があります。表示された場所にある、.emulator_console_auth_token をテキストエディタで開いてトークンを取得し、auth コマンドで実行します。
auth トークン文字列
Android Console: type 'help' for a list of commands
OK
これでコマンドが使えるようになるので、help と入力して確認します
help
Android console command help:

    help|h|?         print a list of commands
    event            simulate hardware events
    geo              Geo-location commands
    gsm              GSM related commands
    cdma             CDMA related commands
    crash            crash the emulator instance
    kill             kill the emulator instance
    network          manage network settings
    power            power related commands
    quit|exit        quit control session
    redir            manage port redirections
    sms              SMS related commands
    avd              control virtual device execution
    qemu             QEMU-specific commands
    sensor           manage emulator sensors
    finger           manage emulator finger print
    debug            control the emulator debug output tags
    rotate           rotate the screen clockwise by 90 degrees

try 'help ' for command-specific help
使用するのは、power コマンドです。
power
allows to change battery and AC power status

available sub-commands:
    display          display battery and charger state
    ac               set AC charging state
    status           set battery status
    present          set battery present state
    health           set battery health state
    capacity         set battery capacity state
power capacity 10 のようにして、バッテリーの量を変更するコマンドをクリップボードにコピーしておいて、貼り付けて実行してみて下さい。エミュレータの右上のバッテリーアイコンの量の表示が変わります。 すると、LogCat にも表示されるはずです
【2017 Android Studioの最新記事】
posted by lightbox at 2017-05-26 21:58 | 2017 Android Studio | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり