電話の状態をモニタリング
Monitoring the State of the Phone
Androidデバイス上の電話は、通常3つの状態の内の1つになります。
●アイドル状態(idle)
デバイスが送受話をしていない状態。
●受信状態(ringing)
電話が鳴っている状態。
●受話状態(off hook)
ユーザが電話に出ている状態。
この電話の状態をモニタリングする能力は、
開発者に興味深いアプリケーションを書けるようにしてくれます。
例えばもし、運転中に電話がなったとしたら、
電話をかけてきた人にSMSメッセージを送り、
今忙しくて、電話に出られないことを通知するようにしたいでしょう。
ここでは電話の状態をどのようにモニタリングするのかを示します。
電話の状態が変化したのをモニタするには、
PhoneStateListener基底クラスを拡張したクラスを
作る必要があります。
package net.learn2develop.phone;
import android.content.Context;
import android.telephoney.PhoneStateListener;
import android.telephoney.TelephonyManager;
import android.widget.Toast;
public class PhoneReceiver extends PhoneStateListener{
Context context;
public PhoneReceiver(Context context){
this.context = context;
}
@Override
public void onCallStateChanged(int state,
String incomingNumber){
super.onCallStateChanged(state, incomingNumber);
Toast.makeText(context, "onCallStateChanged state" +
state + "incomingNumber=" L incomingNumber,
Toast.LENGTH_LONG).show();
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Toast.makeText(context, "idle", Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
Toast.makeText(context, "ringing", Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(context, "offhook", Toast.LENGTH_LONG).show();
break;
}
}
}
Context引数をとるこのクラスのためのコンストラクタです。
onCallStateChanged()メソッドを無効にすることで、
結果、電話が鳴る・ユーザが電話に出る・通話が終わるなど
電話の状態が変わったときに、この変化を処理することができます。
上にあるコードの例では、
単純にメッセージを表示するために、Toastクラスを使っています。
さらに重要なのは、発信者の電話番号を取得できること。
おそらく、SMSメッセージ送るためなどですが。
電話の状態の変化のお知らせをさせるためには、
開発者はまずTelephonyManagerクラスとPhoneReceiverクラスの
インスタンスを作る必要があります。
package net.learn2develop.phone;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
public class MainActivity extends Activity{
TelephonyManager manager;
PhoneReceiver myPhoneStateListener;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myPhoneStateListener = new PhoneReceiver(this);
manager = ((TelephonyManager) getSystemService(Context,
TELEPHONY_SERVICE));
}
}
onResume()メソッドでは、TelephonyManagerクラスの
listen()メソッドを使って変化に傾聴し始められます。
PhoneReceiverクラスのインスタンスと同じように、
LISTEN_CALL_STATE定数にlisten()メソッドを渡します。
import android.telephony.PhoneStateListener;
....
@Override
public void onResume(){
super.onResume();
manager.listen(myPhoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE);
}
onPause()メソッドでは、開発者が同じlisten()メソッドと
LISTEN_NONE定数を使ってリスナーを削除することができます。
@Override
public void onPause(){
super.onPause();
manager.listen(myPhoneStateListener,PhoneStateListener.LISTEN_NONE);
}
最後に、AndroidManifest.xmlファイルにREAD_PHONE_STATE許可を
加える必要があります。
<uses-permission
android:name="android.permission.READ_PHONE_STATE" />
ちょっと注釈
アクティビティをバックグラウンドに送ったときには、
onPause()イベントにあるlistenerを未登録にしておきます。
その他、アクティビティがフォアグラウンドに返ってきたときには、
アクティビティはサイドlistenerを登録します。
もし、登録したら、onCallStateChangedが何度が呼び出されます。
|
【用語解説】
XML
HTMLと同じような言語ですが、
すべての型の複雑なデータ構造を
送信するための設計ができる
ファイル型式。
オブジェクト
ある手続きを持った
データアイテムで、
他の手続きと関連づけされるもの
metaタグ
ウェブページに与える
情報の宣言につかわれ
検索エンジン・ウェブアプリ
などにウェブページの内容を
伝える役目をする。
metaタグの内容は
ページ内に表示されない。
コンストラクタ
オブジェクト指向
プログラミングで使われ
新しいオブジェクトが
作られ時に呼び出される
メソッドのこと。
クラス
オブジェクト指向
プログラミングでの
オブジェクトの型
オブジェクト指向プログラミング
プログラミングの
方式のことで、
プログラマはデータ型を
定義できるだけでなく
自動的にデータ型と
メソッドを関連付け
できる
アクティビティ
Androidにおける
アクティビティは
Androidアプリの画面に
相当するもの
ボタンやウェブページ
など表示されている
すべてのもののこと。
view
Androidのアプリを開発する
上で使う部品のことで、
トリガボタン・イメージボタン
チェックボックスなどのこと。
UI
ユーザインターフェースのこと。
Bind(バインド)
シンボルとデータを
関連させるため
または、データの一片と
他のものを関連させること。
以下は例。
・変数に値を入れる。
(変数の初期化)
・特定のEthernetポートと
ネットワークプロトコルを
関連付けする。
・Javaの変数のセット上に
XML文書を配置すること。
または、ほかの
プログラミング言語でも。
|