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

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(使用前将#替换为@)

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

  • 如何用Android做交互动画(翻译)

    我在 Android 中有一些 png 序列 我需要将它们的 x 和 y 位置从屏幕顶部到底部的翻译动画化 当动画发生时 我需要对象来接收单击事件 我知道这在 3 0 之前的 Android 版本中效果不太好 因为display对象的位置与
  • 使用 ColorMatrix 调整亮度

    我正在尝试使用 ColorMatrix 调整图像的亮度 当尝试调整色相时 您可以在 Photoshop 中看到此选项 亮度和亮度也是两个不同的功能 但我不知道要更改哪些值才能实现此目的 目前我可以使用此代码更改色调 public stati
  • 如何通过代码检测Android上的表情符号支持

    通过代码 我可以制作一个按钮 将这 3 个表情符号插入到文本中 不过 在许多手机上 当用户单击按钮时 问题是 显示为 X X X 或者更糟糕的是 它只显示三个空白空间 我想在无法正确显示表情符号的 Android 设备上禁用并隐藏我自己的内
  • 需要对某些片段禁用 CollapsingToolbarLayout 的展开

    我有一个AppCompatActivity控制替换许多片段 这是我的布局 活动 main xml
  • 在 Android 中使用 awt

    我有一个绘制图表的 Java Swing 应用程序 它使用 Graphics2D 调用和 awt 对象 例如 Rectangle 等 在某些时候我可能想将其移植到 Android 上 我知道我无法在 Android 上使用 Graphics
  • 不使用eclipse安装Android模拟器

    如何在没有eclipse的电脑上安装android模拟器 android模拟器无需安装eclipse 只需下载 android sdk 并安装即可 安装android SDK之前必须先安装JDK 完成后安装成功 您将获得两个应用程序 SDK
  • Android 中图像字节表示的每像素字节数

    我目前正在编写一个Android应用程序 需要在其中使用OCR 为了实现这一点 我将 Tesseract 与tesseract android tools 项目 http code google com p tesseract androi
  • 将项目添加到 android 框架的设置中

    我正在 android 框架中工作 我想向 android 操作系统中的现有设置添加一个项目 您能告诉我如何执行此操作吗 首先阅读有关偏好活动 http developer android com reference android pre
  • 如何最大限度地减少 Google API(地点)自动完成的请求量?

    我正在使用 google API 位置来自动完成位置AutoCompleteTextView 我做了几次测试 大概进行了 20 次搜索 在我的 google devs 个人资料中 写着我已经发出了 200 个 API 请求 据我所知 每次我
  • 新安装的Eclipse和Android SDK。无法让模拟器工作。挂在时钟屏幕上

    我对开发是全新的 我已经安装了 Eclipse 和 Andoid SDK 但是 我无法让模拟器工作 我已经尝试过示例记事本代码和 Hello Android 教程代码 每次我尝试运行任一应用程序时 它都会挂在时钟屏幕上 屏幕上还显示正在充电
  • 片段活动中的 commitAllowingStateLoss()

    我的应用程序使用片段活动 它仅处于纵向模式 无法旋转屏幕 最初我使用的是commit 方法 但现在我计划不加区别地将这些更改为commitAllowingStateLoss 对于碎片活动 是否有任何理由不不加区别地执行此操作而不重新评估我使
  • 如何在Room的数据库迁移中正确添加索引?

    我在迁移 Room 数据库时遇到问题 在更新的数据库中 我必须将一个字段从整数更改为双精度值 我读到它并不像听起来那么容易 为了做到这一点 我必须使用这个更改后的属性创建新的临时表 复制前一个表中的所有值 删除旧的值 最后重命名临时表 我的
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • Grade Plugin 3-alpha1 输出文件导致错误

    我正在尝试将项目更新到 Android Studio 3 build gradle 文件中不再接受以下代码片段 applicationVariants all variant gt variant outputs each out gt d
  • 活动中列表视图中的粘滞行

    我的列表视图中只有一行应该是粘性的 而不是粘性标题中带有字母的部分或部分 我真的很感激任何关于列表视图在活动中粘性一行而不是片段的帮助 我该怎么做 我真的很感谢任何帮助 提前致谢 使用如下代码 class MyAsyncTask exten
  • 带有工具提示的搜索栏 android

    Hi All 我正在尝试使用工具提示自定义 android 搜索栏 如给定的图像 有没有办法在搜索栏中添加带有拇指的文本视图 或任何其他想法 Thanks 我们可以通过拇指的界限来做到这一点 并在seekbar的progressChange
  • FCM 主题是否适合更多用户?

    我对使用主题消息有点困惑 我的场景是根据通知触发一些作业 请帮助我更多地了解这一点 如果我们正在处理大量用户 则可以使用 FCM 主题向用户发送通知 我们可以只使用数据消息和主题消息吗 使用主题发送的消息是否保证送达 我在 FCM 文档中看
  • 在两个片段之间拖放视图

    我目前正在尝试在两个片段之间实现拖放 我已经将它们添加到我的活动中 如下所示 FragmentManager fm getFragmentManager FragmentTransaction ft fm beginTransaction
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用

随机推荐

  • 从输入流获取文件名 (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