2017-11-03 2 views
0

Ich möchte Batterie Strom und Spannung in einem Intervall von 5 Sekunden bekommen.Wie wird der Batteriestrom in einem bestimmten Intervall abgerufen?

Aber in meiner Quelle ändert sich die Spannung und Strom in einem zufälligen Intervall.

wie 5 Sekunden, 10 Sekunden, 9 Sekunden .......

I BroadcastReceiver gehört, erfordert einen Rückgabewert innerhalb von 10 Sekunden.

Ich denke, das ist eine Ursache, aber ich habe keine Ahnung, wie dieses Problem zu lösen ist.

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

* Ich habe gehört BroadcastReceiver benötigt einen Rückgabewert innerhalb von 10 Sekunden * von wo? (Scheint so, als hättest du etwas falsch verstanden - ich wette, es war etwas über die Implementation von 'onReceive' sollte in kürzester Zeit zurückkehren) * Ich vermute, das ist eine Ursache * nein, es ist nicht ... action ist" ACTION_BATTERY_CHANGED "... also Es wird gesendet, wenn "BATTERY CHANGED" ... es gibt keine Notwendigkeit, etwas zu senden, wenn es keine Änderungen gab - es verschwendet Ressourcen – Selvin

+0

Vielen Dank für Ihre Antwort. Wie kann ich dann im Intervall Strom bekommen? Gibt es keinen Weg? Ich brauche ein festes Intervall. –

Antwort

0

Wenn Sie einen Code haben, um fix Intervall laufen, einen Blick auf Alarm-Manager nehmen: https://developer.android.com/reference/android/app/AlarmManager.html

Wie Selvin sagte, wird die Sendung nur aufgerufen, wenn es ändern.

+0

Danke für die Antwort. Ich habe eine kleine Frage. Ich denke, die Spannung und der Strom eines Telefons ändern sich ständig. Weil das Telefon unregelmäßig Strom verbraucht. Warum sendet es mir dann in fast 10 Sekunden einmal Strom und Spannung? Sie ändern sich jede Sekunde, jede Mikrosekunde, jede Nanosekunde ... –

+0

Das liegt daran, dass das System Broadcast-Nachrichten oft nicht senden kann: Eine Broadcast-Nachricht wird gesendet, wenn das System es kann. Mittel Broadcast-Nachrichten haben eine niedrige Priorität. Dies kann die Verzögerung erklären. – Lionel

+0

Ahh. Ich verstehe es. Ich danke dir sehr. Ich habe mich entschieden, Handler zu benutzen, weil ich einen Bildschirm ON möchte. Wissen Sie, wie man BatteryManager ohne Broadcast benutzt? https://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED Ich denke, es verwendet Broadcast, um Batterieeigenschaften zu erhalten ..? –

Verwandte Themen