2015-09-30 2 views
0

Мое приложение генерирует вызовы следующим образом (умысел присланных из службы):Intent.ACTION_CALL немедленно завершает вызовы на некоторых устройствах

Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_CALL); 
    intent.setData(Uri.parse("tel:" + getPhoneNumber()); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
    getContext().startActivity(intent); 

имеет это разрешения:

<uses-permission android:name="android.permission.CALL_PHONE"/> 

Он отлично работает на большинство устройств, но только на некоторых (Samsung S6, LG - в основном Lollipop) иногда вызывает немедленное прекращение вызова (не всегда, на ~ 30-40% вызовов).

Журналы показывают, что менеджер Telecom решил таинственно отключить вызов:

09-30 09:23:01.731 3565-3565/? I/Telecom﹕ : Delayed disconnection of call: [929220936, CONNECTING, null, ***-***-****, 
0, childs(0), has_parent(false), [[Capabilities:]] 

Любая идея?

ответ

0

Чтобы просто открыть приложение дозвона (пользователь должен нажать кнопку вызова внутри приложения дозвона, никаких дополнительных разрешений, необходимых) не использовать:

String number = "9999999999"; 
Uri call = Uri.parse("tel:" + number);    
Intent surf = new Intent(Intent.ACTION_DIAL, call); 
startActivity(surf); 

Чтобы открыть приложение дозвона и сделать вызов автоматически (потребности android.permission.CALL_PHONE) используют:

String number = "9999999999"; 
    Uri call = Uri.parse("tel:" + number);    
    Intent surf = new Intent(Intent.ACTION_CALL, call); 
    startActivity(surf); 
+0

Это именно то, что я сделал (ACTION_CALL часть) , но на некоторых устройствах он открывает дозвонщик и немедленно закрывает его (не детерминированный, только иногда). – user2634975

0

вы начинаете вызов изнутри BroadcastReceiver.onReceive? я столкнулся с той же проблемой, казалось, что, когда приемник завершается, он сносит вызов с ним ... Это работает для меня:

  Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone)); 
      callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          context.startActivity(callIntent); 
          try { 
           Thread.sleep(5000); 
          } catch (InterruptedException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 
Смежные вопросы