真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在Android7.0中監(jiān)聽網(wǎng)絡(luò)的變化-創(chuàng)新互聯(lián)

如何在Android 7.0中監(jiān)聽網(wǎng)絡(luò)的變化?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

在合川等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計、做網(wǎng)站 網(wǎng)站設(shè)計制作按需網(wǎng)站策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),合川網(wǎng)站建設(shè)費用合理。
public class NetChangeReceiver extends BroadcastReceiver {

  private static final String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";

  @Override
  public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equalsIgnoreCase(ANDROID_NET_CHANGE_ACTION)){
      Toast.makeText(context, "Net Changed", Toast.LENGTH_SHORT).show();
    }
  }
}



  
  
  
  

  

    
      
        
        
      
    

    
      
        
      
    
  

上面代碼,在Android7.0設(shè)備前,當(dāng)網(wǎng)絡(luò)切換時,能收到消息。而在Android7.0及以上設(shè)備,則無法收到。

Android7.0 行為變更上明確說明

Android 7.0 移除了三項隱式廣播,因為隱式廣播會在后臺頻繁啟動已注冊偵聽這些廣播的應(yīng)用。刪除這些廣播可以顯著提升設(shè)備性能和用戶體驗。

為緩解這些問題,Android 7.0 應(yīng)用了以下優(yōu)化措施:

面向 Android 7.0 開發(fā)的應(yīng)用不會收到 CONNECTIVITY_ACTION 廣播,即使它們已有清單條目來請求接受這些事件的通知。在前臺運行的應(yīng)用如果使用 BroadcastReceiver 請求接收通知,則仍可以在主線程中偵聽 CONNECTIVITY_CHANGE。
應(yīng)用無法發(fā)送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 廣播。此項優(yōu)化會影響所有應(yīng)用,而不僅僅是面向 Android 7.0 的應(yīng)用。

解決辦法

1. 大家都知道,注冊廣播有兩種方式,一種是在AndroidManifest.xml中,另一種通過register方法。

Android文檔中描述,通過在AndroidManifest.xml中注冊方式,App在前后臺都無法接收到廣播。而通過register的方式,當(dāng)App在運行時,是可以接收到廣播的。

Note: A BroadcastReceiver registered with Context.registerReceiver() continues to receive these broadcasts while the app is running.

public class MainActivity extends Activity {
  private NetChangeReceiver netChangeReceiver;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    netChangeReceiver = new NetChangeReceiver();
    registerReceiver(netChangeReceiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(netChangeReceiver);
  }
}

2. 提供了一種更穩(wěn)定的方式

Monitoring Network Connectivity While the App is Running
Apps that are running can still listen for CONNECTIVITY_CHANGE with a registered BroadcastReceiver. However, the ConnectivityManager API provides a more robust method to request a callback only when specified network conditions are met.

NetworkRequest objects define the parameters of the network callback in terms of NetworkCapabilities. You create NetworkRequest objects with the NetworkRequest.Builder class. registerNetworkCallback() then passes the NetworkRequest object to the system. When the network conditions are met, the app receives a callback to execute the onAvailable() method defined in its ConnectivityManager.NetworkCallback class.

The app continues to receive callbacks until either the app exits or it calls unregisterNetworkCallback().

public class MainActivity extends Activity {
  private ConnectivityManager.NetworkCallback networkCallback;
  private ConnectivityManager connectivityManager;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    networkCallback = new NetworkCallbackImpl();
    NetworkRequest.Builder builder = new NetworkRequest.Builder();
    NetworkRequest request = builder.build();
    connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    connectivityManager.registerNetworkCallback(request, networkCallback);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    connectivityManager.unregisterNetworkCallback(networkCallback);
  }
  private class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {
    @Override
    public void onAvailable(Network network) {
      super.onAvailable(network);
      Toast.makeText(getBaseContext(), "onAvailable", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLosing(Network network, int maxMsToLive) {
      super.onLosing(network, maxMsToLive);
      Toast.makeText(getBaseContext(), "onLosing", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLost(Network network) {
      super.onLost(network);
      Toast.makeText(getBaseContext(), "onLost", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
      super.onCapabilitiesChanged(network, networkCapabilities);
      Toast.makeText(getBaseContext(), "onCapabilitiesChanged", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
      super.onLinkPropertiesChanged(network, linkProperties);
      Toast.makeText(getBaseContext(), "onLinkPropertiesChanged", Toast.LENGTH_SHORT).show();
    }
  }
}

看完上述內(nèi)容,你們掌握如何在Android 7.0中監(jiān)聽網(wǎng)絡(luò)的變化的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)站名稱:如何在Android7.0中監(jiān)聽網(wǎng)絡(luò)的變化-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://weahome.cn/article/jcieg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部