Android后台服务蓝牙扫描

时间:2014-01-31 08:56:34

标签: android bluetooth-lowenergy background-service

我有扫描蓝牙低功耗设备并显示通知的服务。如果应用程序已启动或应用程序处于后台,则此方法有效。但如果应用程序从后台删除,该服务正在运行,但蓝牙扫描不起作用。如果应用程序被杀,服务可以做些什么吗?谢谢。

2 个答案:

答案 0 :(得分:0)

不清楚这个问题。

但根据我对上述问题的理解,请参阅以下内容。 在极端情况下,如果Android系统需要内存,则根据进程的重要性,它会以最不重要的方式开始删除进程。在这种情况下,如果您的应用程序被杀死,那么该应用程序的服务将无法继续运行。它也被杀死了。

但是可以通过startForground()方法将服务运行的进程作为Foreground进程运行,因为它不太可能被杀死。

如果应用程序的服务组件&整个应用程序运行在两个不同的过程中。运行整个应用程序的进程被终止但是服务运行的进程仍然存在,然后需要检查依赖性,例如BluetoothAdapter组件或者这些事情被应用程序进程杀死了。确保该服务是在不同进程中运行的独立组件。

答案 1 :(得分:0)

谢谢你的回答。问题是应用程序上下文不可用。我找到了解决方案。我启动一个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

<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>