SlideShare a Scribd company logo
ネットワークの切り替えを
感知する方法
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の違いは瞬断対策のようです)
ネットワークの切り替えを感知する方法

More Related Content

What's hot

M04_失敗しないための Azure Virtual Desktop 設計ガイド
M04_失敗しないための Azure Virtual Desktop 設計ガイドM04_失敗しないための Azure Virtual Desktop 設計ガイド
M04_失敗しないための Azure Virtual Desktop 設計ガイド
日本マイクロソフト株式会社
 
pfSense Firewall ve Router Eğitimi
pfSense Firewall ve Router EğitimipfSense Firewall ve Router Eğitimi
pfSense Firewall ve Router Eğitimi
BGA Cyber Security
 

What's hot (20)

M04_失敗しないための Azure Virtual Desktop 設計ガイド
M04_失敗しないための Azure Virtual Desktop 設計ガイドM04_失敗しないための Azure Virtual Desktop 設計ガイド
M04_失敗しないための Azure Virtual Desktop 設計ガイド
 
pfSense Firewall ve Router Eğitimi
pfSense Firewall ve Router EğitimipfSense Firewall ve Router Eğitimi
pfSense Firewall ve Router Eğitimi
 
Log Yönetimi ve Saldırı Analizi Eğitimi - 2
Log Yönetimi ve Saldırı Analizi Eğitimi - 2Log Yönetimi ve Saldırı Analizi Eğitimi - 2
Log Yönetimi ve Saldırı Analizi Eğitimi - 2
 
FIDO Certification Update (Korean Language)
FIDO Certification Update (Korean Language)FIDO Certification Update (Korean Language)
FIDO Certification Update (Korean Language)
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
 
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
 
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
 
Siber Güvenlik Yaz Kampı'17 Soruları
Siber Güvenlik Yaz Kampı'17 SorularıSiber Güvenlik Yaz Kampı'17 Soruları
Siber Güvenlik Yaz Kampı'17 Soruları
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
 
Open Source Soc Araçları Eğitimi 2020-II
Open Source Soc Araçları Eğitimi 2020-IIOpen Source Soc Araçları Eğitimi 2020-II
Open Source Soc Araçları Eğitimi 2020-II
 
Ssh brute force saldırıları
Ssh brute force saldırılarıSsh brute force saldırıları
Ssh brute force saldırıları
 
WannaCry - NotPetya Olayları
WannaCry - NotPetya OlaylarıWannaCry - NotPetya Olayları
WannaCry - NotPetya Olayları
 
Microsoft Project Online 活用ガイド
Microsoft Project Online 活用ガイドMicrosoft Project Online 活用ガイド
Microsoft Project Online 活用ガイド
 
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimiBeyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
 
LLMNR ve NetBIOS Poisoning
LLMNR ve NetBIOS PoisoningLLMNR ve NetBIOS Poisoning
LLMNR ve NetBIOS Poisoning
 
Nsx t alb-integration_202108
Nsx t alb-integration_202108Nsx t alb-integration_202108
Nsx t alb-integration_202108
 
「開けゴマ!」からYubiKeyへ
「開けゴマ!」からYubiKeyへ「開けゴマ!」からYubiKeyへ
「開けゴマ!」からYubiKeyへ
 
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 

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

【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 to ネットワークの切り替えを感知する方法 (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
 

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

Editor's Notes

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