Как получить значение переменной в конце кода, чтобы использовать его в начале - PullRequest
0 голосов
/ 14 мая 2011

Я должен опубликовать код, чтобы понять, что я хочу сказать:

public void répondre()
    {
         mt = MediaPlayer.create(context,R.raw.ringtone);
        mt.setVolume(5,5);
      mt.start();
      mt.setLooping(true);
      //startActivity((new Intent(Intent.ACTION_ANSWER)));
        AlertDialog.Builder ad = new AlertDialog.Builder(context);
        ad.setTitle("Appel en cours...");
        ad.setMessage("Voulez vous répondre à cet appel?");
        ad.setPositiveButton("Oui", 
                             new OnClickListener() {
                               public void onClick(DialogInterface dialog, 
                                                   int arg1) {
                                   mt.stop();
                                SipAudioCall incomingCall = null;
                             try {

                                     SipAudioCall.Listener listener = new SipAudioCall.Listener() {
                                        @Override
                                        public void onRinging(SipAudioCall call, SipProfile caller) {
                                            try {

                                                call.answerCall(30);
                                            } catch (Exception e) {
                                                Log.d("Call not answered","Call not answered",e);
                                            }
                                        }

                                    };

                                    SIPCommunicator wtActivity = (SIPCommunicator) context;

                                    incomingCall = wtActivity.manager.takeAudioCall(intent, listener);
                                    incomingCall.answerCall(30);
                                    incomingCall.startAudio();
                                    incomingCall.setSpeakerMode(true);
                                    if(incomingCall.isMuted()) {
                                        incomingCall.toggleMute();
                                    }

                                    wtActivity.call = incomingCall;
                                 String useName = wtActivity.call.getPeerProfile().getDisplayName();
                                    wtActivity.updateStatus("Vous êtes en communication avec " + useName);



                             } catch (Exception e) {
                                if (incomingCall != null) {
                                    incomingCall.close();
                                }
                            }
                        }

                 });

Я хочу показать имя вызывающего абонента (useName переменная) в AlertDialog.Если я поставлю эту строку (String useName = wtActivity.call.getPeerProfile().getDisplayName();) перед MediaPlayer и сделаю ad.setTitle("Appel en cours"+useName);, то переменная useName будет null!Так как это сделать?Большое спасибо.

1 Ответ

2 голосов
/ 15 мая 2011

К счастью, нам не нужно нарушать причинно-следственную связь, как указано в названии вопроса. Дело в том (и это не так уж и необычно при обработке телефонных приложений), что в момент, когда вы получаете индикацию о входящем звонке, имя звонящего не готово. Это потому, что для поиска номера / номера URI в контактах требуется некоторое время.

Итак, для решения этой проблемы я бы предложил вам выполнить одно из следующих действий:

  • указывает на входящий вызов через AlertDialog, но представляет только номер вызывающего абонента / URI. Запустите обработчик, а второй позже обновите диалоговое окно, чтобы оно отображало имя.
  • когда поступит вызов, запустите обработчик и выполните ваш код буквально через секунду. Надеюсь, в этот момент будет доступно Имя.

Таким образом, в любом случае вам необходимо обновить AlertDialog в безопасное время после того, как будет указан входящий вызов.

...