wakeLock不等待网络连接

时间:2013-10-14 12:46:03

标签: android-wifi 3g android-wake-lock

我正在使用唤醒响铃来定期更新应用状态。 wifi需要一段时间才能连接三星手机。此外,Wifi 上的“保持清醒”选项不会在三星手机上运行(nor are they interested in fixing the issue)。所以当唤醒锁发生时,它应该等待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中,OR需要时间(3g需要一段时间才能启动),Async doInBackground中的webservice调用将失败。而且无论如何我都要释放锁。

SO

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

1 个答案:

答案 0 :(得分:1)

我有类似的情况 - 我被警报唤醒,the alarm's BroadcastReceiver启动 WakefulIntentService ,服务开始扫描网络。 I use a stupid way of holding on to the lock 1 - 我打算用闩锁替换它。我建议你用WakefulIntentService替换“AsyncTask”。机会是AsyncTask永远不会被解雇。在 WakefulIntentService 的,你必须获得并留住有wifi锁 - 我会做这个的静态的的YourWakefulIntentService的领域 - 这个还不完全清楚 - 这是一个而回。如果这不起作用,我会在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:这是一个工作类 - 我只是使用第二个唤醒意图服务来保持唤醒锁 - 仍然要重构它以使用锁存器但这种方法至少可行(我有第二个服务(看门人)在监视器上等待并在关守内部进行唤醒锁定。看门人也保持其CPU锁定所以一切都很好(和丑陋)