2016-12-29 2 views
1

Реализация twilio для вызовов, я пытаюсь использовать широковещательный приемник вместо активности для логики twilio. Предполагается, что мой вещательный приемник поймает намерение через onReceive(), но на самом деле это не так. Звонок слышен! но не может поймать событие и продолжить в моей деятельностиbroadcastreceiver не работает с twilio

Мой BroadcastReceiver (TwilioBroadCastReceiver) содержит:

@Override 
public void onReceive(Context context, Intent intent) { 
     if (intent != null) { 
     /* 
     * Determine if the receiving Intent has an extra for the incoming connection. If so, 
     * remove it from the Intent to prevent handling it again next time the Activity is resumed 
     */ 
     Device device = intent.getParcelableExtra(Device.EXTRA_DEVICE); 
     Connection incomingConnection = intent.getParcelableExtra(Device.EXTRA_CONNECTION); 

     if (incomingConnection == null && device == null) { 
      return; 
     } 
     intent.removeExtra(Device.EXTRA_DEVICE); 
     intent.removeExtra(Device.EXTRA_CONNECTION); 

     pendingConnection = incomingConnection; 
     pendingConnection.setConnectionListener(this); 
     showIncomingDialog(); 
    } 
} 

и

private void createDevice(String capabilityToken) { 
    try { 
     if (clientDevice == null) { 
      clientDevice = Twilio.createDevice(capabilityToken, this); 
      Intent intent = new Intent(mActivity, TwilioBroadcastReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(mActivity, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      clientDevice.setIncomingIntent(pendingIntent); 
     } else { 
      clientDevice.updateCapabilityToken(capabilityToken); 
     } 

    } catch (Exception e) { 
     Log.e(TAG, "An error has occured updating or creating a Device: \n" + e.toString()); 
     Toast.makeText(mActivity, "Device error", Toast.LENGTH_SHORT).show(); 
    } 
} 

в моей деятельности:

mReceiver = new TwilioBroadcastReceiver(this, clientProfile); 

кто-то иметь идея? tks

Manifest, hummm .... кажется, что-то не хватает там?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="client.twilio.com.quickstart"> 

<!-- needed for monitoring network availability --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

<!-- needed for processing on the network --> 
<uses-permission android:name="android.permission.INTERNET"/> 

<!-- needed to enable/disable the speakerphone --> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 

<!-- needed to receive audio from microphone during a call --> 
<uses-permission android:name="android.permission.RECORD_AUDIO"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".ClientActivity" 
     android:screenOrientation="portrait" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service android:name="com.twilio.client.TwilioClientService" android:exported="false" android:stopWithTask="true"/> 
</application> 


</manifest> 
+0

Вы уже зарегистрировали свою трансляцию в своей деятельности? Если нет, отметьте это сообщение http://stackoverflow.com/questions/4805269/programmatically-register-a-broadcast-receiver – AndroidRuntimeException

+0

Я тоже подумал об этом. но я использую Twilio Sdk, который, я полагаю, должен сделать это для меня: PendingIntent pendingIntent = PendingIntent.getBroadcast (mActivity.getApplicationContext(), 0, намерение, PendingIntent.FLAG_UPDATE_CURRENT); – marc

+0

.... кроме этого у меня нет спецификации фильтра для его регистрации. – marc

ответ

1

Вы должны иметь BroadcastReceiver в манифесте:

<receiver android:name=".TwilioBroadcastReceiver"/> 

иначе, приложение Twilio не может доставить PendingIntent к нему. Вам не нужно <intent-filter> для <receiver>, потому что вы предоставляете явное Intent, чтобы вызвать его.

Смежные вопросы