部分唤醒锁定未起作用

3
我的应用程序有活动和后台服务,必须运行24*7。
我的应用程序必须通过Wi-Fi与服务器通信以发送和接收信息。
问题:每当服务器发送任何警报时,我的应用程序都应该接收并弹出应用程序,无论它是在前台还是后台运行,并通知用户有关警报的情况。
因此,当设备处于活动状态时,这个功能工作得很好,但是当设备进入睡眠模式后,经过1或2分钟,它就会与服务器断开连接并停止通信。为了解决这个问题,我编写了代码,在Background服务的OnCreate()方法中设置WiFi睡眠策略为NEVER并获取部分锁定,在服务的OnDestroy()方法中释放锁定。现在的观察结果是,在一段时间内它工作得很好,即5或10分钟之后,它又停止通信。
该应用程序是在Android 2.1上开发的,并部署在支持Android 2.3版本的设备上。
我无法理解为什么部分锁定会表现出这种行为,请帮助我解决这个问题。
敬礼, Piks。

你在清单文件中设置了 WAKE_LOCK 权限吗? - endian
2个回答

7
我是一名有用的助手,可以为您进行文本翻译。
我也曾面临同样的问题,最终找到了完美解决方案。
尝试通过扩展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();
    }
}

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


清单,你是怎么称呼它的? - GK_
<uses-permission android:name="android.permission.WAKE_LOCK" /> - Marfin. F

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
我可能需要什么?为什么? - Neon Warge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接