Android фонова услуга Bluetooth сканиране

Имам услуга за сканиране на Bluetooth Low Energy устройства и показване на известие. Това работи, ако приложението е стартирано или е във фонов режим. Но ако приложението е премахнато от заден план, услугата работи, но 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