Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ネットワークの切り替えを
感知する方法
potatotips #27 (Android)
ヤマグチケイスケ
自己紹介
• 名前:ヤマグチケイスケ
• Github: ykeisuke
• Qiita: YKEI_mrn
• MAIL: yamagutikeisuke@gmail.com
• 職業:フリーランス
– 出向中:(株)アスクリード
– 出来...
条件
• Android5.0以上
目的
• Androidが使っているネットワークの切り替え
を感知することが目的。
• 例えば、WiFi通信からCellular通信に変わった
時とか。
実装(概要)
• Android5.0(APIレベル21)から実装されている、
NetworkRequest.Builderクラスを利用する。
– reference:
https://developer.android.com/intl/ja...
実装(詳細):1
this.cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder reqBuilder...
実装(詳細):2
this.cm.registerNetworkCallback(reqBuilder.build(),
new ConnectivityManager.NetworkCallback() {
private String TA...
簡単
TIPS1
『関係のあるイベントのみ感知したい。』
例えば、WANに繋がるCellular通信の場合のみとか
NetworkRequest.Builder reqBuilder = new NetworkRequest.Builder();
r...
TIPS2
『「addCapability」と「addTransportType」で何が
追加できるのか?』
• 「NetworkCapabilities」で追加できるものは全
部追加できる。
– https://developer.andro...
TIPS3(1)
『どのようなイベントで処理を発火できるか』
• 「ConnectivityManager.NetworkCallback」クラ
ス(API21〜)で定義されている メソッドを使え
る
• この点がAPI21から新たに増えてる(...
TIPS3(2)
• onAvailable
– 準備が出来たとき
• onCapabilitiesChanged
– 接続完了し、ネットワークが変わったあと
• onLinkPropertiesChanged
– LinkProperties...
ネットワークの切り替えを感知する方法
Upcoming SlideShare
Loading in …5
×

ネットワークの切り替えを感知する方法

2,685 views

Published on

potatotips #27 発表資料。

Published in: Mobile
  • Be the first to comment

ネットワークの切り替えを感知する方法

  1. 1. ネットワークの切り替えを 感知する方法 potatotips #27 (Android) ヤマグチケイスケ
  2. 2. 自己紹介 • 名前:ヤマグチケイスケ • Github: ykeisuke • Qiita: YKEI_mrn • MAIL: yamagutikeisuke@gmail.com • 職業:フリーランス – 出向中:(株)アスクリード – 出来る事 • サーバー立てる。 • サーバー側でWebAPI書く。 • WebAPIを使ったAndroidアプリ書く • LPつくる • CakePHP/Android/iOS • Illustratorもできる。
  3. 3. 条件 • Android5.0以上
  4. 4. 目的 • Androidが使っているネットワークの切り替え を感知することが目的。 • 例えば、WiFi通信からCellular通信に変わった 時とか。
  5. 5. 実装(概要) • Android5.0(APIレベル21)から実装されている、 NetworkRequest.Builderクラスを利用する。 – reference: https://developer.android.com/intl/ja/reference/a ndroid/net/NetworkRequest.Builder.html
  6. 6. 実装(詳細):1 this.cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder reqBuilder = new NetworkRequest.Builder(); • ConnectivityManagerを作成し、 NetworkRequest.Builderを用意する。
  7. 7. 実装(詳細):2 this.cm.registerNetworkCallback(reqBuilder.build(), new ConnectivityManager.NetworkCallback() { private String TAG = “CM”; @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { Log.d(TAG, “onCapabilities networkCapabilities : ” + networkCapabilities.toString() + “, network : ” + network.toString()); } // (略) • イベント通知を受け取る
  8. 8. 簡単
  9. 9. TIPS1 『関係のあるイベントのみ感知したい。』 例えば、WANに繋がるCellular通信の場合のみとか NetworkRequest.Builder reqBuilder = new NetworkRequest.Builder(); reqBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); reqBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); • 「new NetworkRequest.Builder」に、「addCapability」と、 「addTransportType」で追加すればよい。
  10. 10. TIPS2 『「addCapability」と「addTransportType」で何が 追加できるのか?』 • 「NetworkCapabilities」で追加できるものは全 部追加できる。 – https://developer.android.com/intl/ja/reference/andr oid/net/NetworkCapabilities.html • 例えば、「Cellular通信のみ」や「WiFi通信のみ」 「VPNではない時」など
  11. 11. TIPS3(1) 『どのようなイベントで処理を発火できるか』 • 「ConnectivityManager.NetworkCallback」クラ ス(API21〜)で定義されている メソッドを使え る • この点がAPI21から新たに増えてる(?) – 調べ切れていない。
  12. 12. TIPS3(2) • onAvailable – 準備が出来たとき • onCapabilitiesChanged – 接続完了し、ネットワークが変わったあと • onLinkPropertiesChanged – LinkPropertiesが変わったあと • onLosing – 接続を失ったとき(失ってる時!) • onLost – 接続を失ったとき(完全に、接続が切れたとき!) • (onLosingとonLostの違いは瞬断対策のようです)

×