2015-09-02 1 views
3

Я делаю верификационный звонок из своего приложения. Он должен отключиться через 5-10 секунд, который настроен.Обработчик, не вызывающий

Это мой код;

    Intent callIntent = new Intent(Intent.ACTION_CALL); 
        callIntent.setData(Uri.parse("tel:" + phoneNumber)); 
        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

        handler.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
        /*It is never called up untill call got disconnected/hanged up. */ 
          Log.d(TAG, "Disconnecting :"); 
          disconnectCall(); 
         } 
        }, 5000); 

        startActivity(callIntent); 

Проблема заключается метод disconnectCall() не вызывается, пока активность callIntent приостанавливается пользователь принудительно отключен т.е. вызов/трубку. Мне нужно parrelly вызывать disconnectCall() во время действия вызова. Не получается, где проблема в коде.

ответ

1

С моей точки зрения проблема связана с одним поточным классом обслуживания android, который не вызывает обработчик или какие-либо методы до тех пор, пока предыдущая активность не закончится. Так что я добавил часть кода внутри обработчика runnable, и он сработал.

handler.post(callTestHandler = new Runnable() { 
         @Override 
         public void run() { 
          try { 
           //Intent callIntent = new Intent("android.intent.action.NEW_OUTGOING_CALL"); 
           Intent callIntent = new Intent(Intent.ACTION_CALL); 
           callIntent.setData(Uri.parse("tel:" + phoneNumber)); 
           callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
           handler.postDelayed(new Runnable() { 
            @Override 
            public void run() { 
             Log.d(TAG, "Disconnecting :"); 
             disconnectCall(); 
            } 
           }, 5000); 
           startActivity(callIntent); 
          } catch (Exception e) { 
           e.getMessage(); 
          } 
         } 
        }); 

Если у кого-то есть другой ответ/решение, пожалуйста, отправьте его.

3

Вы звоните startActivity (callIntent). Это означает, что вы являетесь , передавая управление вызывающему приложению android. Теперь вызов может быть отключен приложением андроида-звонящего, когда пользователь хочет.

+0

У меня проблема. Проблема с однопоточным сервисом class.let me update. –

2

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

чтобы повесить использовать this.

+0

Спасибо. мы писали код звонка. Я. это из-за mainthread. –