2017-11-03 20 views
0

バッテリーの電流と電圧を5秒間隔で取得したい。一定間隔でバッテリ電流を取得する方法は?

私のソースでは、電圧と電流がランダムな間隔で変化します。私はBroadcastReceiverを聞いたように、5秒、10秒、9秒、.......

として

は10秒以内に、戻り値が必要です。

私はこれが原因だと思いますが、私はこの問題をどのように解決するか考えていません。

package com.example.hubertlee.batterywearrate; 

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

public class MainActivity extends AppCompatActivity { 
    private TextView batteryInfo; 
    Long avgCurrent = null, currentNow = null; 
    int count = 0; 
    float power = 0; 

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

    BatteryManager mBatteryManager = (BatteryManager) getSystemService(Context.BATTERY_SERVICE); 
    batteryInfo = (TextView) findViewById(R.id.textViewBatteryInfo); 
    this.registerReceiver(this.batteryinfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     avgCurrent = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE); 
     currentNow = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW); 
    } 

} 



private BroadcastReceiver batteryinfoReceiver = new BroadcastReceiver(){ 
    public void onReceive(Context context, Intent intent){ 

     int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0); 
     int icon_small = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0); 
     int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
     int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); 
     boolean present = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); 
     int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0); 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0); 
     String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); 
     float temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0); 
     float voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0); 
     batteryInfo.setText("Health: " + health + "\n" + "Icon small : "+icon_small+"\n" + 
       "Level : "+level+"\n"+"Present : "+present+"\n"+"Scale: "+ 
       scale+"\n"+"Status :"+status+"\n"+ "Technology:"+technology+"\n"+ 
       "Temperature :"+temp/10+"'C\n"+"Voltage:"+voltage/1000+"V\n"+"BATTERY_PROPERTY_CURRENT_AVERAGE = " 
       + avgCurrent + "mAh"+"\n"+"BATTERY_PROPERTY_CURRENT_NOW = " + currentNow + "mAh"+"\n"+"count ="+count); 
     count++; 




    } 
    }; 
} 
+0

* BroadcastReceiverはどこから10秒以内に戻り値が必要だと聞きましたか? (あなたが何かを誤解しているように思える - 私はそれが 'onReceive'のインプリケーションのためのものだったと思う。) "BATTERY CHANGED"のときに送信されます...変更がなければ何かを送る必要はありません - それは資源の無駄です – Selvin

+0

あなたの返事をありがとう。それでは、どうやってインターバルで電流を得ることができますか?方法はありませんか?私は一定の間隔が必要です。 –

答えて

0

フィックス間隔でコードの実行を持つようにしたい場合は、アラームマネージャを見てみましょうは: https://developer.android.com/reference/android/app/AlarmManager.html

Selvinが、それは変更する場合にのみ放送が呼ばれ、言ったように。

+0

お返事ありがとうございます。私は小さな質問があります。私は電話の電圧と電流が常に変化していると思います。電話は不規則に電気を使用しているからです。それで、なぜ私に電流と電圧を約10秒で1回送るのですか?毎秒、毎秒、毎秒、毎秒毎に変化します。 –

+0

システムがブロードキャストメッセージを頻繁に送信することができないためです:システムができるときにブロードキャストメッセージが配信されます。ブロードキャストメッセージは優先度が低い。これは遅延を説明することができます。 – Lionel

+0

ああ。わかった。どうもありがとうございます。私は画面をONにしたいのでHandlerを使うことに決めました。ブロードキャストなしでBatteryManagerを使用する方法を知っていますか? https://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGEDバッテリーのプロパティを取得するためにブロードキャストを使用していると思います。 –