首页 文章

Android后台服务蓝牙扫描

提问于
浏览
0

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

2 回答

  • 0

    不明白这个问题 .

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

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

    如果应用程序的服务组件和整个应用程序在两个不同的进程中运行,并且运行整个应用程序的进程被终止但是服务运行的进程仍然存在,那么需要检查依赖性,例如BluetoothAdapter组件或者这样的事情得到了被应用程序进程杀死并确保该服务是在不同进程中运行的独立组件 .

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

相关问题