0

【私のAndroidアプリの概要】 私のアプリは一定間隔(30秒)でサーバーを監視しています。

【結果(課題)】

  1. 18[h] 00[m] 00[s] サーバーチェックOK。
  2. 18[h] 00[m] 30[s] サーバーチェックOK。
  3. 18[h] 03 [m] 14 [s] サーバーチェックOK。<= これは問題です。私のアプリは 18:01:00 にサーバーをチェックする必要があります。

    Sony Xperiaで一定時間間隔でサーバーに接続できません。

[予想された結果]

  1. 18[h] 00[m] 00[s] サーバーチェックOK。
  2. 18[h] 00[m] 30[s] サーバーチェックOK。
  3. 18[h] 01 [m] 00 [s] サーバーチェックOK。

【私のプログラムについて】 私のアプリはAlarmManagerからのBroadcastを一定間隔で受信しています。BroadcastReceiverがサービスを開始。サービスで、私のアプリはサーバーに接続します。私のアプリの詳細は以下の通りです。

[Step1] : setRepeating by AlarmManager

private void setRepeating () {
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
          am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),pollingIntervalmsec, pendingIntent);
}

[Step2] : AlarmManager から Broadcast を受信し Service を起動

 public class PollingAlarmBroadcastReceiver extends BroadcastReceiver {
        private static final String WAKELOCK_TAG = "xxx.xxx.xxx.xxx.PollingAlarmBroadcastReceiver";
        private static PowerManager.WakeLock wl;
        @Override
        public void onReceive(Context context, Intent arg1) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG);
            wl.acquire();
            Intent intent = new Intent(context, MonitoringService.class);
            context.startService(intent);
        }

        private void doOperation(Context context) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG);
            wl.acquire();
            Intent intent = new Intent(context, MonitoringService.class);
            context.startService(intent);
         }
     }

AndroidManifest.xml

    <receiver
        android:name="xxx.xxx.xxx.xxx.PollingAlarmBroadcastReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="cxxx.xxx.xxx.xxx.PollingAlarm" />
        </intent-filter>
    </receiver>

[Step3] : サービス時にサーバーに接続します。

HttpGet request = new HttpGet(url);
request.setHeaders(headers);
HttpParams params = new BasicHttpParams();
DefaultHttpClient httpClient = new DefaultHttpClient(params);
HttpResponse response = httpClient.execute(request);

[Step4] : サーバー接続後、ウェイクアップロックを解除します。

wl.release();

[問題ログ] アプリが AlarmManager からのブロードキャストを正常に受信し、サービスも正常に開始されました。しかし、私のプログラムは「httpClient.execute」で約 2 分間中断し、以下のログが表示されます。

I/QCNEA(10674): |NIMS| getaddrinfo: ホスト名 google.co.jp servname NULL 数値 4 appname I/QCNEJ(686): |CORE| CNE_NOTIFY_NSRM_BLOCKED_UID を受け取りました

【通常ログ】

I/QCNEA(10674): |NIMS| getaddrinfo: ホスト名 google.co.jp servname NULL 数値 4 appname I/QCNEA(10674): |NIMS| getaddrinfo: ホスト名 google.co.jp servname NULL 数値 0 appname I/QCNEA(278): |NIMS| getaddrinfo: ホスト名 google.co.jp servname NULL 数値 0 appname I/QCNEA(10674): |NIMS| getaddrinfo: ホスト名 173.194.126.151 servname NULL 数値 4 appname I/QCNEA(10674): |NIMS| 接続: for 43 saddr 0000000000000000000000000000000:52017 (28) daddr 10 000000000000000ffff00007681007d:80

【環境】 Sony Xperia SOL22、Sony Xperia Zの日本モデルです。Android 4.2.2。ネットワーク環境はモバイルインターネット(LTE)のみです。Wi-Fi スイッチがオフになっています。

[問題分析] Xperia デバイスがスリープ状態にならない場合でも、アプリは正常に動作します。私のアプリは、Wifi のみを使用している場合でも正常に動作します。Nexus7でもこのアプリを試しました。それは正常に動作します。アプリが PowerManager から WakeLock を取得しても、xperia ネットワーク デバイスまたはソフトウェアがスリープ状態を続けることがあります。

【質問】 この問題を解決するには?どんなアイデアでも大歓迎です。

4

1 に答える 1

0

電話アプリの開発については何も知りませんが、Xperia Z を所有しています。電話がスリープ状態になると、Wifi とモバイル インターネットが頻繁にオフになり、画面がオンになると再びオンになります。

これはあなたの問題でしょうか?

于 2014-05-08T11:49:46.987 に答える