2017-05-03 151 views
0

我正在開發一個NativeScript應用程序,它將使用監聽手機的通話狀態。對於這個我使用CXCallObserver和CXCallObserverDelegate我設置如下:CXCallObserverDelegate:callChanged不觸發

module.exports = { 
     phoneDelegate: NSObject.extend({ 
      initWithResolveReject: function(resolve, reject){ 
       var self = this.super.init(); 
       if(self){ 
        this.resolve = resolve; 
        this.reject = reject; 
       } 
       return self; 
      }, 

      callObserverCallChanged: function(observer, call){ 
       console.log("This log is not triggering"); 
       if(call.hasEnded){ 
        // call has ended 
        this.resolve({phoneState: "ended"}); 
       } 
       if(call.isOutgoing && !call.hasConnected){ 
        // Dialing out 
        this.resolve({phoneState: "outgoing call"}); 
       } 
       if(!call.isOutgoing && !call.hasConnected && !call.hasEnded){ 
        // Call is incoming 
        this.resolve({phoneState: "incoming call"}); 
       } 
       if(call.hasConnected && !call.hasEnded){ 
        // Call is ongoing 
        this.resolve({phoneState: "ongoing call"}); 
       } 
      } 
     }, { 
      protocols: [CXCallObserverDelegate] 
     }), 

     registerListener: function(){ 
      return new Promise((resolve, reject) => { 
       try{ 
        this.callObserver = new CXCallObserver(); 

        let myCallDelegate = this.phoneDelegate.alloc().initWithResolveReject(resolve, reject); 
        this.callObserver.setDelegateQueue(myCallDelegate, null); 
        console.log("phone listener registered"); 
       } catch(error) { 
        reject({error: error}); 
       } 
      }) 
     } 
    } 

偵聽器得到註冊,因爲它應該,至少沒有錯誤拋出,最後控制檯登錄「registerListener」作爲執行這應該。

當我嘗試撥打電話時,傳入或傳出都沒有任何反應。至少第一個控制檯登錄「callObserverCallChanged」應該在任何電話狀態改變時執行。但沒有任何反應。

任何人有什麼建議可能是錯的?

+0

我已經向NativeScript的github頁面報告過這個問題,所以任何感興趣的人都可以按照這裏(https://github.com/NativeScript/NativeScript/issues/4099) –

回答

0

let myCallDelegate = this.phoneDelegate.alloc()。initWithResolveReject(resolve,reject); this.callObserver.setDelegateQueue(myCallDelegate,null);

好的解決方案很尷尬。由於未將其分配給類,因此myCallDelegate實例在執行任何操作之前已被銷燬。那麼這裏的解決方案是:

this.myCallDelegate = this.phoneDelegate.alloc().initWithResolveReject(resolve, reject); 
this.callObserver.setDelegateQueue(this.myCallDelegate, null); 

因爲要花費他的時間和發現這個錯誤,