Плагин Cordova для уведомления о входящем звонке - PullRequest
0 голосов
/ 08 мая 2018

Мне нужен плагин, который прослушивает входящий вызов, этот плагин необходим для работы с cordova-plugin-tts, потому что при поступлении вызова в текстовом формате речь остается незаметной. Я новичок в разработке плагинов Cordova, Java и даже Android-студии. У меня была смелость попробовать этот плагин, я сражаюсь с ним уже больше месяца. Это стало задачей проб и ошибок. Ниже приведена последняя попытка Java-кода и предоставление намерений в plugin.xml

.
  package com.caller.notifier;

  import org.apache.cordova.CordovaPlugin;
  import org.apache.cordova.*;

  import android.content.BroadcastReceiver;

   import android.content.Context;

    import android.content.IntentFilter;

    import android.content.Intent;

    import android.telephony.TelephonyManager;

  public class speechNotify extends CordovaPlugin {

   private static int lastState = TelephonyManager.CALL_STATE_IDLE;
     private static boolean isIncoming;

     public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    super.initialize(cordova, webView);
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.notify();
   BroadcastReceiver receiver;

       receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
            int state = 0;
            if(stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                state = TelephonyManager.CALL_STATE_IDLE;
            }
            else if(stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                state = TelephonyManager.CALL_STATE_OFFHOOK;
            }
            else if(stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)){
                state = TelephonyManager.CALL_STATE_RINGING;
            }
            onCallStateChanged(state);
        }

        };
        cordova.getActivity().registerReceiver(receiver, intentFilter);
}


private void onIncomingCallStarted(){
webView.loadUrl("javascript:cordova.fireDocumentEvent('incoming-call');");
}
private void onIncomingCallEnded(){
webView.loadUrl("javascript:cordova.fireDocumentEvent('call-ended');");
}
private void onMissedCall(){
 webView.loadUrl("javascript:cordova.fireDocumentEvent('call-ended');");
}


//Incoming call-  goes from IDLE to RINGING when it rings, to OFFHOOK when it's answered, to IDLE when its hung up
private void onCallStateChanged(int state) {
    if(lastState == state){
        //No change, debounce extras
        return;
    }
    switch (state) {
        case TelephonyManager.CALL_STATE_RINGING:
            isIncoming = true;
            onIncomingCallStarted();
            break;
        case TelephonyManager.CALL_STATE_IDLE:
            //Went to idle-  this is the end of a call.  What type depends on previous state(s)
            if(lastState == TelephonyManager.CALL_STATE_RINGING){
                onMissedCall();
            }
            else if(isIncoming){
                onIncomingCallEnded();
            }
            break;
    }
    lastState = state;
    }
    }

А в плагине .XML

        <config-file target="AndroidManifest.xml" parent="/*">
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    </config-file>
        <config-file target="AndroidManifest.xml" parent="/manifest/application">
        <receiver android:name=".CallReceiver" >
        <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter>
    </receiver>
    </config-file>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...