wakeLock 不等待网络连接

2023-12-02

我使用唤醒锁作为警报来定期更新应用程序状态。三星手机上的 WiFi 需要一段时间才能连接。还有 Wifi 上的“保持唤醒”选项does not在三星手机上工作(他们也没有兴趣解决这个问题)。因此,当唤醒锁确实发生时,它应该等待 wifi 连接。我是否需要为 wifi 连接创建一个侦听器才能使其工作,或者应该唤醒锁,有点阻止该 wifi 连接?

mWakeLock = ((PowerManager) getSystemService(POWER_SERVICE)).newWakeLock(
            PowerManager.PARTIAL_WAKE_LOCK, "Taxeeta");
    mWakeLock.acquire();
// do some network activity, in a asynctask
// in the doPost of asyscTask, release lock

编辑 : 问题是,在AsyncTask中如果网络未连接,或者需要时间才能上网(3g需要一段时间才能上网),Async doInBackground中的webservice调用将会失败。无论如何我都必须释放锁。

SO

我应该放入 wifi/数据连接侦听器吗?或者,还有更好的方法 ?


I have a similar scenario - I am woken up by an alarm, the alarm's BroadcastReceiver launches a WakefulIntentService and the service starts a scan for networks. I use a stupid way of holding on to the lock1 - I intend to replace this with a latch. I suggest you replace the "AsyncTask" with a WakefulIntentService. Chances are the AsyncTask is not ever fired. In the WakefulIntentService you must acquire and hold on to a wifi lock - I would make this a static field of the YourWakefulIntentService - not entirely clear on this - it's a while back. If this does not work I would use a latch in the YourWakefulIntentService :

// register an alarm
Intent i = new Intent(context, YourReceiver.class);
PendingIntent alarmPendingIntent= PendingIntent.getBroadcast(context, 0, i,
            PendingIntent.FLAG_UPDATE_CURRENT);

public class YourReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        WakefulIntentService.sendWakefulWork(context, YourWIS.class);
    }
}

//pseudocode !
public class YourWIS extends WakefulIntentService { // you must add a cstor !

    @Override
    doWakefulWork() {
      acquireWifiLock();
      enableScanReceiver();
      startScan();
      serviceLatch.wait();
      releaseWifiLock();
    }
}

// in YourScanReceiver
onReceive() {
  if(action.equals(SCAN_RESULTS) {
   // do something that does not take time or start another/the same
   // WakefulIntentService
   serviceLatch.notify();
  }
}

首先尝试 WakefulIntentService(我猜您从警报接收器启动 AsyncTask)。扫描接收器是注册用于接收扫描结果的接收器(请参阅 WifiManager 文档 - 对于睡眠问题,更喜欢接收器而不是侦听器)

1 : this is a working class - I just use a second wakeful intent service to keep the wake locks - have still to refactor it to use latches but this approach at least works (I have the second service (the Gatekeeper) wait on a monitor and have the wake lock inside the Gatekeeper. The gatekeeper also holds its CPU lock so all is fine (and ugly)

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

wakeLock 不等待网络连接 的相关文章

  • 以编程方式连接到 Android Q 中的 Wifi

    我有这个功能可以连接Wifi网络 在Android 10以下它工作正常 但是当我在Android 10上尝试时 我连接成功了 但是没有互联网 我知道这是Android 10 中的一个错误但我发现了这个应用可以毫无问题地从 Android 1
  • 如何从 Android WifiConfiguration 条目获取 WiFi 安全性(NONE、WEP、WPA、WPA2)?

    我需要从中获取安全类型WifiConfiguration入口 是否可以 String getSecurityType WifiConfiguration conf 返回值 NONE WEP WPA WPA2 对于那些认为这是重复问题的人 我
  • Android 获取 Wifi 连接状态

    我目前正在使用NetworkRequest and NetworkCallback方法 谷歌官方推荐 获取Wifi连接状态 并且部分有效 我期待着onUnavailable 将在以下情况下被调用 close app gt turn off
  • Android 中 3G 相邻小区的 cellID 和 LAC / PSC

    我正在尝试使用 Android 识别 3G 中的相邻小区位置 这是通过 getNeighboringCellInfo 获得的 当手机工作在 GSM 模式时 我可以使用 getCid 和 getLac 来获取 CellID 和 LAC 但是对
  • 为什么我在 Android 上无法检测到带有 unicode 字符的 wifi SSID?

    我有一个 Wi Fi AP 其 SSID 是一串 unicode 字符 例如 我希望 Android 设备连接到它 当我的设备 Nexus One 检测到热点时 SSID 看起来像这样 并且无法识别它 知道如何解决这个问题吗 802 11数
  • 获取连接网络的 WiFi 信号强度

    我正在尝试在 Android 应用程序中显示已连接 WiFi 网络的信号强度 我尝试过以下方法 Receiver for information on the network info private BroadcastReceiver m
  • 为 android 4.1 设备编译和构建“iw”?

    我需要在 android 4 1 设备上安装 iw 无线软件包 但我不知道如何安装以及安装所需的软件包版本是什么 是否需要 Linux 平台来执行此操作 或者在 adb shell 上构建并安装 Android 生根设备就足够了 我看到这个
  • 蓝牙、wifi 和铃声模式的广播意图

    以下事件中广播的意图是什么 WiFi状态改变 蓝牙状态改变 振铃模式更改 For 无线网络状态变化 WifiManager WIFI STATE CHANGED ACTION http developer android com refer
  • 我可以在 Android 中找到我的接入点的 MAC 地址吗?

    我的 Android 应用程序可以找到它所连接的 Wifi 接入点的 MAC 地址吗 android net wifi WifiInfo getMacAddress 的文档未提供任何详细信息 See http developer andro
  • 如何在 Android 应用程序中使用 3G 互联网连接?

    我制作了一个应用程序 可以连接到我在服务器上运行的程序 但它似乎只适用于 WiFi 当我尝试使用 3G 时 却无法建立连接 为了使用 3G 我必须打开或设置什么特殊功能吗 在应用程序级别 您 通常 不必担心手机可以使用哪些数据连接 您是否研
  • 旧 iphone 3g 上的 HTTPS 请求

    其他任何人在旧 iPhone 上获取 https 请求时遇到问题 从连接确实失败并出现错误 错误消息如下 连接错误 错误域 NSURLErrorDomain 代码 1202 此服务器的证书无效 您可能正在连接到冒充 www ourwesbi
  • Jelly Bean 问题 - wifiManager.getConnectionInfo().getSSID() - 额外的“”

    您好 所有错误报告仅供参考 问题详情 The Code wifiManager getConnectionInfo getSSID 上面的代码返回当前的 SSID 它返回当前的 SSID 并在其周围加上额外的引号 例如 服务集标识符inte
  • 获取设备的 IMEI 代码或/和 Mac 地址

    我正在实施一种唯一标识设备的方法 建筑师向我发送了以下规格 带 Wifi 3G 的设备 IMEI 代码 设备 仅 Wifi MacAddress 两者还需要制造商 型号来完成 ID 我的问题是 如何从设备获取 IMEI 如何从设备获取制造商
  • 在 Android 10 上以编程方式断开 Wifi

    I use WifiNetworkSuggestion以编程方式将我的应用程序连接到我的热点 但是当我尝试以编程方式断开此连接时 我使用了removeNetworkSuggestions就像文档提到的那样 删除之前的部分或全部网络建议 由应
  • 如何在上传前检查 iOS 应用程序大小 [重复]

    这个问题在这里已经有答案了 我希望能够在提交到应用程序商店之前检查我的应用程序的大小 更具体地说 我需要知道它是否会低于神奇的 20 MB 以允许蜂窝下载 因为该应用程序是为节日而创建的 这个问题很老了 但在我看来仍然相关 以下是我上传应用
  • 我可以使用 WiFi 在两部未连接路由器的 Android 手机之间传输数据/消息吗?

    我知道如果两个Android手机连接到同一个wifi网络 它们可以实现套接字编程来在它们之间传输数据 但我其实想知道是否可以使用wifi作为两部Android手机之间的传输介质 就像蓝牙一样 使用 Android 2 2 可以在一台设备上创
  • Android/Java WiFi 直接对等列表

    Yo 我正在尝试让 Android 设备 它是 Nexus 7 尽管我无法想象这有多重要 通过 WiFi Direct 的奇迹与 Raspberry Pi 进行通信 据说这是可能的 六个小时前似乎是比沿着服务器 客户端路线更好的解决方案 但
  • WifiConfiguration 在 Lollipop 中启用网络

    我正在研究 Wifi 项目 有一个模块可以让用户以编程方式加入 wifi 在 kitkat 及以下版本中它可以成功工作 但在 Lollipop 中它不起作用 这是代码 WifiManager wifiManager WifiManager
  • 智能手机可以通过 3G/4G 进行点对点通信吗?

    我正在尝试编写一个应用程序 将数据从一个 Android 设备传输到另一个 Android 设备 但这些设备很可能位于城市 州或国家的不同部分 直接的方法是拥有一台中央服务器 或任何类型的服务器 但我试图避免使用中央服务器 我试图传递的数据
  • 如何查看 Android 上的 Wi-Fi 是否已连接?

    我什至不希望我的用户尝试下载某些内容 除非他们连接了 Wi Fi 然而 我似乎只能判断是否启用了 Wi Fi 但他们仍然可以有 3G 连接 android net wifi WifiManager m WifiManager getSyst

随机推荐

  • Fabricjs 1.6.3:为什么活动对象总是显示在顶部

    我的问题的良好演示 http fabricjs com hovering如果您选择任何项目 它将显示在顶部 在早期版本 1 5 0 1 6 2 中不存在此问题 抱歉英语不好 如果你不想要这种行为 你可以设置保留对象堆叠为真 检查此处的文档
  • 使用 Android Gradle 更改版本代码

    我正在尝试在我的版本中自动增加 versionCodebuild gradle 但这不起作用 然后我尝试简单地覆盖 versionCode 例如versionCode 20但它仍然没有更新 都检查过原件AndroidManifest xml
  • 指向接口/重载过程的过程指针

    我使用过程重载和接口来在 Fortran 程序中实现某种通用性 为此 我有一个包含许多过程的模块 所有过程都是重复的 以便能够更改变量类型 我还在模块的开头提供了一系列以下类型的接口 interface norm module proced
  • Geodjango 的 Beanstalk 迁移失败

    我想在 aws beanstalk 中部署 geodjango 我已经尝试过这个解决方案 以前有用过 commands 01 yum update command sudo yum y update 02 epel repo command
  • 当向视图控制器添加展开函数时,链接器命令失败,退出代码为 1

    我正在使用 Storyboard 开发一款 iPad 应用程序 在我的应用程序中 我有一个弹出窗口和一个视图控制器 如果我添加一个像这样的函数 IBAction unwindCouponPaymentToOrderdetailsView U
  • python 中的复制构造函数?

    python中有复制构造函数吗 如果不是 我会做什么来实现类似的目标 情况是 我正在使用一个库 并且我已经用额外的功能扩展了其中一个类 并且我希望能够将从库中获取的对象转换为我自己的类的实例 我想你想要复制模块 import copy x
  • 如何将词云放入grob中?

    我创建了一个简单的词云 require wordcloud words lt c affectionate ambitious anxious articulate artistic caring contented creative cy
  • 使用 BeautifulSoup 的 Python 进行网页抓取 429 错误

    首先 我不得不说我对使用 Python 进行 Web 抓取还很陌生 我正在尝试使用这些代码行来抓取数据 import requests from bs4 import BeautifulSoup baseurl https name of
  • Angular 2路由到同一路由

    I have Ride组件 并在骑行结束时Ride Summary显示 右侧的摘要有一个 开始另一次骑行 按钮 该按钮会重定向到同一组件 Ride routerLink Ride 自从Ride组件已经是我所在的组件 它没有刷新并且Ride
  • 使用 C 结构成员的连续内存

    在将其标记为重复之前 请先阅读问题 所以这可能是一个潜在的非常愚蠢的问题 但它困扰着我 我从阅读以及许多其他问题中知道 由于编译器添加的填充 C 结构中的字段不能保证是连续的 例如 根据C标准 13 在结构体对象中 非位域成员和位域所在的单
  • Javascript 在重新加载或重定向之前删除 cookie

    我需要删除一个cookie并且then进行重定向 然而 在处理重定向之前 cookie 不会被删除 问题是 如果执行重定向时 cookie 仍然存在 则重定向会被拦截并发送到预期页面以外的页面 很奇怪 我知道 说来话长 是否有可能欺骗浏览器
  • 如何使用其他Facebook帐户登录?

    我关注了本教程制作一个小应用程序来登录并打招呼 用户名 问题是 我只能使用我的帐户登录 但无法使用其他帐户登录 此问题发生在一些需要登录的示例代码 例如 HelloFacebookSample 或 Scrumptious 中 Logcat
  • 如何在Python中合并2列

    假设我使用 numpy 定义了一个 2x2 矩阵 array 1 2 2 3 现在另一个 2x1 矩阵 array 3 4 如何按列连接这两个矩阵 使其变为 array 1 2 3 2 3 4 我怎样才能删除指定列 这样它就会变成 arra
  • 使用正确的网格在 R 中绘制 netcdf

    我的目标是在世界地图上绘制硝酸盐 no3 数据 使用这些数据的正确经度和纬度 有两个 netcdf 文件 1 与数据 2 与网格信息 数据摘要信息 no3 是长度为 x y sigma 的数组 no3 df 是 x y 观测值 3 个变量
  • 在 IE7 中使用 Prawn 生成 Rails PDF

    我正在使用 Prawn 和 Prawnto 在 Ruby on Rails 应用程序 Rails 版本 2 2 2 中生成 PDF 该应用程序运行良好 可以愉快地生成 PDF 并将其发送给用户以在 Firefox 中下载 问题出在IE7上
  • 使用 PHP 在 Windows 中获取文件所有者

    在 Windows 上提供文件路径并获取其所有者用户名 当然 fileowner在这里是没用的 有什么 PECL 扩展可以提供帮助吗 编辑 也可以使用的替代方案 从 DOC 文件中读取摘要数据 以检索作者 编辑2 使用找到了解决方案COM
  • 在中心找不到工件 javax.sql:jdbc-stdext:jar:2.0 (https://repo.maven.apache.org/maven2)

    我正在尝试构建为我的项目创建的 Web 服务的 REST API 我的网络服务运行没有问题 现在 我想在远程服务器上部署我的服务 并且我需要生成war file 我使用 Java Eclipse 和 Maven 作为依赖项 我试着做一个全新
  • 如何使“%bp.hap.run-until name = X86_HLT_Instr”工作?

    从命令行模拟执行二进制文件 建议使用 bp hap run until name X86 HLT Instr 这是我的完整脚本 run command file targets qsp x86 firststeps no network s
  • 在android中解析11MB的大json[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我在使用 GSON 和 J
  • wakeLock 不等待网络连接

    我使用唤醒锁作为警报来定期更新应用程序状态 三星手机上的 WiFi 需要一段时间才能连接 还有 Wifi 上的 保持唤醒 选项does not在三星手机上工作 他们也没有兴趣解决这个问题 因此 当唤醒锁确实发生时 它应该等待 wifi 连接