2013-01-18 111 views
3

我有一段代碼,需要獲取Android設備的電池電量,但我遇到了一個大問題! 我有一個android服務,我去哪裏獲取電池電量並通過UDP發送。在Android服務中使用BroadcastReceiver獲取電池電量

這是我的服務代碼:

public class Servico extends Service { 

String bateria = "Nada"; 

/* 
* Recupera nível de bateria 
*/ 
private BroadcastReceiver BatInfoReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
     bateria = String.valueOf(level); 
    } 
}; 

public void onCreate() { 
    super.onCreate(); 
    this.registerReceiver(this.BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(getApplicationContext(), "Command=" + bateria + "%", Toast.LENGTH_LONG).show(); 
    stopSelf(); 
    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(BatInfoReceiver); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

我的問題是:我不能得到的水平!我在BatInfoReceiver中將BreakPoint放入onReceive方法中,但此代碼僅在執行onStartCommand後執行,並且e NEED將電池電量值用於onStartCommand。

我該怎麼辦?

obs:我對可能的英語錯誤表示歉意。但我嘗試不使用谷歌的翻譯。

+0

我把烤麪包只在測試代碼! 僅用於測試變量「bateria」的值。 –

回答

1

你添加以下權限到你的mainfiest文件:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

,改變你的onReceived方法:

private BroadcastReceiver batteryReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) 
      { 
       int level = intent.getIntExtra("level", 0); 
       bat= String.valueOf(level) + "%" ; 
      } 
    }; 

,並獲得battrey一級使用這行代碼:

registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
+0

這是我對清單文件:: <使用許可權的android:NAME = 「android.permission.RECEIVE_BOOT_COMPLETED」/>權限 <使用許可權的android:NAME = 「android.permission.ACCESS_FINE_LOCATION」/> <權限android:name =「android.permission.READ_PHONE_STATE」/> <使用權限android: /> <使用權限android:name =「android.permission.BATTERY_STATS」/> –

+0

將您的onRevive消息更改爲上面添加的代碼並使用它下面的代碼行來獲得電池電量。 –

1

得到的水平我的問題的解決方案是我適應我的問題tyczj的答案... 。

我的新代碼:

public void onCreate() { 
    super.onCreate(); 

    //registerReceiver(BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter); 

    // Are we charging/charged? 
    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    bateria = String.valueOf(status); 

} 

我真的很感謝大家的幫助! 保持神! 謝謝!

+0

如果我的回答是正確的,爲什麼你不接受它而不是你的? – tyczj

+0

因爲我的代碼是正確的!我使用了你的鏈接,但我必須修改正確的操作。但是你是如何幫助我的,我會標記你的答案。好? –