2

現在、Android アプリケーションで Wi-Fi の変更をリッスンしていますが、ほとんどの場合問題なく動作しますが、ユーザーがデバイスを持っているときは、画面が空白のときのようにアイドル/スリープ モードになります。彼らが Wi-Fi エリアに入って自動的に接続した場合、ユーザーが画面をオンにするまで意図はわかりません。これはよくないことであり、私のアプリケーションに関する苦情につながります。画面が起動するまで意図が分からない理由を誰か助けてもらえますか?

これが私のコードです:

放送受信者:

public class WifiReciever extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent arg1) {

        String action = arg1.getAction();

        if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)){
            return;
        }                    

        if (!noConnectivity)
        {
            if (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)
            {
                //Handle connected case
                Log.e("E", "GOT CONNECTION"); 
            }
        }
        else
        {
            if (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)
            {
                //Handle disconnected case
                Log.e("E", "LOST CONNECTION");
            }
        }

    }

実行中のサービスの場合、それを変数として持っています:

WifiReciever mConnectionReceiver;

そして、次の呼び出しでサービスの受信者を開始および停止します。

private synchronized void startMonitoringConnection()
{       
    IntentFilter aFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);   
    registerReceiver(mConnectionReceiver, aFilter);
}

private synchronized void stopMonitoringConnection()
{     
    unregisterReceiver(mConnectionReceiver);
}

次のように CPU 時間を取得していることを確認するために、WakeLock を呼び出します。

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CicCPULock");
wl.acquire();

ただし、画面が空白の場合に接続変更の意図を受け取ることはありませんが、ユーザーが Wi-Fi に足を踏み入れ、画面が空白のときに接続すると、画面がオンになっているときに 100% 動作します。意図を取得できません。誰かが私が見逃していることを知っていますか?

4

1 に答える 1

1

実際、Android の WakeLocks、WIFI、WIFILocks には多くの問題があります。まず、WIFI ポリシーをチェックして、画面が暗くなったときに何が起こるかを確認します。「常時オン」である必要があります。次に、CPU をオンのままにしても WIFI がオフにならないため、wifi がスリープ状態にならないように WIFI ロックを取得してみてください。サンプル コードについては、次を参照してください。

http://goltermann.cc/2011/11/android-accessing-wifi-even-in-standby-using-wakelock-wifilock-alarmmanager-and-services/

また、WakkeLocks を使用するには権限が必要です。

    <uses-permission android:name="android.permission.WAKE_LOCK" />

この分野には他にも多くの問題があります。この質問を確認し、WIFI の問題について Google イシュー トラッカーを参照してください。これにより、多くのことが助けられ、多くの時間を節約できます。

Android の奇妙なクロスデバイス動作

于 2013-07-08T11:08:26.697 に答える