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

Más contenido relacionado

La actualidad más candente

エンタープライズITでのOpenID Connect利用ガイドライン
エンタープライズITでのOpenID Connect利用ガイドラインエンタープライズITでのOpenID Connect利用ガイドライン
エンタープライズITでのOpenID Connect利用ガイドライン
Tatsuo Kudo
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
nagise
 
디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서
디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서
디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서
SANGHEE SHIN
 

La actualidad más candente (20)

エンタープライズITでのOpenID Connect利用ガイドライン
エンタープライズITでのOpenID Connect利用ガイドラインエンタープライズITでのOpenID Connect利用ガイドライン
エンタープライズITでのOpenID Connect利用ガイドライン
 
Spring native について
Spring native についてSpring native について
Spring native について
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
LINE Login総復習
LINE Login総復習LINE Login総復習
LINE Login総復習
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서
디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서
디지털 트윈(Digital Twin) - 도시와 공간정보 관점에서
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみてアプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
 
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱いRails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定
 
Node-REDのworldmapの活用
Node-REDのworldmapの活用Node-REDのworldmapの活用
Node-REDのworldmapの活用
 

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

【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
Developers Summit
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
Yushi_Takagi
 
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
takeuchi-tk
 
20140404 vyatta users Group / REST API解説
20140404 vyatta users Group / REST API解説20140404 vyatta users Group / REST API解説
20140404 vyatta users Group / REST API解説
Yukihiro Kikuchi
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
Etsuji Nakai
 

Similar a ネットワークの切り替えを感知する方法 (20)

Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
Gaming cicd-pipeline gaming-technight-2
Gaming cicd-pipeline gaming-technight-2Gaming cicd-pipeline gaming-technight-2
Gaming cicd-pipeline gaming-technight-2
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
SORACOM Conference "Discovery" 2018 | F3. SORACOMで実現する “Intranet” Of Things バ...
SORACOM Conference "Discovery" 2018 | F3. SORACOMで実現する “Intranet” Of Things バ...SORACOM Conference "Discovery" 2018 | F3. SORACOMで実現する “Intranet” Of Things バ...
SORACOM Conference "Discovery" 2018 | F3. SORACOMで実現する “Intranet” Of Things バ...
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmalt
 
マイクロソフトの提供するMA6向けAPIのご紹介
マイクロソフトの提供するMA6向けAPIのご紹介マイクロソフトの提供するMA6向けAPIのご紹介
マイクロソフトの提供するMA6向けAPIのご紹介
 
Bluemixの概要とアプリの作り方
Bluemixの概要とアプリの作り方Bluemixの概要とアプリの作り方
Bluemixの概要とアプリの作り方
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
 
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
 
20140404 vyatta users Group / REST API解説
20140404 vyatta users Group / REST API解説20140404 vyatta users Group / REST API解説
20140404 vyatta users Group / REST API解説
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
20170705 apiをつくろう
20170705 apiをつくろう20170705 apiをつくろう
20170705 apiをつくろう
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf
 
Introduction to NetOpsCoding
Introduction to NetOpsCodingIntroduction to NetOpsCoding
Introduction to NetOpsCoding
 

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

Notas del editor

  1. 自己紹介、 ・アスクリードではWEBを中心に、色々やらせてもらってます。 ・地方創生を掲げている会社です。 ・水谷さんが作ったGoライブラリをサンプルでiOS側で使ったりしました。  →HTTPリクエストをしないやつですが。
  2. クライアントからの良い、要望をいただき、Android5(APIレベル21以上!)にしてもらいました!!!