18

Android N では、CONNECTIVITY_CHANGE インテントのブロードキャスト レシーバーを静的に登録することはできません。

http://developer.android.com/preview/features/background-optimization.html#connectivity-action Google のドキュメントから 、ジョブ スケジューラを使用してこのタスクを実行することが提案されています。

Android でジョブ スケジューラを使用して、ネットワーク状態の変化 (LTE から Wi-Fi へ) とその逆を検出することは可能ですか?

4

2 に答える 2

14

はいといいえ。

このJobInfo.Builder.setRequiredNetworkType()方法を使用すると、特定のネットワーク条件が満たされたときにジョブを実行するようにスケジュールできます。

ネットワーク タイプは、次の 3 つの値のいずれかになります。

  • JobInfo.NETWORK_TYPE_NONE: ネットワーク接続は必要ありません。
  • JobInfo.NETWORK_TYPE_UNMETERED: 定額制のWiFiまたはイーサネット接続。
  • JobInfo.NETWORK_TYPE_ANY: 任意のネットワーク接続 (WiFi またはセルラー)。

さて、問題は... NETWORK_TYPE_CELLUAR がありません。アプリがセルラーのみの場合にのみウェイクアップすることはできません。(なぜそれをしたいのですか?)

もう 1 つのキャッチは... WiFi 接続は従量制または非従量制です。従量制接続は通常、モバイル ホットスポットのようなものであり、これは自動的に検出されるか (ホットスポットが送信できる特別な DHCP オプションがあります)、またはユーザーが WiFi 設定からネットワークごとに手動で切り替えることができます。

そうです、JobScheduler ジョブにネットワーク タイプの制約を設定できます。ただし、いいえ、求めているレベルの粒度は得られません。

@CommonsWareが述べたように、正当な理由がない限り、通常、ネットワーク接続が計測されていないときにネットワーク関連のジョブが発生するようにスケジュールするという考えです。setRequiresCharging(true)(バッテリーを節約するために、AC 電源が使用可能になるまでジョブを延期することもお勧めします。)

于 2016-05-18T02:48:23.327 に答える