2015-10-22 33 views
0

我想制作一个应用程序,它会显示我的一个项目的电池状态和电池信息。我想在应用程序中显示电源的瞬时电流和来源,但是我一直未能成功运行,我没有得到当前的信息和来源信息,只能保持在2和交流电源插座。如果你能帮助我的代码,我将不胜感激。由于如何获取“BATTERY_PROPERTY_CURRENT_NOW”以便使用?

import android.annotation.SuppressLint; 

//import com.batterystatus.namespace.R; 

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.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity { 
private TextView level,voltage, status1,temp,health1,tech,sour,amp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     level=(TextView)findViewById(R.id.level); 
     voltage=(TextView)findViewById(R.id.volt); 
     status1=(TextView)findViewById(R.id.stat); 
     temp=(TextView)findViewById(R.id.temp); 
     health1=(TextView)findViewById(R.id.healt); 
     tech=(TextView)findViewById(R.id.tech); 
     sour=(TextView)findViewById(R.id.source); 
     Button b = (Button) findViewById(R.id.ex); 
     amp=(TextView)findViewById(R.id.current); 
     b.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v) { 
        // TODO Auto-generated method stub 
        finish(); 
        System.exit(0);} 
     }); 



     this.registerReceiver(this.myBatteryReceiver, 
       new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 


    } 

    private BroadcastReceiver myBatteryReceiver 
     = new BroadcastReceiver(){ 

    @SuppressLint("InlinedApi") 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     // TODO Auto-generated method stub 

     if (arg1.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){ 

      int lv = arg1.getIntExtra("level", 0); 
     level.setText("Level: " 
     + String.valueOf(lv) + "%"); 

     voltage.setText("Voltage: " 
       + String.valueOf((float)arg1.getIntExtra("voltage", 0)/1000) + "V"); 
       temp.setText("Temperature: " 
       + String.valueOf((float)arg1.getIntExtra("temperature", 0)/10) + "c"); 
       tech.setText("Technology: " + arg1.getStringExtra("technology")); 

       int status = arg1.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN); 
       String strStatus; 
       if (status == BatteryManager.BATTERY_STATUS_CHARGING){ 
       strStatus = "Charging"; 
       } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING){ 
       strStatus = "Dis-charging"; 
       } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING){ 
       strStatus = "Not charging"; 
       } else if (status == BatteryManager.BATTERY_STATUS_FULL){ 
       strStatus = "Full"; 
       } else { 
       strStatus = "Unknown"; 
       } 
       status1.setText("Status: " + strStatus); 

       int source=arg1.getIntExtra("source", BatteryManager.BATTERY_STATUS_UNKNOWN); 
       **int current=arg1.getIntExtra("current", BatteryManager.BATTERY_PROPERTY_CURRENT_NOW); 
       amp.setText("Current: "+String.valueOf(current)); 
       String strsource = null; 

      if(source==BatteryManager.BATTERY_PLUGGED_AC){strsource="AC Power Plugged";} 
       else if (source==BatteryManager.BATTERY_PLUGGED_USB){strsource="USB Plugged";} 
       sour.setText("Power Source: "+ strsource);** 
       int health = arg1.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN); 
       String strHealth; 
       if (health == BatteryManager.BATTERY_HEALTH_GOOD){ 
       strHealth = "Good"; 
       } else if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT){ 
       strHealth = "Over Heat"; 
       } else if (health == BatteryManager.BATTERY_HEALTH_DEAD){ 
       strHealth = "Dead"; 
       } else if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE){ 
       strHealth = "Over Voltage"; 
       } else if (health == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE){ 
       strHealth = "Unspecified Failure"; 
       } else{ 
       strHealth = "Unknown"; 
       } 
       health1.setText("Health: " + strHealth); 

       } 
      } 

       }; 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 

     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

回答

2

相反的ACTION_BATTERY_CHANGED广播注册,只需做到以下几点:

BatteryManager mBatteryManager = (BatteryManager)Context.getSystemService(Context.BATTERY_SERVICE);

然后使用mBatteryManager抓住你想要的任何信息。如果你想在一定的时间间隔,AlarmManager可能会有用。

就像一个笔记,并不是所有的手机都能给你即时的力量,或者你可能正在寻找的其他一些指标。据我所知,Nexus 6手机是唯一能够提供瞬时功率的手机。这里有一个很好的参考,以更好地帮助你。 https://source.android.com/devices/tech/power/device.html

相关问题