2014-02-28 6 views
0

В моем приложении Я хочу проверить уровень заряда батареи, если он меньше определенного значения. Я хочу, чтобы мое приложение говорило об этом уровне, используя текст для речи и услуг. Я сделал это с помощью broadcastreciever, но она работает только тогда, когда приложение работает на экране и не работает, когда он работает в фоновом режиме ...Как получить уровень заряда батареи с помощью широковещательного приемника

public class Batteryreciever extends BroadcastReceiver { 
    int level; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
if(intent.getAction().equals("android.intent.action.BATTERY_CHANGED")) { 
      level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
      if (level < 10) { 
       String batterylevel = "critical battery "; 
     Intent i = new Intent(context, MyService.class); 
      i.putExtra("KEY1", batterylevel); 
       i.putExtra("type", "battery"); 
      context.startService(i); 
      }  
      } 
    } } 
+0

Оставьте свой код, пожалуйста. Если вы создаете широковещательный приемник в своей деятельности, он может не работать, когда приложение находится в фоновом режиме, однако, если у вас есть отдельный класс для получателя, а затем зарегистрируйте его в манифесте, приемник будет вызываться каждый раз, когда действие транслируется. См. Это [ссылка] (http://developer.android.com/reference/android/content/BroadcastReceiver.html#onReceive (android.content.Context, android.content.Intent)) –

+0

Я добавил свой код, если вы можете пожалуйста помогите. @AleksandarApostolov – user2409402

ответ

0

попробуйте эту ссылку, чтобы получить informaton батареи .. http://www.tutorialforandroid.com/2009/01/getting-battery-information-on-android.html

public class Main extends Activity { 
    private TextView batteryTxt; 
    private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context ctxt, Intent intent) { 
     int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
     batteryTxt.setText(String.valueOf(level) + "%"); 
    } 
    }; 

    @Override 
    public void onCreate(Bundle b) { 
    super.onCreate(b); 
    setContentView(R.layout.main); 
    contentTxt = (TextView) this.findViewById(R.id.batteryTxt); 
    this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    } 
} 
+0

Это работает только тогда, когда приложение запускается при нажатии кнопки «Назад», но оно не работает, так как я хочу начать работу, даже если приложение работает в фоновом режиме, – user2409402

+0

затем используйте эту ссылку http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html –

0

смотреть на это, он поможет вам уровень заряда батареи вам нужно, чтобы вы могли начать свое обслуживание. Просто используйте BatteryManager.EXTRA_LEVEL как ключ, чтобы получить уровень от намерения использования

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html 
0

этот метод:

public static float getBatteryLevel(Context cntx) { 
     Intent batteryIntent = cntx.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
     int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
     int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

     // Error checking that probably isn't needed but I added just in case. 
     if(level == -1 || scale == -1) { 
      return 50.0f; 
     } 

     return ((float)level/(float)scale) * 100.0f; 
    } 
1

с помощью липкой приемник Broadcast вы можете получить уровень батареи и после того, как вы сказали, уровень заряда батареи доходит до определенного уровня, а затем выполняет задачу, что вы хотите.

Link и смотри This

это поможет, и вы получите больше информации

+0

приятное объяснение ... +1 к вам –

Смежные вопросы