3

私のアプリケーションは、 24時間365日実行する必要のあるactivitiesバックグラウンドを持っています。service

Wi-Fi私のアプリケーションは、情報を送受信するためにを介してサーバーと通信する必要があります。

問題:サーバーからアラームが送信されるたびに、アプリがフォアグラウンドで実行されているかバックグラウンドで実行されているかに関係なく、アプリを受信して​​ポップアップし、アラームについてユーザーに知らせます。

したがって、デバイスがアクティブ状態の場合、この機能は完全に機能しますが、デバイスがスリープモードになると、1〜2分後にサーバーから切断され、通信が停止します。それを解決するために、WiFiスリープポリシーをNEVERに設定し、OnCreate()バックグラウンドサービスの方法で部分的なロックを取得し、サービスのOnDestroy()方法でロックを解除するコードを記述しました。その後5分または10分間、再び通信を停止します。

アプリはAndroid2.1で開発され、 Android2.3バージョンをサポートするデバイスにデプロイされます。

部分ロックがこのように動作する理由がわかりません。この問題の解決にご協力ください。

よろしく、ピックス。

4

2 に答える 2

6

私も同じ問題に直面し、最終的に完全に機能する解決策を見つけました。

アプリケーションクラスを拡張して、ウェイクロックを取得してみてください。コード:

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

他にご不明な点がありましたらお知らせください。助ける準備ができました!

于 2014-06-26T11:33:21.297 に答える
3

おそらくWifiManager.WifiLockも必要です。

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

(ここで、wlはWifiManager.WifiLockであり、これは)

于 2012-04-27T14:18:28.187 に答える