【问题标题】:Partial wake lock is not working部分唤醒锁不起作用
【发布时间】:2012-01-25 09:46:38
【问题描述】:

我的应用程序有activities 和背景service 必须运行24*7

我的应用程序必须通过Wi-Fi 与服务器通信才能发送和接收信息。

问题:每当服务器发送的任何警报我的应用程序都应该接收并弹出应用程序,无论它是在前台还是后台运行,并向用户提示警报。

因此,当设备处于活动状态时,此功能可以正常工作,但当设备进入睡眠模式时,1 或 2 分钟后它会断开与服务器的连接并停止通信。所以为了解决它,我编写了代码,将 WiFi 睡眠策略设置为 NEVER,并在后台服务的 OnCreate() 方法中获取部分锁定,并在服务的 OnDestroy() 方法中释放锁定。现在观察一些正常工作的时间意味着 5 或 10 分钟之后它再次停止通信。

应用在Android 2.1上开发,部署在支持Android 2.3版本的设备上。

我不明白为什么部分锁定会这样,请帮我解决这个问题。

问候, 皮克斯。

【问题讨论】:

  • 你是否在 manifest 中设置了 WAKE_LOCK 权限?

标签: android wakelock


【解决方案1】:

我也遇到了同样的问题,终于找到了完美的解决方案。

尝试通过扩展Application类来获取唤醒锁: 代码:

package com.example.MyApp.UserView;

import android.app.Application;
import android.content.Intent;
import android.os.PowerManager;
import android.provider.Settings;

/**
 * @author SDurai
 * 
 */
public class MyApp extends Application 
{
    private static final String TAG = MyApp.class.getSimpleName();
    private PowerManager.WakeLock mWakeLock = null;

    @Override
    public void onCreate() {
        super.onCreate();

        final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        mWakeLock.acquire();
    }

    @Override
    public void onTerminate() {
        if (mWakeLock.isHeld())
            mWakeLock.release();
        super.onTerminate();
    }
}

如果您还有其他疑问,请告诉我。准备提供帮助!

【讨论】:

  • Manifest 你是怎么称呼它的?
【解决方案2】:

您可能也需要一个 WifiManager.WifiLock:

WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wl = wm.createWifiLock(WifiManager.WIFI_MODE_FULL, "myId");
wl.acquire();

(其中 wl 是您的 WifiManager.WifiLock,其中 s)

【讨论】:

  • 我可能需要?为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多