パケ代節約

このページ、docomo ユーザー限定かも…


僕は Android 購入以前、携帯電話をあまり活用していませんでした。

フリープログラマーなのでほぼ家にいるし(お仕事待ってます)、外出時に「これから帰る」とメールする程度。


月額780円。基本料のみですね。


docomoではメールは無料だし、家族間の通話も基本無料です。

時折 i-mode で「行きたい店の予約」を入れたりするけど、これも月額の無料範囲内。


スマホなんて買ってしまうと、簡単に月額5千円近く行ってしまうので買わないぞ、と誓っていました。


でも、携帯が壊れた。買いなおそうと思ったら、すでに i-mode に選択できるような機種がなかった。

…と言うわけで強制的にスマホに移行。

パケット節約生活

通知領域通信開始通信終了メール送信WiFi との兼ね合い

実際のプログラム




パケット節約生活


さて、ここからが本題。

いままでの月額780円生活を維持するにはどうすればよいのでしょう?


前提条件として、「月額780円」とはいっても、本体代金の割賦である、月額2100円は発生しています。

そして、この割賦額は全部「2段階定額」プランの最低料金として組み入れられています。

(いわゆる、「実質0円販売」ですね)


というわけで、わずかなパケットは発生しても構いません。月 5M Byte までね。

そして、SPモードメールはこのカウントに含まれません。



簡単に言えば、すべての通信をオフにすればよいのです。

それでも、「SPモードメールが届いた」という通知だけはきます。


この通知に気づいたら、手動でモバイルデータ通信をオンにして、メールを取得して、モバイルデータ通信をオフにすればよい。

このとき、間違っても自動同期がオンになっていないように注意すること。


…面倒くさいです。

しかも、SPモードメールが届いた、と言う通知は、音も振動も出してくれないのです。




通知領域


Llama は、通知領域に特定のアプリが通知を出した、という状況を認識します。


通知領域の読み取りは、「ユーザー補助」の一環です。

だから、Llama にユーザー補助の権限を与えなくてはなりません。


Android の設定から、ユーザー補助に入り、Llama にチェックを入れてください。(他にユーザー補助アプリがない場合は、まず「ユーザー補助」にチェックを入れること。ユーザー補助機能を使うことにしないと、Llamaにチェックできない)



これで、通知領域にSPモードメールが「メールが届いています」と通知を出したことを認識できます。これは、データ通信ではなくて「電話の制御信号」で伝えられますから。

あとは、音と振動で知らせるだけ。


そうしたら、僕は手動でモバイルデータ通信をオンにして、メールを取得して、モバイルデータ通信をオフにするわけです。

面倒くさいけど、まずは第一歩の完成。





通信開始


そもそも、i-mode ではどうなっていたんでしょう?


i-mode は、常時通信はしていませんでした。

i-mode 通信が開始されるのは、メールの送受信が行われるときだけ。そして、送受信後しばらくたつと、通信は終了しました。


すでに旧携帯は使えないので記憶のみで書きますが、i-modeメールの到着通知がきた場合、すぐに「メール問い合わせ中」状態になります。

一方で、i-mode 通信を開始します。問い合わせ中に i-mode 通信のネットワークに接続が完了すると、そこからメールのダウンロードが行われます。

電波状態が悪いなどの理由で通信に失敗していると、問い合わせは 30秒程度続きます。



SPモードメールの動作を見ると、やはり到着通知がきた場合、「メール問い合わせ」を開始します。

モバイルデータもWiFi も接続していない場合、30秒ほどでタイムアウトします。


どうも、メーラーの側としては同じ仕組みで動いているようです。

あとは、着信時の「通信開始」さえ作れれば…



というわけで、Llama でこの仕組みを再現します。


仕組みは簡単、先ほど「着信したら音を鳴らす」としましたが、代わりにモバイルデータ通信をオンにするだけです。

このとき、念のために自動同期もオフにしておきます。




通信終了


メール問い合わせは、1分もかからず完了するでしょう。

だから、1分後には通信終了することにします。


着信して、モバイルデータオンのときに、「遅延イベント」を作ります。

遅延イベントは、その瞬間に「1回限り」のイベントを作成する方法です。実行されるとこのイベントは消えます。

(イベントタブを見ていると、作成されて、消えるのがわかります)


これで大丈夫…といいたいところですが、実はこの方法はうまく動きません。

1分以内に2通のメールが来ると、2回連続でイベントを作ろうとします。

ところが、同じ名前のイベントを作ろうとすることになるので、エラーとなるのです。


そこで、着信時に、Llama 変数をセットすることにします。

そして、この変数セットを条件として起動するイベントを作ります。


このイベントに、「遅延実行」の属性をつけます。

こちらは、遅延イベントとは違って、あらかじめ作成してあるイベントを、時間を置いて実行するだけ。

連続して2回実行されてもエラーにはなりません。




メール送信


メール送信のことも考えなくてはなりません。


理想を言えば送信した瞬間に通信をオンにしたいのですが、これは難しいので「SPモードメールが起動されたら」にします。

メールを送る前には、必ず起動されますから。


こちらは、SPモードメールが終了したり、画面がオフになったら1分後にデータ通信を終了します。

先に作った仕組みがあるので、変数をセットするだけです。


(終了ですぐオフにしないのは、送信ボタンを押したらすぐアプリを終了したり、画面をオフしてしまうかもしれないためです。)


画面がオフになったらデータ通信を終了するので、逆に画面がオンになったとき、SPモードメールが現在アプリであれば、データ通信をオンにするようにもしておきます。




WiFi との兼ね合い


いろいろと書いていますが、以上は「WiFi が使えないとき」の話です。

WiFi 接続中であれば、SPモードメールは WiFi 通信でメールを取得するでしょう。


…が、「メールがきました」通知は通知領域に出すので、このままではモバイルデータをオンにしてしまいます。

WiFi 接続時は、この動作を抑制するようにしておきましょう。


他の動作についても同様です。モバイルデータをオンにしなかったのであれば、オフも不要です。

そのため、オンにしたときには、変数に「モバイルデータをオンにしている」ことを保持しておきます。




次ページ: 実際のプログラム


1 2 次ページ

(ページ作成 2012-06-05)
(最終更新 2012-10-15)

前記事:状況が整うとき     戻る     次記事:関連アプリ
トップページへ

-- share --

4002

-- follow --




- Reverse Link -