2014-01-21 3 views
0

Я столкнулся с ошибкой во время использования службы в android. Я вызываю действие CallingScreenActivity, которое я вызываю по назначению, и помещаю цифровую строку, к которой я звоню. Так что я сделал в CallingScreenActivity является первым я инициализировать член класса как этотвызывающий метод перед инициализацией члена класса

private boolean serviceConnected = false; 
    private ISipService service; 
    private ServiceConnection connection = new ServiceConnection() { 

     @Override 
     public void onServiceConnected(ComponentName arg0, IBinder arg1) { 
      service = ISipService.Stub.asInterface(arg1); 
      try { 
       // Log.d(THIS_FILE, 
       // "Service started get real call info "+callInfo.getCallId()); 
       Log.e("onservice connected", "on service connected"); 
       serviceConnected = true; 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName arg0) { 
      Log.e("service disconnected", "desconnected service "); 
      serviceConnected = false; 
     } 
    }; 

тогда я привязки службы в OnCreate(), как это:

bindService(new Intent(this, SipService.class), connection, Context.BIND_AUTO_CREATE); 

и, наконец, получить номер от намерения и вызова метод:

private void placeCallWithOption(String number) { 
     if (service == null) { 
      Log.e("servcie is null ", "service is null"); 
      return; 
     } 

     try { 
      service.makeCallWithOptions(num, 1, null); 
     } catch (RemoteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Теперь моя проблема каждый раз, когда я называю эту деятельность, чтобы сделать вызов он вызывает метод placeCallWithoutOption первый и сервис Conne cted позже, поэтому каждый раз, когда он печатает , услуга равна нулю в методе и возвращается затем подключена услуга в соединенном сервисе. Как мне это сделать, пожалуйста, помогите ..

ответ

1

call эта функция placeCallWithOption внутри onServiceConnected.

создать переменную в деятельности:

private String number; 

и в onCreate деятельности

number=getIntent().getStringExtra("<number_key>",null); 

и onServiceConnected

@Override 
    public void onServiceConnected(ComponentName arg0, IBinder arg1) { 
     service = ISipService.Stub.asInterface(arg1); 
     try { 
      placeCallWithOption(number); 
      // Log.d(THIS_FILE, 
      // "Service started get real call info "+callInfo.getCallId()); 
      Log.e("onservice connected", "on service connected"); 
      serviceConnected = true; 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+0

это правильно использовать ?? как в onserviceConnected на самом деле я am инициализировать переменную класса –

+0

проверить мои измененные ans –

1

Вы не можете вызвать какой-либо метод из службы до его подключения. Таким образом, вы можете:

1) добавить окно выполнения "Подключение услуги ..." на старте активность в

2) диалог выполнения после службы подключенного скрыть и вызвать placeCallWithOption() из onServiceConnected() (не рано).

Смежные вопросы