带有监听器的广播接收器在不使用时会耗尽电池电量

2023-12-03

我有一个等待的接收器TelephonyManager.ACTION_PHONE_STATE_CHANGED:

public void onReceive(Context context, Intent intent) {
String theAction = intent.getAction();  
if (theAction != null && theAction.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
        CONTEXT = context;
        startListening();   
}

当它得到它时,我注册监听器(用于方向传感器):

public void startListening() {  
    sensorManager = (SensorManager) CONTEXT.getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if (sensors.size() > 0) {
        sensor = sensors.get(0);
        running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
    }
}   

然后,在听众的onSensorChanged() method:

public void onSensorChanged(SensorEvent event) {
    if(running) {   
        sensorManager.unregisterListener(this);
        // do some not significant stuff here
    }

现在的问题是:我接到电话,接收器启动,然后监听器启动,一切都按设计进行。但是,稍后,当我查看电池统计数据时,我的应用程序被列为消耗 2-3% 的应用程序。And这个百分比正在增加虽然没有电话 - 因此是接收者is not在职的。

这种电池消耗从何而来?启动接收器的活动不起作用(无论如何它都是单个复选框)。我想,听众可能不会取消注册sensorManager.unregisterListener(this);,但它应该可以工作 - 当监听器收到第一个事件时,我取消注册监听器,这是有道理的。

我该如何解决这个问题?


这种电池消耗从何而来?

永远永远永远永远永远永远永远永远永远不会在清单注册中包含某些内容BroadcastReceiver生活超越onReceive()。 IOW,您无法安全地注册SensorListener从清单注册BroadcastReceiver.

请有您的BroadcastReceiver将工作委托给Service (via startService()),其中onStartCommand()你注册了SensorListener。当您获得传感器读数时,或超时后(提示:手机并不总是改变方向),或在onDestroy()(如果 Android 决定关闭您的服务),取消注册侦听器并调用stopSelf()关闭该服务。

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

带有监听器的广播接收器在不使用时会耗尽电池电量 的相关文章

  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 在 UIScrollView 上以不同的速度滚动背景

    当有人做擦除手势从左向右滚动内容时 我希望背景图像滚动到相同的方向 但以不同的速度 就像 20 年前这些经典游戏所做的那样 有人还记得吗 我通过使用完成了这个two UIScrollView实例 第一个是显示实际内容的位置 第二个 按 z
  • 如何在 C#/Visual-Studio/Unity3d 中观察(即调试)lambda 范围内的额外 lambda 变量?

    在 Unity 中使用 Visual Studio Professional 2015 时 我注意到当我单步执行 lambda 表达式主体时 我无法观察在 lambda 表达式外部声明 分配但在 lambda 表达式内部读取的变量 priv
  • Boost Regex 与 Snow Leopard 配合不佳

    所以我继承了用 C 编写的使用 Boost 库的代码 我可以在 Linux Ubuntu 上编译 使用代码块 并运行代码 但是当我将其移植到 mac 并安装 boost 库时 我可以使用代码块编译它 并指定正则表达式库的位置 但它赢了别跑
  • 泛型方法:使用参数实例化泛型类型[重复]

    这个问题在这里已经有答案了 我有一个接受类型 T 的通用方法 我需要能够调用需要单个 XmlNode 的构造函数 目前 我正在尝试通过拥有一个具有我想要的构造函数的抽象基类 加上一个无参数的构造函数 这样除了添加实际的子类之外我不必编辑 子
  • WPF MVVM 导航视图

    我有一个具有多个视图的 WPF 应用程序 我想从视图 1 切换到视图 2 然后我可以切换到多个视图 所以我想在视图 1 上有一个按钮 在同一窗口中加载视图 2 我尝试了这些东西 但无法让它发挥作用 如何使用 MVVM Light for W
  • 如何将“文本框”中的文本添加到图像中?

    我正在开发一种工具 可以将文本添加到图像的特定区域 例如在对话气泡内 我正在生成一个边界框 并希望将文本限制为仅位于该边界框内 但到目前为止 查看 cv2 和 PIL 库 它们似乎只采用文本的起点 而不是边界框 cv2 import cv2
  • 尝试从广播接收器启动活动

    我正在尝试创建一个锁屏 当我尝试启动时com fira locker LockScreenActivity从广播接收器 我刚刚收到一个错误 错误说 java lang NullPointerException Attempt to invo
  • 为什么我不能将逆变接口作为接口上方法的参数?

    我正在尝试使用接口设置 CoR 其中链中的处理程序可以是使用逆变的派生较少的事件类型 我创建这个界面来做到这一点 public interface IHandler
  • :counter_cache 总项目数

    我有一组简单的两个相关的 订单 表 其中有许多 line items 还有与行项目关联的数量 例如 Order1line item a 初学者编篮子 数量 3line item b 吸血鬼傻瓜指南 数量 1 当我建立迁移时 我可以使用以下方
  • 使用 API 响应填充联系表单 7 发布的数据

    我正在尝试填充 posted data dynamichidden 458 与 PHP 变量 body body 是一个 API 响应 我想将其添加到数据中 然后将其发送到数据层以便稍后捕获 下面是它如何发送和接收 API 信息的示例代码
  • 绕过Java中的多重继承

    我认为我的继承问题有解决方案 但我找不到 我正在开发一个 Android 应用程序 目标是 Android 2 1 它重用SlidingDrawer 对于我的菜单 大部分页面上 为了避免在所有 Activity 上初始化它 我创建了一个De
  • 为什么我们不能将数组的地址分配给指针?

    int q 10 0 cout lt lt q lt lt endl cout lt lt q lt lt endl cout lt lt q 0 lt lt endl 输出是 0x7fffd4d2f860 0x7fffd4d2f860 0
  • 我如何知道我的 WebView 已加载 100%?

    我正在尝试在 WebView 中加载一些包含 JavaScript 的 HTML 代码 现在 我想测试我的 WebView 是否在 5 秒之前加载 我已经尝试过该方法getProgress 但有时我得到进度是100 但我的Webview没有
  • 测试回文的各种方法的性能 [Python]

    今天 我正在解决几个编程难题 面对测试字符串以确定它是否是回文的任务 我想出了几种方法来完成此任务 下面描述了这三种方法的基础知识 省略了大部分整理和测试代码 def check palin victim method if method
  • 通过绑定更改为“最大”时进度条未更新

  • 未调用地理围栏 didEnterRegion 和 didExitRegion 方法?

    大家好 我正在研究地理围栏 位置管理器 didDetermineState 正在正确调用 但是当我进入区域时 didEnterRegion 和 didExitRegion 从未被调用 这是我的代码 ViewController m Geof
  • iOS:如何让用户在 SwiftUI 应用程序中共享来自 Safari/Chrome 的 URL

    我想在我的应用程序中添加一项功能 浏览网页的用户可以按链接上的 共享 当正常的应用程序出现时 如 消息 邮件 Instagram 等 他们可以看到我的应用程序 当他们点击它时 我想处理我的应用程序内的网址 我尝试过搜索 swiftui 添加
  • Git --force-with-lease 在分支中带有 + (refspec)

    在当前的 Git 上 两者之间是否存在实质性差异git push force with lease origin somebranch git push force with lease origin somebranch and git
  • CheckedListBox C# 的 RepeatDirection 属性

    所以我在这里很困惑 我想让我的多线CheckedListBox进行水平排序 我做了一些研究 这一切都导致了RepeatDirection财产 MSDN 中的示例 但我没有网页 也不知道任何 XML 我不能以某种方式使用这个属性吗Checke
  • 带有监听器的广播接收器在不使用时会耗尽电池电量

    我有一个等待的接收器TelephonyManager ACTION PHONE STATE CHANGED public void onReceive Context context Intent intent String theActi