Androidで着信があるときに電話番号を取得するにはどうすればよいですか?
5 に答える
マニフェストでそのアクションを割り当てますBroadcast receiver
。ServiceReceiver
<receiver android:name=".ServiceReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
着信番号パラメーターPhoneStateListener
でオーバーライドする TelephonyManager、PhoneStateListenerに a を追加します。onCallStateChanged()
それでおしまい。
ServiceReceiver.Java
public class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
System.out.println("incomingNumber : "+incomingNumber);
}
},PhoneStateListener.LISTEN_CALL_STATE);
}
}
これは間違いなくあなたを助けます。
これは、着信番号としての着信電話である場合、および電話が終了した場合にも電話番号を取得できるようにする実装です - Handler() コードに注意してください。
private class PhoneCallListener extends PhoneStateListener {
private boolean isPhoneCalling = false;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (TelephonyManager.CALL_STATE_RINGING == state) {
// phone ringing
Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
}
if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
// active
Log.i(LOG_TAG, "OFFHOOK");
isPhoneCalling = true;
}
if (TelephonyManager.CALL_STATE_IDLE == state) {
// run when class initial and phone call ended, need detect flag
// from CALL_STATE_OFFHOOK
Log.i(LOG_TAG, "IDLE number");
if (isPhoneCalling) {
Handler handler = new Handler();
//Put in delay because call log is not updated immediately when state changed
// The dialler takes a little bit of time to write to it 500ms seems to be enough
handler.postDelayed(new Runnable() {
@Override
public void run() {
// get start of cursor
Log.i("CallLogDetailsActivity", "Getting Log activity...");
String[] projection = new String[]{Calls.NUMBER};
Cursor cur = getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc");
cur.moveToFirst();
String lastCallnumber = cur.getString(0);
}
},500);
isPhoneCalling = false;
}
}
}
次に、onCreate または onStartCommand コードにリスナーを追加して初期化します。
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,
PhoneStateListener.LISTEN_CALL_STATE);
ここで解決策を見つけることができます
Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
上記の答えは正しいですが、パーミッションを忘れないでください
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
注、フォームAndroid 9
を開始して着信番号を読み取るには、この許可を要求する必要があります
<uses-permission android:name="android.permission.READ_CALL_LOG" />