2013-09-23 2 views
0

Мы создаем HTML-код, чтобы сделать телефонный звонок из внутри WL App с помощью этогосделать телефонный звонок из приложения Worklight

document.location.href = 'tel:'+ phoneNumber; 

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

Любая идея о том, как это решить?

ответ

0

Не уверен, что все шаги необходимы .. но здесь все идет.

1) объявить активность SingleInstance андроида: launchMode = "SingleInstance"

2) добавить этот код в вашей деятельности

private PhoneStateListener callListener; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    callListener = new EndCallListener(); 
    ... 
} 

private class EndCallListener extends PhoneStateListener { 

    private final String LOG_TAG = "EndCallListener"; 

    private boolean isPhoneCalling = false; 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 

     if (TelephonyManager.CALL_STATE_RINGING == state) { 
      Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); 
      // finish(); 
     } 
     if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      // wait for phone to go offhook (probably set a boolean flag) so 
      // you know your app initiated the call. 
      Log.i(LOG_TAG, "OFFHOOK"); 
      isPhoneCalling = true; 
     } 
     if (TelephonyManager.CALL_STATE_IDLE == state) { 
      // when this state occurs, and your flag is set, restart your 
      // app 
      Log.i(LOG_TAG, "IDLE"); 
      if (TelephonyManager.CALL_STATE_IDLE == state) { 
       // run when class initial and phone call ended, 
       // need detect flag from CALL_STATE_OFFHOOK 
       Log.i(LOG_TAG, "IDLE"); 

       if (isPhoneCalling) { 

        Log.i(LOG_TAG, "restart app"); 

        // restart app 
        Intent i = getBaseContext().getPackageManager() 
          .getLaunchIntentForPackage(
            getBaseContext().getPackageName()); 
        // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
        startActivity(i); 

        isPhoneCalling = false; 
       } 

      } 
     } 
    } 
} 

3) в вашем Manifest.xml

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

Извините, пропустил тот факт, что WL представляет собой кросс-платформенную платформу dev. Не уверен, что если это поможет? – cYrixmorten

+0

Привет, CYrixmorten. В самом деле, я ищу что-то нейтральное, чтобы в полной мере использовать платформу подсветки. Спасибо, в любом случае. – GDM

0

Как вы это делаете сейчас, вы заменяете приложение для работы с текстом tel. Вам нужно запустить URL в своем окне.

Использование:

window.open("tel:5551212"); 

Это приостановит приложение и запустить телефон. При выходе из телефона приложение возобновится.

+0

Я пробовал в обоих направлениях. Тот же результат, приложение WL не возобновляется, на самом деле оно перезапускается. \t функция doSomething2() { \t \t window.open ('tel: +12101525572', '_self'); \t} – GDM

+0

_self сложно, и зависит от белого списка. Использование: doSomething2() {window.open ('tel: +12101525572', '_blank'); } –

+0

Я просто пробовал с «_self», и это тоже работает на меня. Приложение работает в фоновом режиме, и когда я выхожу из телефона, он возобновляется без перезапуска. Я полагаю, что возможно, что на мобильном телефоне с низким ресурсом ОС может активно отключать все другие приложения, когда работает приложение для телефона. Можете ли вы оставить другие приложения открытыми, позвонить и вернуться к ним без перезапуска? Как выйти из телефона? –