Как определить номер телефона текущего абонента в автономном приложении - PullRequest
5 голосов
/ 22 февраля 2012

Я хотел бы создать приложение для Android, которое может связаться с текущим абонентом через предварительно определенное текстовое сообщение.Отправка текстового сообщения достаточно проста, но определение номера телефона текущего абонента в автономном приложении является сложной задачей.Есть ли простой способ определить телефонный номер, чтобы я мог отправить им сообщение, пока он еще находится на вызове?

Конечно, есть ручные способы сделать это: запишите номер, введите его в новыйтекстовое сообщение, введите сообщение.Но я хочу определить сообщение заранее и иметь возможность "отправить его текущему абоненту".

Ответы [ 3 ]

4 голосов
/ 16 января 2013
@Override
public void onReceive(Context context, Intent intent) {

    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context);
    telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
    helper = new ContactDatabaseHelper(context);
    list = helper.getAllContacts();

    try{
        incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

        if (list.size() != 0){
            for ( int i  = 0, size = list.size(); i < size; i++ ){
                if (PhoneNumberUtils.compare(incomingNumber, list.get(i).getContactNumber())){                  
                    ToastMsg.showToast(context,list.get(i).getContactName()+" Calling");
                }
            }
        }


    }catch (Exception e) {
        // TODO: handle exception
    }   

}


public class PhoneCallStateListener extends PhoneStateListener{
private Context context;

public PhoneCallStateListener(Context context){
    this.context = context;
}

@Override
public void onCallStateChanged(int state, String incomingNumber) {  

    switch (state) {

        case TelephonyManager.CALL_STATE_RINGING:       


            break;
        case PhoneStateListener.LISTEN_CALL_STATE:

    }
    super.onCallStateChanged(state, incomingNumber);
}
}
3 голосов
/ 22 февраля 2012

Для вашей ситуации лучше всего использовать PhoneStateListener.Он содержит обработчик onCallStateChanged.Одним из аргументов является строка, содержащая входящий номер телефона.

Источник: http://developer.android.com/reference/android/telephony/PhoneStateListener.html

Ctrl + F и введите «Входящие», и вы найдете все, что вам нужно знать.

РЕДАКТИРОВАТЬ: Чтобы убедиться, что ваше приложение запускается при запуске телефона, просто добавьте BroadcastReciever. Как запустить приложение при запуске?

1 голос
/ 13 января 2013

Зарегистрируйте в своем манифесте BroadcastReceiver, который прослушивает ACTION_PHONE_STATE_CHANGED.

Действие намерения широковещания, указывающее, что состояние вызова (сотовая) на устройстве изменилось.

Экстра EXTRA_STATE указывает на новое состояние вызова.Если новое состояние RINGING, второй дополнительный EXTRA_INCOMING_NUMBER предоставляет номер входящего телефона в виде строки.

Требуется разрешение READ_PHONE_STATE.

Это была залипшая трансляция в версии1.0, но он больше не липкий.Вместо этого используйте getCallState() для синхронного запроса текущего состояния вызова.

Таким образом, вам не нужно, чтобы пользователь запускал ваше приложение перед приемом вызова.

...