1

私はAndroidの新しいBです。私は次のコードでバッテリーのステータス/レベルを取得することができました:

private void BattStatus() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                batteryLevel = level;
                BattStatus.setText("Battery Level : " + batteryLevel + "%");

            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

バッテリーレベルをテキストファイルに保存したい(スレッドを使用)。コード:

public final Runnable DBThread = new Runnable() {
        String AllInfo = batteryLevel+"%"+" , "+new SimpleDateFormat("HH:mm , dd.MM.yy ").format(new Date());
        public void run() {
            try {
                Log.d("DBThread","Battery :"+batteryLevel);
                Log.d("DBThread","Updating DB");
                myDbHelper.CreateAndWriteFile(sdDir+"/", AllInfo );
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        mHandler.postAtTime(this, SystemClock.uptimeMillis() + 2000);
        Log.d("DBThread","Updated DB");
        Log.d("DBThread",AllInfo);

    }

残念ながら、バッテリーステータス/レベルはテキストファイルで0%を返します。スレッドでログ機能を使用してテストすると、正しい値が返されます。

誰かが私が間違っていることやしていないことを教えてくれて、開発に慣れていないのでコードスニペットを提供してくれませんか?そして私の投稿が正しくない場合は申し訳ありませんスタックオーバーフローの最初のタイマー: )。

どうもありがとうございます!

4

1 に答える 1

1

これはスレッドではありません。これはRunnableであり、スレッドで実行するように作成されたコードの一部です。

あなたの場合、それはハンドラースレッド、おそらくUIスレッドで実行されます。

おそらく、バッテリーステータスを受け取る前にスレッドを開始するため、デフォルト値(0)がファイルに書き込まれます。

そのためのスレッドは必要ありません。onReceiveメソッドを使用して、ブロードキャストを受信した直後にファイルに書き込むことができます。

編集

コードで機能しないことがいくつかあります。放送受信機の登録を解除したため、初回以降は電池残量を受信できません。

実際に変更されているかどうかを知らずにbatteryLevel値を書き込みます

変更があったことを知らずに2秒ごとに書き込みます。

BRの登録を解除しないことをお勧めします。そうすれば、すべてのバッテリーレベルの変更を受け取ることができます。次に、onReceiveで、ファイルに日付と新しい値を追加します。

于 2012-09-03T09:42:53.483 に答える