我正在尝试将 PJSip 添加到我正在处理的项目中。我有这种方法来注册我的帐户,但每次都会出现“致命信号 11”错误。
这是方法
public int setRegistration() {
int status = pjsuaConstants.PJ_FALSE;
/* Register to SIP server by creating SIP account. */
int[] accId = new int[1];
accId[0] = 1;
String uName = getUserName();
String passwd = getPassword();
String server = getSIPServer();
pjsua_acc_config acc_cfg = new pjsua_acc_config();
pjsua.acc_config_default(acc_cfg);
acc_cfg.setId(pjsua.pj_str_copy("sip:" + uName + "@" + server));
acc_cfg.setReg_uri(pjsua.pj_str_copy("sip:" + server));
acc_cfg.setCred_count(1);
acc_cfg.getCred_info().setRealm(pjsua.pj_str_copy(server));
acc_cfg.getCred_info().setScheme(pjsua.pj_str_copy("digest"));
acc_cfg.getCred_info().setUsername(pjsua.pj_str_copy(uName));
acc_cfg.getCred_info().setData_type(pjsip_cred_data_type.PJSIP_CRED_DATA_PLAIN_PASSWD.swigValue());
acc_cfg.getCred_info().setData(pjsua.pj_str_copy(passwd));
Log.d("status", "acc is adding..");
status = pjsua.acc_add(acc_cfg, pjsuaConstants.PJ_TRUE, accId);
Log.d("status", "acc is added");
if (status == pjsuaConstants.PJ_SUCCESS) {
status = pjsua.acc_set_online_status(accId[0], 1);
Log.d("acc_set_online_status returned stauts=", String.valueOf(status));
} else {
Log.d("Error status=", String.valueOf(status));
}
return status;
}
我在 status = pjsua.acc_add(acc_cfg, pjsuaConstants.PJ_TRUE, accId); 行收到错误。我知道用户名、服务器和密码不为空。我已经查看了多个与此相关的问题,但没有用。
如何注册我的帐户?
谢谢
*****编辑******
通过博客和论坛追踪后,我通过了这个错误,但又收到了另一个错误。发生此错误的原因是 pjsua_init 从未成功。它成功了,因为它给了我这个错误
11-04 10:19:20.973: E/AndroidRuntime(2961): FATAL EXCEPTION: main
11-04 10:19:20.973: E/AndroidRuntime(2961): java.lang.UnsatisfiedLinkError: Native method not found: org.pjsip.pjsua.pjsuaJNI.init:(JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I
11-04 10:19:20.973: E/AndroidRuntime(2961): at org.pjsip.pjsua.pjsuaJNI.init(Native Method)
11-04 10:19:20.973: E/AndroidRuntime(2961): at org.pjsip.pjsua.pjsua.init(pjsua.java:812)
我也收到了这个警告
No implementation found for native Lorg/pjsip/pjsua/pjsuaJNI;.init (JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I
为什么这不是本地方法?我正在查看我调用的库,但除此之外我不知道为什么它不起作用。
在这件事上的任何帮助都会很棒。 谢谢
PJ代码
pjsua.java
public synchronized static int init(pjsua_config ua_cfg, pjsua_logging_config log_cfg, pjsua_media_config media_cfg) {
return pjsuaJNI.init(pjsua_config.getCPtr(ua_cfg), ua_cfg, pjsua_logging_config.getCPtr(log_cfg), log_cfg, pjsua_media_config.getCPtr(media_cfg), media_cfg);
}
pjsuaJNI.java
public final static native int init(long jarg1, pjsua_config jarg1_, long jarg2, pjsua_logging_config jarg2_, long jarg3, pjsua_media_config jarg3_);
pjsua_wrap.cpp
SWIGEXPORT jint JNICALL Java_org_pjsip_pjsua_pjsuaJNI_init(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) {
jint jresult = 0 ;
pjsua_config *arg1 = (pjsua_config *) 0 ;
pjsua_logging_config *arg2 = (pjsua_logging_config *) 0 ;
pjsua_media_config *arg3 = (pjsua_media_config *) 0 ;
pj_status_t result;
(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
(void)jarg3_;
arg1 = *(pjsua_config **)&jarg1;
arg2 = *(pjsua_logging_config **)&jarg2;
arg3 = *(pjsua_media_config **)&jarg3;
result = (pj_status_t)pjsua_init((pjsua_config const *)arg1,(pjsua_logging_config const *)arg2,(pjsua_media_config const *)arg3);
jresult = (jint)result;
return jresult;
}
{"init", "(JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I", (void*)& Java_org_pjsip_pjsua_pjsuaJNI_init},
编辑 2
因此,在完成此工作后,我感到很沮丧。我没有看到我做错了什么,所以我会把我的整个过程放在这里看看是否有人有建议。
svn co http://svn.pjsip.org/repos/pjproject/trunk pjprojectsudo 进行安装
然后我得到 pjjni 代码 svn checkout svn://svn.code.sf.net/p/pjsip-jni/code/pjsip-jni-code
Android -> Library -> Add)System.loadLibrary("pjsualib") -- 新库的名称.so接收错误
11-22 13:55:44.784: W/dalvikvm(11464): 未找到原生 Lorg/pjsip/pjsua/pjsuaJNI 的实现;.swig_module_init:()V 11-22 13:55:48.792:W/dalvikvm(11464):异常 Ljava/lang/UnsatisfiedLinkError;初始化 Lorg/pjsip/pjsua/pjsuaJNI 时抛出; 11-22 13:55:51.417: E/AndroidRuntime(11464): java.lang.UnsatisfiedLinkError: 找不到 native 方法: org.pjsip.pjsua.pjsuaJNI.swig_module_init:()V 11-22 13:55:51.417:E/AndroidRuntime(11464):在 org.pjsip.pjsua.pjsuaJNI.swig_module_init( native 方法) 11-22 13:55:51.417: E/AndroidRuntime(11464): 在 org.pjsip.pjsua.pjsuaJNI.(pjsuaJNI.java:1450)
任何帮助都会很棒。谢谢!
最佳答案
可以找到探索来自 Java 和 C 的 JNI 调用的项目示例 here .
问题中提到的错误(java.lang.UnsatisfiedLinkError: Native method not found: org.pjsip.pjsua.pjsuaJNI)是指以下问题之一:
- 错误的 native 方法名称或/及其参数/返回值。如果您有权访问库的 native 代码,则可以修复它。根据错误消息和 JNI 考虑, native 方法必须具有名称 Java_org_pjsip_pjsua_pjsuaJNI_init(JNIEnv *env, jobject obj, ..),其中 env 是指向 JVM 接口(interface)的指针,obj 是“this”指针,其余参数可以从包 org.pjsip.pjsua 的 pjsuaJNI 类的 java init 方法。简单参数类型必须是 jint、jstring 等。返回值也必须正确。修复所有这些允许使用 pjsuaJNI 类中的此方法。更多详细信息可以从 Oracle 文档中找到 Oracle Documentation to Java 6 JNI (如果您使用的是 Android 4.4,则为 Java 7)。
- 错误的 java 方法名/签名/类名或包名。这种情况几乎与第一种情况相反。同样,根据提到的错误名称,方法必须是“init”,类名 pjsuaJNI 和包 org.pjsip.pjsua。如果其中至少一个是错误的,则会发生上述异常。签名或参数也必须正确。在这个错误的边界上,它可以被认为是方法的参数(另外在原生 JNIEnv* 和 jobject 中出现)。因此也必须在必要时进行检查和修复。
在从 native 代码调用 java 签名的情况下,可以将其视为参数为字符串的 java 方法的表示,并且可以使用应用于 java *.class 文件的 javap -s *.class 命令查看。在问题的最后一个警告中可以看到该方法的签名。
同样要使用方法 pjsip 库必须加载 System.loadLibrary()在 Java 类的一些静态部分。
不幸的是,这个问题发生在运行时(如果它发生在编译期间就好了)。
关于android - PJSip 账号注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305777/
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
完成这个有困难。我正在使用seed.rb+factory_girl来使用rakedb:seed填充数据库。(我知道固定装置存在,但我想以这种方式完成,这只是一个示例,数据库将填充复杂的关联对象。)我的种子.rb:require'factory_girl_rails'["QM","CDC","SI","QS"].eachdo|n|FactoryGirl.create(:grau,nome:n)end还有我的/factories/graus.rbFactoryGirl.definedofactory:graudonomeendend但是当我运行时:rakedb:seed我得到:rakeab
我正在使用carrierwave上传视频然后有一个名为thumb的版本,带有自定义处理器,可以获取视频并使用streamio-ffmpeg创建屏幕截图。视频和文件都已正确上传,但在调用uploader.url(:thumb)时我得到:ArgumentError:Versionthumbdoesn'texist!VideoUploader.rbrequire'carrierwave/processing/mime_types'require'streamio-ffmpeg'classVideoUploader5)File.renamethumb_path,current_pathendd
我正在使用Deviseauthtokengem用于验证我的Rails应用程序的某些部分。但是,当我尝试使用注册路径创建新用户时,出现以下错误{"errors":["Authorizedusersonly."]}。这是我用于测试的rspec代码,it'createsauserusingemail/passwordcombo'dopostapi_user_registration_path,{email:'xxx',password:'yyy',password_confirmation:'yyy'}putslast_response.bodyexpect(last_response.bo
这道题开始于here.但随着我对雷神的了解越来越多,情况发生了很大变化。我正在尝试创建一个带参数的Thor::Group子命令。奇怪的是,如果没有参数,它就可以工作。我可以使用Thor::Group作为子命令吗?这在我输入时有效:foocounterfoo/bin/foomoduleFooclassCLI但是当我输入时这不起作用:foocounter5moduleFooclassCLI','Countupfromtheinput.')endclassCounter:numeric,:desc=>"Thenumbertostartcounting"desc"Prints2numbersb
我正在使用railswithdevise进行注册。我还添加了一个邀请码,所以不是每个人都可以注册。邀请码通过“/users/sign_up?invite_code=wajdpapojapsd”之类的查询字符串传输,并使用“f.hidden_field:invite_code,:value=>params[”添加到注册表单的隐藏字段中:invite_code]".这很好用。唯一的问题是,如果注册没有得到验证和拒绝,设计重定向到“/users”并丢失带有invite_code的查询字符串。由于电子邮件在尝试失败后保留在注册表单中,我相信这也适用于邀请代码。作为最坏情况的解决方案,在注册
我有一个Rails4.2.3应用程序,我在其中使用Devise进行用户身份验证。我在Bootstrap模式中展示我的注册表单。我已经实现了类似于:https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app.注册时我不断收到此错误:Completed406NotAcceptablein512033ms(ActiveRecord:5.8ms)ActionController::UnknownFormat(ActionController::Un
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid