PhoneStateListenerの作成 03
前回PhoneStateListenerをつかって、着信状態に応じてToast表示する方法を実装しました。
今回はMainActivity.javaは省略して、PhoneReceiver.javaをこのように実装しなおしました。
PhoneReceiver.java
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;
public class PhoneReceiver extends PhoneStateListener {
private Context context;
PhoneReceiver(Context context) {
this.context = context;
}
// 通話状態の変化に応じて表示を変更する
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
// 着信時の処理内容
case TelephonyManager.CALL_STATE_RINGING:
Cursor addressTable = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (addressTable != null) {
while (addressTable.moveToNext()) {
String phoneNumber = addressTable.getString(addressTable.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (PhoneNumberUtils.compare(phoneNumber, incomingNumber)) {
Toast.makeText(context, "OK!" + incomingNumber, Toast.LENGTH_LONG).show();
}
}
addressTable.close();
}
break;
// 通話時の処理内容
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(context, "通話中!!" + incomingNumber, Toast.LENGTH_LONG).show();
break;
}
}
}
実は更新をしていなかった間に、色々変更に変更を重ねて、このかたちになりました。
当初、ContentResolverを用いて、データを抽出する作業をしていましたが、問題はデータの保存でして。
SQLite、realmで保存方法を試行錯誤しましたが、どうしても納得できるかたちにできず。
最終的に、Stack Overflowを参考にすると、PhoneNumberUtilsという便利なAPIを見つけることができました。
日本語の解説がほぼなかったので、見つけるのに難儀しました。