最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 7.0 監(jiān)聽網(wǎng)絡(luò)變化的示例代碼

 更新時間:2018年03月22日 13:51:58   作者:xingjm8511  
這篇文章主要介紹了Android 7.0 監(jiān)聽網(wǎng)絡(luò)變化的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Android7.0前,Android系統(tǒng)前網(wǎng)絡(luò)切換時,會發(fā)廣播,業(yè)務(wù)只要監(jiān)聽廣播即可。

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();
    }
  }
}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.outman.example.androidtest">

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true">

    <activity android:name=".MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    <receiver android:name=".NetChangeReceiver">
      <intent-filter >
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
      </intent-filter>
    </receiver>
  </application>

</manifest>

上面代碼,在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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

普兰县| 来宾市| 巴林左旗| 社会| 安阳市| 平安县| 深水埗区| 苏尼特左旗| 商水县| 五华县| 廉江市| 宜州市| 天门市| 平定县| 治多县| 明溪县| 修水县| 聂拉木县| 哈密市| 米泉市| 咸阳市| 水城县| 延寿县| 大名县| 利辛县| 西和县| 安丘市| 平利县| 石景山区| 犍为县| 将乐县| 射阳县| 星座| 龙门县| 景谷| 萍乡市| 盐池县| 舒城县| 乳山市| 山阴县| 阳春市|