开发者社区> 问答> 正文

指示方向是传入还是传出

为了成为默认的电话应用程序,必须InCallService与meta-data清单中的标记以及使用CALL_PHONE许可一起实施。

到目前为止我做了什么:

Manifest.xml

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

<service
            android:name=".InCallServiceImplementation"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BIND_INCALL_SERVICE">
            <meta-data
                android:name="android.telecom.IN_CALL_SERVICE_UI"
                android:value="true" />
            <meta-data
                android:name="android.telecom.IN_CALL_SERVICE_RINGING"
                android:value="true" />

            <intent-filter>
                <action android:name="android.telecom.InCallService" />
            </intent-filter>
 </service>

被要求为默认值,用户也授予了CALL_PHONE权限。下面是我的InCallServiceImplementation.java,它扩展了InCallService

@Override
   public void onCallAdded(Call call)
   {
       super.onCallAdded(call);
       Log.d("InCallService :", "Added a new call.. \n");
       new OngoingCall().setCall(call);

       Log.d("InCallService :", "FOUND DIRECTION FOR INCOMING :" + IsInComingCall + ".. \n");

       if (IsInComingCall)
       {
           // START ACTIVITY FOR INCOMING CALL
           //IncomingCallActivity.start(this, call);
       }
       else
       {
           // START ACTIVITY FOR OUTGOING CALL
           //DialerActivity.start(this, call);
       }
   }

   @Override
   public void onCallRemoved(Call call)
   {
       super.onCallRemoved(call);
       Log.d("InCallService :", "Call is removed.. \n");
       new OngoingCall().setCall(null);
   }

下面是我的OngoingCall.java类

private Object callback = new Call.Callback() 
{
      @Override
      public void onStateChanged(Call call, int newState) {
          super.onStateChanged(call, newState);
          state.onNext(newState);
      }
  };

  public final void setCall(@Nullable Call value) 
  {
      if (call != null) 
      {
          call.unregisterCallback((Call.Callback)callback);
      }

      if (value != null) 
      {
          value.registerCallback((Call.Callback)callback);
          state.onNext(value.getState());
      }

      call = value;
  }

  public void answer() 
  {
      assert call != null;
      call.answer(VideoProfile.STATE_AUDIO_ONLY);
  }

  public void hangup() 
  {
      assert call != null;
      call.disconnect();
  }

工作方式: 如果我通过“我的应用”拨打电话或拨打电话,或者即使从制造商的电话应用中拨打电话,DialerActivity如果将if-else其从功能中删除,它也会启动我onCallAdded

那是什么问题呢:

即使有来电,它仍会显示正在DialerActivity显示拨出电话的画面。我有2个不同的来电和去电活动。

我正在寻找什么分辨率:

我如何找到呼叫是呼入还是呼出,呼叫方向。因此可以向用户呈现适当的布局。

在学习或搜索方面做了哪些努力:

我总是很难理解Google文档的用途是什么?

在[Call.Details] [1]上找到它

[1]:https : //developer.android.com/reference/android/telecom/Call.Details.html#getCallDirection()可以获取方向。我进行了很多搜索,然后再次发现[构建通话应用] [1]

[1]:https://developer.android.com/guide/topics/connectivity/telecom/selfManaged,其中介绍了许多实现方法。只是一些概述和一些不完整的示例,带有许多理论。我找到了[简易电话] [1]

[1]:https://github.com/arekolek/simple-phone,但它是在kotlin中开发的。同一项目在Java中名为[Custom Phone Dialer] [1]

[1]:https : //github.com/Abror96/CustomPhoneDialer 尚未实现此指令。我也没有从Google文档中找到任何适当的分步指南。如果开发人员尝试阅读其示例程序,则会丢失许多变量和函数,这对于阅读无用,并且花费大量时间进行研究。

提前谢谢大家

展开
收起
几许相思几点泪 2019-12-22 18:44:51 588 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载