Фоновая служба Android Сканирование Bluetooth

У меня есть служба для сканирования устройств с низким энергопотреблением Bluetooth и отображения уведомлений. Это работает, если приложение запущено или оно находится в фоновом режиме. Но если приложение было удалено из фона, служба работает, но сканирование Bluetooth не работает. Может ли сервис что-нибудь сделать, если приложение убито? Спасибо.


person Zenco    schedule 31.01.2014    source источник


Ответы (2)


Непонятно по поводу вопроса.

Но исходя из моего понимания вышеупомянутого вопроса, пожалуйста, найдите мои комментарии следующим образом. В крайнем случае, если системе Android требуется память, в зависимости от важности процессов она начинает удалять процессы в порядке наименьшего значимости. В этом случае, если ваше приложение будет убито, служба из этого приложения не сможет продолжать работу. Его тоже убивают.

Но можно поместить процесс, в котором работает служба, как процесс переднего плана с помощью метода startForground (), который с меньшей вероятностью будет убит.

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

person Kiran    schedule 04.02.2014

Спасибо за ответ. Проблема заключалась в том, что контекст приложения был недоступен. Я нашел для этого решение. Я запускаю Alarmmanager и каждые 15 минут отправляю намерение. Это намерение обрабатывается моим собственным приемником, который объявлен в AndroidManifest.xml. Если намерение выполнено, контекст приложения доступен, и я могу запустить службу.

Запустить AlarmManager

Intent alarmIntent = new Intent(MyApp.getAppContext(),AlarmBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MyApp.getAppContext(), 0, alarmIntent, 0);
AlarmManager alarmMgr = (AlarmManager)MyApp.getAppContext().getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        AlarmManager.INTERVAL_FIFTEEN_MINUTES,
        AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);

Код для получателя

package com.example;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent arg1) {

    }

}

Объявить получателя в AndroidManifest.xml

<receiver 
        android:enabled="true" 
        android:name="com.example.AlarmBroadcastReceiver"
        android:exported="false">
        <intent-filter>
                <action android:name="com.example.AlarmBroadcastReceiver.checkservice" />
                <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</receiver>
person Zenco    schedule 05.02.2014