Android小話メモ(3) 通信可否
はじめに
自分用のTL参照メモ。
過去のアーカイブ
たぶんこのエントリは、検証後タイトルと中身変更しそうな気がする・・・
流石に職場で自垢でWebログインする勇気はないんだよな〜(苦笑
テスト用のアカウントではログインしてますが・・
TLメモ(通信が可能かどうか判定)
ACCESS_NETWORK_STATEパーミッション付与してConnectivityManagerからNetworkInfo取得してConnectivityManager.TYPE_MOBILEとかTYPE_WIFIとかのフラグが立ってるかどうかぐらいじゃだめ?
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
電波強度はパーミッション無くてもTelephonyManagerから取得できるんじゃ?LTEの電波ひろえる端末がAndroid7のNexus6pしかないのでAPIレベルが低いとどうかはわからないですが。でも電波があっても実際に繋がるかは通信してみないことにはわからないですねぇ。
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
twitter:899996827461632000:detail twitter:899999222929399809:detail6以降でパーミッションいらなくなったのは多分LISTEN_DATA_CONNECTION_STATEで、電波強度を取得するLISTEN_SIGNAL_STRENGTHSの方はパーミッションいらないです^^;末尾にSが付かないLISTEN_SIGNAL_STRENGTHは要りますが
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
そこまでは確かめたことないです🙇結局のところ繋ぐ先が決まってればインターネットへ接続出来そうかだけチェックしてから実際にチョコッと接続してみるほうが確実なので😅
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
twitter:900007638854901761:detail自分で作ってる分には接続かけてもUI重くなったりしないのでどこかでUIスレッドと干渉してる疑惑?
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
現在地取得って難しいですよねぇ😌電池食うし😣ブラウザを装ってGoogleのサイトで検索して返ってきたhtmlをパースして一番下にある現在地情報(アクセス履歴)を取得とかアホなことを試したことも😜同じアカウントで違う端末からアクセスするとワープしたりするのでだめでした(´・ω・`)
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
今もできるかどうかはわからないのと、苦労の割に実りがないので試さないほうがいいと思いますが😅
— さきちゃんの中の人、カピバラになりたい🐁 (@serenegiant) 2017年8月22日
3Gの接続モードは下記でチェックするのか・・奥が深いわ・・。ただそこまでするかはたしかに微妙な線かもhttps://t.co/UBMnZCwvWh
— close_yutori (@kimukou2628) 2017年8月22日
検証状況
一応 “Androidで電波圏外を判定する - プログラマー'sペイジ” のコードをベースにして書いてみました
API17以降だとLISTEN_CELL_INFOでリッスンして CellInfoの型チェック&キャストしてgetArfcn(GSM)またはgetEarfcn(LTE)で チャネル番号取得して対応バンドかどうか判定
<= API 16以下は rootとるかRefrectionで関数ほじくり出すイメージになるよう
ここら辺は力尽きましたorz。なかなか調べてスニペットベースでも書いてみるとキツイw。
通信系のプログラム書いている方凄く尊敬します