как заставить работать регистрацию батареи в Манифесте, а не в Деятельности - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь выполнить действия, выполняемые при замене батареи. Для этого я использовал следующий код:

public class BatteryBroadcastReceiver extends 
BroadcastReceiver {

DatabaseHelper db;

@Override
public void onReceive(Context context, Intent intent) {

db = new DatabaseHelper(context);
String cont1 = db.usercontact().toString();

String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_BATTERY_CHANGED)) {

    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
    int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
    int percentage = level * 100 / scale;

    if(percentage <=  20){
       // doing something like getting location
    }
}
}

Я зарегистрировал свою трансляцию в своей деятельности:

public class Battery extends AppCompatActivity {

  private BatteryBroadcastReceiver batteryReceiver = new BatteryBroadcastReceiver();
  private IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_location);

 }

@Override
protected void onResume(){
super.onResume();
registerReceiver(batteryReceiver,intentFilter);
}

@Override
protected void onPause(){
unregisterReceiver(batteryReceiver);
super.onPause();
}

Этот общий фрагмент кода работает нормально, но он ограничивает менятолько это действие (может быть потому, что трансляция зарегистрирована в этом действии). Как и до тех пор, пока эта активность остается открытой, я могу выполнять какую-то задачу, но когда я ее закрываю, когда батарея разряжается, она не выполняет никаких задач. Теперь я не знаю, что делать. У меня есть другие действия в моем приложении, и я хочу, чтобы оно работало, даже когда я не в этом действии. Есть ли способ, чтобы я мог зарегистрировать его в манифесте, чтобы он мог работать в целом. Я пытался сделать это, но потом ничего не происходит при замене батареи. Заранее спасибо за помощь:).

1 Ответ

0 голосов
/ 11 ноября 2019

Больше невозможно зарегистрироваться на ACTION_BATTERY_CHANGED в манифесте. См. https://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED

Если вы хотите, чтобы эта трансляция запускалась Intent во всех ваших действиях, вы можете сделать это одним из двух способов:

  • Зарегистрируйте и отмените регистрациюприемник в каждом из ваших действий. Вы можете упростить это, создав BaseActivity, который обрабатывает регистр и отмену регистрации BroadcastReceiver, а затем расширяет все ваши действия с BaseActivity.
  • Зарегистрируйте получателя, когда ваше приложение запускается в пользовательском Application класс, или в onCreate() вашего первого Activity. Не отмените регистрацию получателя. Это вызывает небольшую утечку памяти, но я бы не стал беспокоиться об этом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...