Частичная блокировка следа не работает - PullRequest
2 голосов
/ 25 января 2012

У моего приложения activities и фон service, который должен работать 24 * 7 ,

Мое приложение должно общаться с сервером через Wi-Fi для отправки и получения информации.

Проблема: всякий раз, когда какой-либо сигнал тревоги, отправляемый сервером, должен получить мое приложение, и всплывает приложение, работает ли оно на переднем или заднем плане и информирует пользователя о тревоге.

Таким образом, когда устройство находится в активном состоянии, эта функция работает отлично, но когда устройство переходит в спящий режим, через 1 или 2 минуты оно отключается от сервера и прекращает связь. поэтому, чтобы разрешить его, я написал код, который установит политику сна WiFi НИКОГДА и получит частичную блокировку в методе OnCreate() Фонового сервиса и снятие блокировки в методе OnDestroy() сервиса. Теперь наблюдение для некоторых если он работает нормально, значит в течение 5 или 10 минут после этого он снова перестает общаться.

Приложение разработано на Android 2.1 и развернуто на устройстве с поддержкой Android 2.3 версии.

Я не могу понять, почему частичная блокировка ведет себя так, помогите мне решить эту проблему.

С уважением, Пикс.

Ответы [ 3 ]

3 голосов
/ 27 апреля 2012

Вам, вероятно, также нужен WifiManager.WifiLock:

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

(где wl - ваш WifiManager.WifiLock, который)

3 голосов
/ 26 июня 2014

Я также столкнулся с той же проблемой и, наконец, нашел решение, которое работает идеально.

Попытка получить блокировку от пробуждения путем расширения класса приложения: Код:

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();
    }
}

Дайте мне знатьесли у вас есть другие сомнения.Готов помочь!

0 голосов
/ 25 января 2012

У моего приложения есть действия и фоновый сервис, который должен запускаться 24 * 7,

Это невозможно.

Проблема: при возникновении тревогиотправить сервером мое приложение должно получить и вспомнить приложение, работает ли оно на переднем или заднем плане и информировать пользователя о тревоге.

Пожалуйста, избавьтесь от службы и используйте C2DM для своегосервер для уведомления вашего устройства о тревоге.

...