1. ホーム
  2. android

[解決済み] ConnectivityManager.CONNECTIVITY_ACTION 非推奨

2022-10-11 17:13:52

質問

Android N では、公式サイトに「Android N をターゲットとするアプリは CONNECTIVITY_ACTION ブロードキャストを受信しない」と記載されています。また、以下のような記載もあります。 JobScheduler を代替に使用することができます。しかし JobScheduler とは全く同じ動作をするわけではありません。 CONNECTIVITY_ACTION ブロードキャストと全く同じ動作を提供するわけではありません。

私のAndroidアプリケーションでは、デバイスのネットワークの状態を知るために、このブロードキャストを使用していました。私は、この状態が CONNECTING なのか、それとも CONNECTED の助けを借りて CONNECTIVITY_ACTION を放送し、それは私の要件に最も適していました。

現在では非推奨となっていますが、現在のネットワークの状態を取得するための代替方法をどなたか教えていただけませんか?

どのように解決するのですか?

非推奨となるのは、バックグラウンドで動作するアプリケーションがネットワーク接続の状態変化を受け取る機能です。

として David Wasser が言ったように、アプリコンポーネントがインスタンス化され (破棄されない)、かつ プログラムによって受信者を登録した場合 マニフェストで行うのではなく、そのコンテキストでプログラム的にレシーバーを登録します。

または ネットワーク コールバック を代わりに使用することもできます。特に onAvailable をオーバーライドする必要があります。

早速、スニペットを起草してみます。

public class ConnectionStateMonitor extends NetworkCallback {

   final NetworkRequest networkRequest;

   public ConnectionStateMonitor() {
       networkRequest = new NetworkRequest.Builder()
           .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
           .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
           .build();
   }

   public void enable(Context context) {
       ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
       connectivityManager.registerNetworkCallback(networkRequest, this);
   }

   // Likewise, you can have a disable method that simply calls ConnectivityManager.unregisterNetworkCallback(NetworkCallback) too.

   @Override
   public void onAvailable(Network network) {
       // Do what you need to do here
   }
}