2014-01-31 4 views
0

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

ответ

0

Непонятный вопрос.

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

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

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

0

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

Start 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) { 

    } 

} 

Declare приемник в 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> 
Смежные вопросы