1

尋ねるバッテリレベルはnullを取得します。私は正常にレベルを取得しています。しかし、私には1つの問題があります。そして、それは私が最初にバッテリーレベルを取得しようとするとですヌルを取得します。 しかし、私が数秒後に尋ねると、正確なレベルが得られます。なぜこれが起こっているのか分かりません。ここでアンドロイド - 最初の時間は私がサービスからバッテリレベルを取得しようとしています

は、バッテリーの残量を取得するための私のコードです: -

String bLevel; 
private String getBatteryLevel(){ 
     BroadcastReceiver cBReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       context.unregisterReceiver(this); 
       int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
       int currentScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
       int batteryLevel; 
       if (currentLevel >= 0 && currentScale > 0) { 
        batteryLevel = (currentLevel * 100)/currentScale; 
        bLevel = Integer.toString(batteryLevel) + " percent"; 
       } 
      } 
     }; 
     IntentFilter cIFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(cBReceiver, cIFilter); 
     return bLevel; 
    } 

コードを参照してください。私はなぜ私が得るのかわからないnull私は初めて質問するときに私のバッテリーレベルです。助けてください

+1

BroadcastReceiverをメソッドにパックしないことをお勧めします。 – Distjubo

+0

または少なくとも登録を解除する... – Distjubo

答えて

0

限り私は読むことができます。あなたが値

String bLevel; 
// stuffs ... stuffs ... stuffs... 
return bLevel; 

を直線的にあなたのコードを実行している、非初期化を戻ってきているこの文字列がnullである、そして、あなたは受信機を登録しています。そのイベントがブロードキャストされると、変数が変更され、正しい情報が表示されます。

これはオブジェクト指向のパラダイムを破ります。

+0

申し訳ありませんが、私はあなたが何を言おうとしているのか理解していません。ここでは、** bLevel **はグローバル変数であり、ここでそれを内部変数にする必要がありますか? –

+0

いいえ。オブジェクト指向システムで、「手続き型」なプログラムを作っています。あなたはパラダイムを壊しています.....このように考えると、コード実行に1つの 'Pointer 'があります。それはコードリスト全体を実行し、1で1を実行する...あなたはバッテリーレベルに関連するNEXTイベントを受信するためにあなたのブロードキャストを登録します...それは10秒後に起こると言うことができます。秒が経過するまで変数? 「ヌル」。 – Bonatti

+0

私は今何をすべきですか? –

関連する問題