android - 如何使 Twilio Client Sdk 与最新的 android 版本兼容?

标签 android twilio

我在我的应用程序中使用 twilioclient-android-1.1.2-3635733,MonkeyPhone 类文件看起来像 -

package com.twilio.example.hellomonkey;

import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.util.Log;

import com.twilio.client.Connection;
import com.twilio.client.Device;
import com.twilio.client.Twilio;
import com.twilio.client.Connection.State;


public class MonkeyPhone implements Twilio.InitListener
{
    private static final String TAG = "MonkeyPhone";
    private Device device;
    private Connection connection;
    public MonkeyPhone(Context context)
    {
        Twilio.initialize(context, this /* Twilio.InitListener */);
    }

    /* Twilio.InitListener method */
    @Override
    public void onInitialized()
    {
        Log.d(TAG, "Twilio SDK is ready");
        try {
            String capabilityToken = HttpHelper.httpGet("http://www.google.com/twilio/auth.php");
            device = Twilio.createDevice(capabilityToken, null /* DeviceListener */);
        } catch (Exception e) {
            Log.e(TAG, "Failed to obtain capability token: " + e.getLocalizedMessage());
        }
    }
      /* Twilio.InitListener method */
    @Override
    public void onError(Exception e)
    {
        Log.e(TAG, "Twilio SDK couldn't start: " + e.getLocalizedMessage());
    }

    @Override
    protected void finalize()
    {
        if (connection != null)
            connection.disconnect();
        if (device != null)
            device.release();
    }

    public void connect(String phoneNumber) {
        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put("PhoneNumber", phoneNumber);
        connection = device.connect(parameters, null /* ConnectionListener */);
        if (connection == null)
            Log.w(TAG, "Failed to create new connection");
        // TODO Auto-generated method stub

    }

    public void disconnect()
    {
        if (connection != null) {
            connection.disconnect();
            connection = null;
        }
        Twilio.shutdown();
    }

    public State status()
    {
        connection.getState();
        State statusHere = connection.getState();
        return statusHere;
    }


}

HelloMonkeyActivity

package com.twilio.example.hellomonkey;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;

public class HelloMonkeyActivity extends Activity implements View.OnClickListener
{
    private MonkeyPhone phone;
    private EditText numberField;

    @Override
    public void onCreate(Bundle bundle)
    {
        super.onCreate(bundle);
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            }
        setContentView(R.layout.main);
        phone = new MonkeyPhone(getApplicationContext());
        ImageButton dialButton = (ImageButton)findViewById(R.id.dialButton);
        dialButton.setOnClickListener(this);
        ImageButton hangupButton = (ImageButton)findViewById(R.id.hangupButton);
        hangupButton.setOnClickListener(this);
        numberField = (EditText)findViewById(R.id.numberField);
    }

    @Override
    public void onClick(View view)
    {
        if (view.getId() == R.id.dialButton)
            phone.connect(numberField.getText().toString());
        else if (view.getId() == R.id.hangupButton)
            phone.disconnect();
    }
}

我在 targetSdkVersion:19 中使用它 我在以下仿真器设备上测试过的仿真器可以正常工作- 连结一号 (Android 4.4) 连结 7 (Android 4.4) 连结 10 (Android 4.4) 在 Android 4.2 和 4.3 的设备上,它在模拟器中运行良好

它适用于真实设备 Xolo A600(Android 版本 4.2.2) 但是在任何更高版本上跟随堆栈树到真实设备而不是模拟器中的堆栈树都失败了 - 为什么这样

02-19 11:58:38.492: E/AndroidRuntime(26854): FATAL EXCEPTION: Thread-18132
02-19 11:58:38.492: E/AndroidRuntime(26854): Process: com.twilio.example.hellomonkey, PID: 26854
02-19 11:58:38.492: E/AndroidRuntime(26854): java.lang.NoSuchFieldError: no type "Lcom/twilio/client/impl/useragent/config/UserAgentConfig$Callbacks;" found and so no field "callbacks" could be found in class "Lcom/twilio/client/impl/useragent/UserAgent;" or its superclasses
02-19 11:58:38.492: E/AndroidRuntime(26854): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.twilio.client.impl.useragent.config.UserAgentConfig$Callbacks" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
02-19 11:58:38.492: E/AndroidRuntime(26854):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
02-19 11:58:38.492: E/AndroidRuntime(26854):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
02-19 11:58:38.492: E/AndroidRuntime(26854):    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
02-19 11:58:38.492: E/AndroidRuntime(26854):    Suppressed: java.lang.ClassNotFoundException: com.twilio.client.impl.useragent.config.UserAgentConfig$Callbacks
02-19 11:58:38.492: E/AndroidRuntime(26854):        at java.lang.Class.classForName(Native Method)
02-19 11:58:38.492: E/AndroidRuntime(26854):        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
02-19 11:58:38.492: E/AndroidRuntime(26854):        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
02-19 11:58:38.492: E/AndroidRuntime(26854):        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
02-19 11:58:38.492: E/AndroidRuntime(26854):        ... 1 more
02-19 11:58:38.492: E/AndroidRuntime(26854):    Caused by: java.lang.NoClassDefFoundError: Class "Lcom/twilio/client/impl/useragent/config/UserAgentConfig$Callbacks;" not found
02-19 11:58:38.492: E/AndroidRuntime(26854):        ... 5 more
02-19 11:58:49.404: I/Process(26854): Sending signal. PID: 26854 SIG: 9

我的意思是 twilio sdk 目前仅与 4.2 兼容,但如果是这样,那么为什么它在模拟器中运行良好关于我之前已经在此处发布的错误 How to resolve java.lang.NoClassDefFoundError UserAgentConfig$Callbacks with Twilio 但是现在有了提供的代码,我想你们可以帮助并理解我的挫败感- 提前致谢

最佳答案

禁用 ART,重新启用 Dalvik。我的设备(不是模拟器)遇到了这个确切的错误,这就是修复。

关于android - 如何使 Twilio Client Sdk 与最新的 android 版本兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876780/

相关文章:

python - 尝试使用 "import twilio"而不是 "from twilio import twiml"

javascript - 我可以使用 Javascript 将 Twilio 设备与 MediaStream 连接吗?

android - 有没有办法在滚动时强制 WebView 更新其图片( View )?

java - 谷歌库 play-services-location 和 play-services-analytics 出错

java - 如何在两个 Activity 之间翻转动画(如卡片翻转)?

java - 运行 Appium 命令时出错 : ENOENT, 没有这样的文件或目录

ios - 无法在 Workspace Playground 中使用 "Vendored Framework"CocoaPod

Android Http 从 Servlet 获取字符串数据

java - 如何使用 Twilio 在当前通话中添加另一个号码?

javascript - 如何从我们加入但未与 Twilio Chat SDK 交互的 channel 获取更新?