如何让服务在睡眠模式下也能运行?

2023-11-24

我有正在实现位置侦听器的服务。现在我的问题是如何确保我的服务即使在睡眠模式下也能捕获位置。我读过有关警报管理器的内容

alarm.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, operation);

但如何使用它。这是我的代码..任何帮助将不胜感激..
我的服务

public class LocationCaptureService extends Service implements LocationListener {
public static int inteval;
java.sql.Timestamp createdTime;
LocationManager LocationMngr;

@Override
public void onCreate() {
    inteval=10*1000;

    startLocationListener(inteval);
}

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

private void startLocationListener(int inteval,String nwProvider) {
    this.LocationMngr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);        
        this.LocationMngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, inteval, 0, this);
}   

public void onLocationChanged(Location location) {
    String status="c",S=null;
    double longitude,lattitude,altitude;
    g_currentBestLocation = location;
    createdTime = new Timestamp (new java.util.Date().getTime());    
         longitude=location.getLongitude();
         lattitude=location.getLatitude();
         altitude=location.getAltitude();
         //use this
         }
  }                              
  public void onProviderDisabled(String provider) {}                            
  public void onProviderEnabled(String provider) {}                             
  public void onStatusChanged(String provider, int status, Bundle extras) {}

}


如果您想确保您的服务不会被操作系统终止/回收,您需要将其设为前台服务。默认情况下,所有服务都是后台的,这意味着当操作系统需要资源时它们将被终止。详细请参考这个doc

基本上,您需要创建一个Notification为您的服务并表明它是前台。这样,用户将看到持久通知,以便他知道您的应用程序正在运行,并且操作系统不会终止您的服务。

以下是如何创建通知(在您的服务中执行此操作)并将其置于前台的简单示例:

Intent intent = new Intent(this, typeof(SomeActivityInYourApp));
PendingIntent pi = PendingIntent.getActivity(this, 0, intent,   PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

builder.setSmallIcon(Resource.Drawable.my_icon);
builder.setTicker("App info string");
builder.setContentIntent(pi);
builder.setOngoing(true);
builder.setOnlyAlertOnce(true);

Notification notification = builder.build();

// optionally set a custom view

startForeground(SERVICE_NOTIFICATION_ID, notification);

请注意,上面的示例是基本的,不包含取消通知等的代码。此外,当您的应用程序不再需要该服务时,它应该调用stopForeground为了删除通知并允许您的服务被终止,不这样做就是浪费资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让服务在睡眠模式下也能运行? 的相关文章

随机推荐

  • 从输入流获取文件名 (Java)

    如果我有这段代码 我如何保留原始文件的文件名或将其重新分配给新文件 InputStream input assetInfo openStream File t new File OutputStream out new FileOutput
  • 将 javascript 对象序列化为 json 并返回

    我正在使用 jQuery post 方法将一些数据发送到服务器 我不想自己构建 JSON 字符串 而是想简单地使用 JavaScript 对象 当我得到返回字符串 JSON 格式 时 我想自动构造一个相应的 JavaScript 对象 这可
  • 使用 Fluent NHibernate 将 List 映射到分隔字符串

    我的模型看起来像这样 public class Product public string Name get set public string Description get set public double Price get set
  • 如何在 Macos 中检测新文件或修改过的文件

    在Windows操作系统中 MS提供了ReadDirectoryChangesW和FindFirstChangeNotification API来检测新的或修改的文件 Mac OSX是否也提供相同的功能 在 Mac OS X Leopard
  • React - 如何将参数传递给事件处理程序

    好吧 我是 React 新手 关于事件处理程序的一件事真的非常困扰我 我似乎无法得到关于如何向它们传递参数的直接答案 到目前为止 我看到的有两种方法 Bind props squareClick bind this argument Inl
  • 如何使用 CSS 制作 V 形箭头?

    好的 所以每个人都知道你可以用这个来制作一个三角形 triangle width 0 height 0 border left 50px solid transparent border right 50px solid transpare
  • 在 PDO 查询上设置 group_concat_max_len

    我有以下查询 cases conn gt prepare SELECT GROUP CONCAT text SEPARATOR as texts year FROM cases GROUP BY year ORDER BY ano DESC
  • CardLayout 获取所选卡片的名称

    如何获取卡片布局中所选面板的字符串标识符 CardLayout 不知道当前选择的面板是什么 调用 show 方法时 您应该自己将其保留在内存中
  • 最令人烦恼的解析[重复]

    这个问题在这里已经有答案了 我在这里看到了一个代码Cpp Quiz 问题 38 include
  • 在 CXF wsdl2java 中设置 Java 合规性级别

    我是 CXF 的新手 正在尝试从 WSDL 创建客户端 我过去使用过 Metro 和 Axis 我下载了 apache cxf 2 3 3 并使用 wsdl2java 生成客户端存根 我使用 Maven 并使用以下命令设置我的 pom
  • 创建沙箱 C# [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有没有关于如何使用 C 创建沙箱的教程 我想定制一款属于我自己的 谢谢 研究使用应用程序域 这是一些代码examples
  • Foreach Razor 内部的 Foreach

    我正在尝试编写一个 foreach 循环 它将找到每个不同的类别类型 然后列出具有该类别分配的每个标题 例如 model IEnumerable
  • MSVC -Wall 中标准标头中的数千条警告是怎么回事?

    有些人似乎建议您使用 Wall 但是当我在一个只有 main cpp 和一些包含的小型测试项目上执行此操作时 我收到了 5800 个警告 其中大多数在标准标头或 Windows 标头中 这是有意的行为吗 如何使我的编译警告不再出现 以下只是
  • 如何升级新版本的 Eclipse 而不是使用新下载的包?

    我正在寻找升级当前 Eclipse 版本的步骤 Mars 到最新版本 Oxygen 因为我过去很长时间以来一直在使用 Mars 所以它包含所有设置 插件和所有历史记录 所以我想保留相同的内容并升级到新版本 这可能吗 注意 它可以是任何类型的
  • 使用什么安装产品? InstallShield、WiX、Wise、高级安装程序等[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我目前正在做一些调查 以放弃我们目前使用的安装包 Wise Installer 9 转而使用可以处理 Windows Vista Windows 7
  • 应用程序在登录时崩溃(xcode 9.3)EXC_BAD_ACCESS(代码=1,地址=0x1)

    我在 9 3 更新上遇到此崩溃 在 9 2 上一切正常 会是什么 通过任何来源 登录通行证 VK 谷歌 登录时都会出现该错误 class AppDelegate UIResponder UIApplicationDelegate GIDSi
  • 如何找出哪些进程锁定了文件夹或文件?

    如何查询正在运行的进程以找出它们锁定了哪些文件夹或文件 即 您要弹出驱动器 但被告知无法弹出它 因为它正在使用中 我想要么获得 现成的 下载 要么编写一个 NET 3 5 应用程序来执行此操作 主要是 Windows 问题 流程浏览器会告诉
  • AVAudioPlayer初始化错误

    我初始化我的 AVAudioPlayer 实例 如下所示 self audioPlayer initWithContentsOfURL url error err url 包含 m4a 文件的路径 调用此行时 控制台中会显示以下错误 错误域
  • 无头/CLI LibGDX

    我正在为一个小型 LibGDX 支持的游戏编写服务器端代码 并且偶然发现了一个问题 每次我尝试使用任何Gdx files 方法 我遇到了NullPointerException 显然这是因为我没有实现 ApplicationListener
  • 如何让服务在睡眠模式下也能运行?

    我有正在实现位置侦听器的服务 现在我的问题是如何确保我的服务即使在睡眠模式下也能捕获位置 我读过有关警报管理器的内容 alarm setRepeating AlarmManager RTC WAKEUP triggerAtMillis in