部分唤醒锁定无效

时间:2012-01-25 09:46:38

标签: android wakelock

我的应用程序有activities和后台service,必须运行 24 * 7

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

问题:每当我的应用程序发送的任何警报都应该收到并弹出应用程序,无论它是在前台还是后台运行,并且与用户有关于警报的信息。

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

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

我无法理解为什么部分锁会像这样,请帮我解决这个问题。

的问候, 皮克斯。

3 个答案:

答案 0 :(得分:3)

您可能还需要WifiManager.WifiLock:

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

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

答案 1 :(得分:3)

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

尝试通过扩展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();
    }
}

如果您有任何其他疑问,请告诉我。随时准备帮助!

答案 2 :(得分:0)

  

我的应用程序正在进行必须运行24 * 7的活动和后台服务,

这是不可能的。

  

问题:每当服务器发送任何警报我的应用程序都会收到并弹出应用程序,无论它是在前台还是后台运行,并且与用户有关于警报的信息。

请摆脱服务并使用C2DM为您的服务器通知您的设备有关警报。