MVNOなSIMを入手した結果Androidアプリを書くことに
- 2014/08/29
- #Android
- #Xperia arc
- #Xperia 2011
みょん.
タイトル通り, 今までのWiMAXの代わりとしてBIGLOBEのデータ通信3G/LTESIMを契約しました.
いろいろ迷いましたが, 数年前のように外出先で数十GBのデータをやり取りする機会も無くなりましたし大丈夫かなと思っています.
手続きをしたのは7月末でしたが, 旅行とお盆休み, そして書類の不備等があって時間がかかりましたが, 何とか夏休み中に届いてよかったなぁって感じです.
とりあえず
何気にLTE対応nanoSIMにしました(LTE, nanoSIM共に対応端末持ってないくせに).
まぁいずれLTE対応端末が欲しいなぁと思っているのでこうしました. ちなみに同社には200yen/monthの3G専用SIM等もあります.
ということで, 別で購入していたSIMアダプタを使いXperiaRayに挿してみたところ問題なく認識しました.
でもSoftBank SIMも使えないと困るよね
しかし, 僕は諸事情で別でSoftBankの銀SIMを使っています. 電話なんて滅多に掛けませんし掛かってきませんが, 無いなら無いで面倒なので仕方がないです.
そういえばタッチパネルが逝ったArcがあったなぁ… ん???
Arcをモバイルルータ化すればよくね???
ってことで.
タッチパネルが逝って操作できなくなったXperiaArcにデータ通信用SIMを差すじゃろ? pic.twitter.com/jKkIvMk3Yr
— とさいぬ (@myon\_\_\_) August 29, 2014
キーボードとマウスで操作して・・・ pic.twitter.com/SYd46CPaEW
— とさいぬ (@myon\_\_\_) August 29, 2014
こうじゃ pic.twitter.com/Vo5gTzf7YP
— とさいぬ (@myon\_\_\_) August 29, 2014
こんな感じで問題なくテザリングできました. 便利ですね.
速度を実際に測ったわけではありませんが, 思ったよりは快適な感じです.
自宅無線LANと大差ないかもしれない(´・_・`)
ちなみに, ROMはLegacyXperiaのCM10.2を利用しました.
軽量だということからCM7.2も検討したのですが, Androidが標準で搭載してきたData usageが使いたかったのと, 最近のアプリ対応状況などからこうしました.
また, バックグラウンドでの通信を最小限にしたいことなどからGoogle Playを始めとするgappsも入れず, ネットワーク関係のプリインを片っ端から無効化してこんな感じにしました.
でもでもタッチパネル逝った携帯をどうやって使うのさ?
とはいえキーボードとマウスがないと操作できないルーターは不便すぎますね.
ってことでXperia2011の物理ボタンを有効活用できる感じのテザリングON/OFFアプリがないかな〜と探したのですがいい感じのものは見当たらず…
仕方がないので簡単なAndroidアプリを書くことにしました.
Tosainu / ToggleTether — Bitbucket
toggleTether-release.apk
起動するとWifiテザリングが有効か無効かを確認し, 有効だったら無効に, 無効だったら有効にするだけのアプリです.
Homeアプリの設定で “メニューボタン長押し” でこれが起動するようにすると幸せになれました.
また, タッチパネルが逝ってるせいで画面ロックも解除できないので横のカメラボタンで解除できるように設定したほか, ホームボタンでData usageが表示されるように設定しました.
初Androidアプリでハマったこととか
IDE使いたくない!
これからガツガツAndroidアプリ書くわけでもないのに, EclipseInstallBattleだとか言われるような(多分)巨大なIDEを入れるのは何ともめんどくさいです. (今の流行はAndroidStudioかな?)
とはいえAndroidアプリ開発に外部のIDEは必須ではなく, コマンドラインから一発でプロジェクトが作成できるようです.
$ android create project -n ProjectName \
-t TargetID \
-p ./ProjectDirectory \
-k packageName \
-a DefaultActivityName
TargetIDにはAPI Levelを入れるのかな〜と思ったのですがそうではなく, $ android list targets
で表示される中から選ぶみたいです.
アプリのビルドにはant
コマンドを使います. makeみたいな感じですね. Arch Linuxではapache-ant
パッケージです.
// デバッグ用
$ ant debug
// リリース用
$ ant release
変数宣言時に必ず初期化しないといけない?
こんな感じのコードを書くと…
import android.widget.Toast;
String s;
s = "みょーん";
Toast.makeText(this, s, Toast.LENGTH_LONG).show();
怒られます.
-compile:
[javac] Compiling 1 source file to /hoge/fuga/bin/classes
[javac] /hoge/fuga/src/info/myon/toggleTether/Main.java:7: error: variable s might not have been initialized
[javac] Toast.makeText(this, s, Toast.LENGTH_LONG).show();
[javac] ^
[javac] 1 error
BUILD FAILED
String s = "みょーん";
みたいに宣言時に初期化しないといけないみたい(たぶん)
Activity Lifecycle
Activityには幾つかの状態があって, それぞれの状態に合わせてonCreate(Bundle savedInstanceState)
だとかonResume()
だとかのメソッドが呼び出されるらしい.
最初, 作成されたテンプレートに合わせてonCreate()
にいろいろ命令を書いていたのだが, アプリの最初の起動ではうまく動作するものの2回目以降はうまく動作しなかった.
それもそのはず, onCreate()
はActivityが開始された時に呼び出されるメソッドである.
そして, Androidアプリは大抵の場合閉じてもすぐに終了されないので, 2回目以降はonCreate()
が呼び出されること無く最後に起動した時の状態が復元されてしまう.
ということで, Activityが再開した時にも呼び出されるonResume()
メソッドをオーバーライドしてこのように記述した.
public class Main extends Activity {
@Override
public void onResume() {
// なんか処理
this.finish();
}
}
権限の追加
AndroidManifest.xml
に,
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.myon.toggleTether"
android:versionCode="1"
android:versionName="1.0">
<!-- こんな感じに -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
参考にしたサイト等
- Activity | Android Developers
- テザリング - WifiManagerメモ - Qiita
- ITメモ: Android テザリング設定アプリを作る
- [Android]Activityを非表示にする | DevAchieve
- アクティビティ、アプリの終了方法 - 戌印-INUJIRUSHI- (Androidあれこれ) -
- トースト(Toast)を使用するには - 逆引きAndroid入門
- OSX - Eclipseを使わないAndroidアプリ開発 - Qiita
- Androidアプリの署名をantでやってみる - Labo Memo
わかりやすい解説をありがとうございました.
AndroidアプリどころかJavaすら書いたことない僕ですがなんとかなりました.