2013-04-04 2 views
0

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

вот мой приемник:

private final BroadcastReceiver CallReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
     amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
     { 
      amanager.setRingerMode(2); //Ringer ON 
     } 
     if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) 
     { 
      amanager.setRingerMode(0); //Ringer Silent 
     } 
     if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) 
     { 
      amanager.setRingerMode(0); ////Ringer Silent 
     } 
    } 
     }; 

Внутри onStartCommand метода в моей службе:

 IntentFilter filter = new IntentFilter(); 
     filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); 
     registerReceiver(CallReceiver, filter); 

сервис работает успешно и приемник определяет, когда есть входящий вызов, но сбой приложения впоследствии, какие-либо идеи, почему это происходит? Ваша помощь приветствуется!

EDIT: Я решил проблему, выяснилось, что я написал неправильное действие в манифесте, оно не сработает после его изменения.

Но теперь приемник обнаруживает только входящий вызов, но не обнаруживает, что ответ на вызов или закончился, он обнаружил его несколько раз, но в большинстве случаев он не работает, звонок остается включенным после звонок закончился! любые идеи?

+1

Посмотрите на аварии в LogCat и вывесить StackTrace и сообщение об ошибке, –

+0

я зафиксировал аварию, но теперь приемник не обнаруживает конец вызова и телефон остается в нормальном режиме звонка после того, как вызов свыше .. – naz89

+0

Как вы начинаете/останавливаете обслуживание? Что вы возвращаете из 'onStartCommand()'? Можете ли вы сказать, работает ли ваша служба по завершении вызова? –

ответ

2

Наконец-то выдумал выход! Я добавил задержку в одну секунду, прежде чем отключить режим звонка, я понятия не имею, как это решение работает, но так оно и было!

private final BroadcastReceiver CallReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
     amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

     if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) 
     { 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      amanager.setRingerMode(0); //Ringer Silent 
     } 
     if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) 
     { 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      amanager.setRingerMode(0); ////Ringer Silent 
     } 
     if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
     { 
      amanager.setRingerMode(2); //Ringer ON 
     } 
    } 
     }; 
+0

Ты потрясающий человек – diordna

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