7

放送受信機の廃止予定に関する警告が表示されています。 CONNECTIVITY_CHANGEはAndroid Nターゲットの対象外です

<!-- NETWORK RECEIVER... --> 
<receiver android:name=".utils.NetworkUtils" > 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

WARNING

:android.net.conn.CONNECTIVITY_CHANGE ためbroadcastreceiverを宣言

はNと高をターゲットアプリケーションのために推奨されていません。一般に、アプリケーションは はこのブロードキャストに依存せず、代わりにJobSchedulerまたは GCMNetworkManagerを使用する必要があります。

廃止予定のメソッドを使用しないで他の方法がありますか?

答えて

1

Googleの公式助言は、JobSchedulerに切り替えることです。このAPIはAPIレベル21以上からしか利用できないため、古いデバイスでは使用できません。

幸いにも、Evernoteのからの人々は、その後方互換バージョンを作成します。https://github.com/evernote/android-job

0

警告は、ジョブスケジューラを使用する必要が手がかりを含んでいるようです。ここでの目的は、アプリケーションが接続を受け取ったときに実行したいアクションに関する意図をシステムに伝達しないことです。ジョブスケジューラは、明らかにこれらの問題を回避し、アンドロイドが要求をバッチして延期することを許可します。

ジョブスケジューラはAndroid 5.0以降でしか使用できないため、両方の作業を実装する必要があります。おそらく、ジョブスケジューラのネイティブ実装に切り替えるライブラリanother answerを使用することができます。

7

私は同じ問題を抱えていました。そのようなことをしました。それは私のために働いた、私はそれが助けて欲しい。

public class NewActivity extends AppCompatActivity { 
    final static String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; 
    IntentFilter intentFilter; 
    MyReceiver receiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_new); 

     intentFilter = new IntentFilter(); 
     intentFilter.addAction(CONNECTIVITY_ACTION); 
     receiver = new MyReceiver(); 

     if(checkForInternet()){ 
      loadData(); 
     }else{ 
      updateUI(); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     registerReceiver(receiver, intentFilter); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unregisterReceiver(receiver); 
    } 

    // Self explanatory method 
    public boolean checkForInternet() { 
     ConnectivityManager cm = 
       (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     return activeNetwork != null && 
       activeNetwork.isConnectedOrConnecting(); 
    } 

    void loadData(){ 
     // do sth 
    } 

    void updateUI(){ 
     // No internet connection, update the ui and warn the user 
    } 


    private class MyReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      String actionOfIntent = intent.getAction(); 
      boolean isConnected = checkForInternet(); 
      if(actionOfIntent.equals(CONNECTIVITY_ACTION)){ 
       if(isConnected){ 
        loadData(); 
       }else{ 
        updateUI(); 
       } 
      } 
     } 
    } 
} 

受信者をマニフェストに追加しないでください。このアクティビティにのみ存在するようにしてください。

+2

ありがとうございました。 'final static String CONNECTIVITY_ACTION'はすでに' android.net.ConnectivityManager'クラスに存在します。 'onCreate()'では 'if(checkForInternet()){loadData();}を書くこともできません。これはBroadcastReceiverから即座に呼び出されるためです。 – CoolMind

+0

貢献してくれてありがとう。 –

+0

このアプリは強制終了しても機能しますか? – Priya

関連する問題