让Twilio收听来自设备启动的来电

时间:2016-04-21 12:25:00

标签: java android twilio

我已在我的应用中集成了Twilio SDK。在我的应用程序启动至少一次后,我可以接收来电。

但如果用户重新开机并且没有启动我的应用,我就无法通过电话与他联系。

如何让Twilio SDK收听来自设备启动的来电? (无需至少启动一次我的应用程序)

1 个答案:

答案 0 :(得分:2)

Twilio Client SDK不提供持久服务。

此外,Android SDK不为用户应用程序提供持久服务的可靠机制。系统应用程序可以保留服务。

Persistent Services

但是,可以通过创建BroadcastReceiver并将其注册为接收ACTION_BOOT_COMPLETED来完成此用例。 BroadcastReceiver 然后将处理使客户端可以接听电话的逻辑。

  1. 在AndroidManifest.xml中添加所需的权限:
  2. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    1. 在您元素下的AndroidManifest.xml中添加
    2. <receiver
              android:name="com.example.MyBroadcastReceiver">
              <intent-filter>
                  <action android:name="android.intent.action.BOOT_COMPLETED" />
              </intent-filter>
      </receiver>
      
      1. 创建BroadcastReceiver以在接收Intent广播时启动Twilio Client SDK。要启动SDK,必须执行以下步骤:

        1. 初始化Twilio Client SDK
        2. 检索客户端的JWT功能
        3. 使用令牌
        4. 创建设备
        5. 为设备提供PendingIntent以允许您接收来电 - 使用示例中的活动。
      2. Checkout Twilio的快速入门Tutorial

        com.example
        
        public class MyBroadcastReceiver extends BroadcastReceiver implements DeviceListener {
        
            private Device clientDevice;
        
            public void onReceive(final Context context, Intent intent) {
        
                // You'll need a mechanism to retrieve this time sensitive token.
                final String capabilityToken = "YOUR_JWT_TOKEN";
        
                // Initialize the Twilio Client SDK
                Twilio.initialize(context.getApplicationContext(), new Twilio.InitListener() {
        
                    @Override
                    public void onInitialized() {
                        // Create a Device
                        clientDevice = Twilio.createDevice(capabilityToken, MyBroadcastReceiver.this);
        
                        // Providing a PendingIntent to the Device
                        Intent intent = new Intent(context.getApplicationContext(), YourApplicationActivity.class);
                        PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                        clientDevice.setIncomingIntent(pendingIntent);
                    }
        
                    @Override
                    public void onError(Exception e) {
                        Log.e("MyBroadcastReceiver", e.toString());
                    }
        
                });
        
                // Implements DeviceListener methods
            }
        }
        

        或者,BroadcastReceiver可以启动您的一个服务,然后处理与Twilio Client SDK相关的任何业务逻辑。