投稿

Android M preview 2 で自分のMACアドレスとBDアドレスが取得できない

先週、Android M preview のリビジョン2がリリースされました。 Support and Release Notes https://developer.android.com/preview/support.html Key changes の Remote Bluetooth/Wi-Fi MAC's now require either the   android.permission.LOCATION_FINE   or android.permission.LOCATION_COARSE   permission. が気になったので調べていたのですが、どうやらこのリリースノートは少し誤っているようです。 調べた結果を羅列すると、 Remote Bluetooth MAC (BT接続中の相手のBDアドレス) は Bluetooth 系の従来のパーミッションがあれば取得できる Remote Wi-Fi MAC が何なのかはよくわからないですが、接続先のMACアドレス?のことなら BSSID として取得できる 自分のMACアドレスとBDアドレスは取得できない  (固定の 02:00:00:00:00:00 が返ってくる) リリースノートにある、 android.permission.LOCATION_FINE と android.permission.LOCATION_COARSE は存在しない android.permission.ACCESS_FILE_LOCATION と android.permission.ACCESS_COARSE_LOCATION なら以前から存在するが、どちらをランタイムで取得しても自分のMACアドレスとBDアドレスは取得できない android.permission.LOCAL_MAC_ADDRESS というパーミッションがあるが、インストール時にもランタイムにも許可されない Issue トラッカーにも既に上がっていてステータスは Acknowledged です。 https://code.google.com/p/android-developer-preview/issues/detail?id=2427 Loca...

Lumia 535 Dual SIM を買った

イメージ
M8をWindows 10 mobileのテストデバイスに使用する予定なので、Windows Phone 8.1 キープ用に Lumia 535 を買いました。MS 印のついた非常に低価格($100 以下)の Lumia です。   日本では GSM を吹いているキャリアが無いので全く意味が無いですが、2つめのSIMスロットが用意されています。電話アプリとメッセージアプリも2つずつあります。 ディスプレイ解像度もかなり低くて見られたものではないのですが、一番低価格感を感じたのは裏ブタです。材質がペラペラのプラスチックで、安いスマートフォンケースみたいです。また形状からお察しの通り、外すときは画面全体に手をかけてひねるようにして開けます。何度か付け外ししたらディスプレイにヒビでも入るんじゃないかと心配です。  

Windows Runtime アプリでの Wi-Fi to Cellular handover

Windows 10 Mobile で、「Wi-Fi接続が制限されている時にモバイルデータ通信を使う」という設定が追加されていました。 Android でも Lollipop 以降の Nexus ではデフォルトで同等機能が有効(ベンダーのカスタマイズによって挙動が違ったりする最悪な状況ですが)だったりしますが、API Level 21 で追加された Network 関連クラスを使用することで、通信に使われるネットワークインタフェースをアプリからバインドすることができます。 Windows 8.1 までの Windows Runtime 既存APIで、Android と同じようにインタフェースのバインドができるのか調べてみました。 UDP Windows Runtime API では、UDP 通信に Windows.Networking.Sockets.DatagramSocket を使用します。 BindServiceNameAsync(String, NetworkAdapter) メソッドを使えば NetworkAdapter を直接バインドできます。 var filter = new ConnectionProfileFilter { IsConnected = true, IsWwanConnectionProfile = false, IsWlanConnectionProfile = true }; var profiles = await NetworkInformation.FindConnectionProfilesAsync(filter); foreach (var profile in profiles) { var socket = new DatagramSocket(); await socket.BindServiceNameAsync("", profile.NetworkAdapter); ... // というわけで、こちらはデフォルトのインタフェースが Cellular に変更されても問題なし。(バインドした通りに動いてくれるなら。) TCP 生のTCP 通信には Windows.Networking.Sockets.Str...

HTC One M9 を買った

イメージ
やっとGold on Gold 色が入荷してたので、HTC One M9を買いました。 iPhone みたいな感じのきれいな薄い金色です。 Nexus 5/6/7/9 以外の Lollipop は初めて触りますが、もうホームアプリ以外は Android 標準 UI とそんなに変わらない感じですね。各社がんばってた通知エリアでの設定値変更も Lollipop 標準 UI にかなり取り込まれてしまいましたし。 恐らくHTC独自なのがナビゲーションボタンのカスタマイズです。 「バック」「ホーム」「ヒストリー」の基本3つ以外に、「ナビゲーションバーを隠す」「クイック設定」などを追加できます。「ナビゲーションバーを隠す」は M8 にもありましたが、画面を広く使いたい時に便利な機能です。 若干不満なのが、言語設定を英語にすると日本語のフォントがフォールバックして中華フォントになることです。Nexus 6 は英語設定にしても日本語はモトヤLマルベリフォントだったのに。。。

Android の SharedPreferences データはオンメモリで保持されている

SharedPreferences 関連の不具合を調べていてAOSP のコードを見ていたら、 SharedPreferences の挙動について気づいたので Tips としてメモしておきます。 SharedPrefereces に保存した設定値は読み捨てでOK Androidアプリで設定等の小さいデータを保存するのに使用する SharedPreferences ですが、Android Framework 内では SharedPreferencesImpl   というクラスで実装されています。 SharedPreferencesImpl (Android 5.0.1) http://tools.oesf.biz/android-5.0.1_r1.0/xref/frameworks/base/core/java/android/app/SharedPreferencesImpl.java このクラスではコンストラクタでXMLファイルからデータを読み込み、 Map<String, Object>   で SharedPreferences の中身のデータを保持し続けています。 try { stat = Os.stat(mFile.getPath()); if (mFile.canRead()) { BufferedInputStream str = null; try { str = new BufferedInputStream( new FileInputStream(mFile), 16*1024); map = XmlUtils.readMapXml(str); } catch (XmlPullParserException e) { Log.w(TAG, "getSharedPreferences", e); } catch (FileNotFoundException e) { Log.w(TAG, "getSharedPreferences", e); ...

Nexus 6 の調子が悪い

Nexus 6 の調子が悪い。 週に一回くらいポケット内で再起動。(たまになら許す) 再起動後に PIN 入力求められるが、ポケット内なのでタイムアウトしてシャットダウン。(これは仕様) 再起動後に30分くらいモバイルネットワーク(docomo)を掴まない。 掴んだと思ったら IP アドレスが取得できずデータ通信ができない。 IP アドレスが振られたと思ったら LTE ではなく HSDPA。 一日後くらいにふと気づくと LTE 掴んでる。 掴んでもしばらくすると見失うことがある。 アンテナピクトに H も LTE も表示されてないのにデータ通信できる時がある。(これは表示バグなのでどうでもよい) とりあえずファクトリーリセットしました。 Tap & Go 便利。 はやく Lollipop MR1 降ってきて。 追記 2015/03/04 コメント欄で指摘していただいたとおり、不要なAPN設定を削除することでモバイルネットワークの安定性が劇的に改善するようです。

Nexus 6 XT1100 買った

イメージ
いつまで待っても Google Play の在庫が復活しないので、Y! mobile で Nexus 6 を買いました。 キャンペーンも特にやってないので、定価の完全新規でベーシックプランS契約しました。 ポイントのつく量販店で買って、即解約すれば日割り支払いで済むので、契約手数料を含めても Google Play で買う場合より出費は少ないです。さっさと買ってればよかった。(・・・Yモバブラックになる可能性は高いですが) サイズのわりにそれほど持ちにくくないですが、片手で使うには少し修行が必要ですね。 背面が金属なので持った感触がサラサラしててとても良いです。 Nexus 5 に引き続き、Qi で充電できるのも地味に便利です。