2017-01-22 5 views
1

Я пытаюсь сделать приложение Alarm Alarm. Я читал документы Android и узнал, что нам не нужно регистрировать BroadcastReceiver. Мы могли бы сделать что-то вроде this-Android Battery Broadcasts

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

МОИХ ВОПРОСОВ являются-

  • ли система вещания умысла (содержащее состояния батареи) каждый раз, когда изменение уровня заряда батареи ?
  • Должен ли я каждый раз запрашивать уровень заряда батареи?
  • Также, как играть в сигнал тревоги, когда уровень заряда батареи достигает определенного уровня (заданного пользователем) .
+0

Проверьте [официальный документ] (https://developer.android.com/training/monitoring-device -state/battery-monitoring.html) пожалуйста –

ответ

2

здесь полный образец, чтобы получить уровень заряда батареи

private float getBatteryLevel() { 
    Intent batteryStatus = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    int batteryLevel = -1; 
    int batteryScale = 1; 
    if (batteryStatus != null) { 
     batteryLevel = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, batteryLevel); 
     batteryScale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, batteryScale); 
    } 
    return batteryLevel/(float) batteryScale * 100; 
    } 

ответить на ваши вопросы:

1- Да, вы можете получить дополнительную информацию по getExtra и определению ключа BatteryManager имеет много ключей для извлечения информации из намерения.

2 нет, вам просто нужно зарегистрировать приемник и отменить регистрацию в соответствии с жизненным циклом активности или фрагмента, обычно регистрирующимся в onCreate()/onCreateView() и незарегистрированным в onDestry()/onDestroyView().

3- вы можете создать связанный сервис, который имеет простой интерфейс уведомления. Вы регистрируете свой приемник на него, и из предыдущего примера, вы могли бы сделать что-то вроде этого:

if (getBatteryLevel < 10) { 
//show notification or do whatever you want. 
} 
0

Сначала добавьте фильтр намерений в файле манифеста:

<receiver android:name=".BatteryLevelReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BATTERY_LOW"/> 
    <action android:name="android.intent.action.BATTERY_OKAY"/> 
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> 
    </intent-filter> 
</receiver> 

После добавления нового класса в проекте:

public class PowerConnectionReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
     boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 
          status == BatteryManager.BATTERY_STATUS_FULL; 

     int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; 
     boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 
    } 
} 

Для уровня заряда батареи пОЛУЧАЕТЕ:

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

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

float batteryPct = level/(float)scale; 

Дополнительная информация по этой ссылке: developer.android

0

Создайте приемник для получения информации .. Это лучший способ.

public class PowerConnectionReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
     boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 
          status == BatteryManager.BATTERY_STATUS_FULL; 

     int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; 
     boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 
    } 
} 

В манифесте добавить

<receiver android:name=".PowerConnectionReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> 
    <action android:name="android.intent.action.BATTERY_LOW"/> 
    <action android:name="android.intent.action.BATTERY_OKAY"/> 
    </intent-filter> 
</receiver> 

Для получения дополнительной информации посетите LINK

0
Q1. Yes, system provide every time . 
Example :  
     private class BatteryBroadcastReceiver extends BroadcastReceiver { 
      private final static String BATTERY_LEVEL = "level"; 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       int level = intent.getIntExtra(BATTERY_LEVEL, 0); 
       mBatteryLevelText.setText(getString(R.string.battery_level) + " " + level); 
       mBatteryLevelProgress.setProgress(level); 
      } 
     } 


//Register our BroadcastReceiver in application 

    BatteryBroadcastReceiver mReceiver = new BatteryBroadcastReceiver(); 
    registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 


//Update your progress bar get 

    public class MainActivity extends Activity { 
     private TextView mBatteryLevelText; 
     private ProgressBar mBatteryLevelProgress; 
     private BroadcastReceiver mReceiver; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      mBatteryLevelText = (TextView) findViewById(R.id.textView); 
      mBatteryLevelProgress = (ProgressBar) findViewById(R.id.progressBar); 
      mReceiver = new BatteryBroadcastReceiver(); 
     } 
     @Override 
     protected void onStart() { 
      registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
      super.onStart(); 
     } 
     @Override 
     protected void onStop() { 
      unregisterReceiver(mReceiver); 
      super.onStop(); 
     } 
     private class BatteryBroadcastReceiver extends BroadcastReceiver { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
       mBatteryLevelText.setText(getString(R.string.battery_level) + " " + level); 
       mBatteryLevelProgress.setProgress(level); 
if(level<10){ 
// play Battery alarm. 

      } 
     } 
    }