cuốn sách gpt4 ai đã làm

android - Đăng ký tài khoản PJSip

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 21:11:30 26 4
mua khóa gpt4 Nike

Tôi đang cố gắng thêm PJSip vào dự án tôi đang thực hiện. Tôi có phương pháp này để đăng ký tài khoản của mình nhưng lần nào tôi cũng gặp lỗi "tín hiệu nghiêm trọng 11".

Đây là phương pháp

công khai int setRegistration() {
trạng thái int = pjsuaConstants.PJ_FALSE;
/* Đăng ký máy chủ SIP bằng cách tạo tài khoản SIP */
int[] accId = new int[1];
accId[0] = 1;

Chuỗi uName = getUserName();
Chuỗi passwd = getPassword();
Máy chủ chuỗi = getSIPServer();

pjsua_acc_config acc_cfg = pjsua_acc_config mới();
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("trạng thái", "acc đang thêm..");
trạng thái = pjsua.acc_add(acc_cfg, pjsuaConstants.PJ_TRUE, accId);
Log.d("trạng thái", "acc đã được thêm");

if (trạng thái == pjsuaConstants.PJ_SUCCESS) {
trạng thái = pjsua.acc_set_online_status(accId[0], 1);
Log.d("acc_set_online_status trả về stauts=", String.valueOf(status));
} khác {
Log.d("Trạng thái lỗi=", String.valueOf(trạng thái));
}
trạng thái trả lại;
}

tôi ở đây trạng thái = pjsua.acc_add(acc_cfg, pjsuaConstants.PJ_TRUE, accId); Dòng đã nhận được một lỗi. Tôi biết tên người dùng, máy chủ và mật khẩu không trống. Tôi đã xem xét nhiều câu hỏi liên quan đến vấn đề này nhưng không có kết quả.

Làm cách nào để đăng ký tài khoản của tôi?

Cảm ơn

*****CHỈNH SỬA******Sau khi theo dõi qua các blog và diễn đàn, tôi đã khắc phục được lỗi này nhưng lại gặp phải một lỗi khác. Lỗi này xảy ra vì pjsua_init Không bao giờ thành công. Nó hoạt động vì nó gây ra lỗi này cho tôi

11-04 10:19:20.973: E/AndroidRuntime(2961): NGOẠI LỆ TUYỆT VỜI: chính
04-11 10:19:20.973: E/AndroidRuntime(2961): java.lang.UnsatisfiedLinkError: Không tìm thấy phương thức gốc: org.pjsip.pjsua.pjsuaJNI.init:(JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I
04-11 10:19:20.973: E/AndroidRuntime(2961): tại org.pjsip.pjsua.pjsuaJNI.init(Phương pháp gốc)
04-11 10:19:20.973: E/AndroidRuntime(2961): tại org.pjsip.pjsua.pjsua.init(pjsua.java:812)

Tôi cũng nhận được cảnh báo này

Không tìm thấy triển khai nào cho Lorg/pjsip/pjsua/pjsuaJNI;.init (JLorg/pjsip/pjsua/pjsua_config;JLorg/pjsip/pjsua/pjsua_logging_config;JLorg/pjsip/pjsua/pjsua_media_config;)I

Tại sao đây không phải là một phương pháp gốc? Tôi đang xem thư viện mà tôi đang gọi, nhưng ngoài ra tôi không biết tại sao nó không hoạt động.

Bất kỳ trợ giúp về vấn đề này sẽ là tuyệt vời. Cảm ơn

mã PJ

pjsua.java

int tĩnh được đồng bộ hóa công khai (pjsua_config ua_cfg, pjsua_logging_config log_cfg, pjsua_media_config media_cfg) {
trả về 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 int int gốc tĩnh cuối cùng(jarg1 dài, pjsua_config jarg1_, jarg2 dài, pjsua_logging_config jarg2_, jarg3 dài, 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;
kết quả pj_status_t;

(void)jenv;
(void)jcls;
(void)jarg1_;
(void)jarg2_;
(void)jarg3_;
arg1 = *(pjsua_config **)&jarg1;
arg2 = *(pjsua_logging_config **)&jarg2;
arg3 = *(pjsua_media_config **)&jarg3;

kết quả = (pj_status_t)pjsua_init((pjsua_config const *)arg1,(pjsua_logging_config const *)arg2,(pjsua_media_config const *)arg3);
jresult = (jint)kết quả;
trả về kết quả 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},

Chỉnh sửa 2

Vì vậy, sau khi làm điều này, tôi đã thất vọng. Tôi không thấy mình đang làm gì sai nên tôi sẽ đăng toàn bộ quá trình của mình lên đây và xem có ai có đề xuất gì không.

  1. Lần đầu tiên tôi có được thư viện pjsip:svn co http://svn.pjsip.org/repos/pjproject/trunk pjproject
  2. Chạy `./configure --prefix=/usr/local
  3. bộ phận sản xuất và sản xuất
  4. sudo để cài đặt

  5. Sau đó tôi nhận được mã pjjni thanh toán svn svn://svn.code.sf.net/p/pjsip-jni/code/pjsip-jni-code

  6. Tôi đã làm theo hướng dẫn Makefile
  7. Sau khi Makefile chạy thành công (sau khi làm sạch mã), tôi có 2 tệp .so (libpjsua_jni.so và libpjsua_jni_x64.so)
  8. Tạo thư mục jni bằng tệp Android.mk và thư viện .so
  9. Chạy ndk-build ( Làm cách nào để tải một tệp .so khác trong dự án Android của bạn? )
  10. Thêm vào ADT
  11. Đóng dự án. Đã thay đổi hỗ trợ gốc từ Java sang Android. dự án mở ( Chuyển đổi dự án hiện có thành dự án Android trong Eclipse? )
  12. Thêm dự án này vào dự án TestPJ của tôi (Android -> Thư viện -> Thêm)
  13. Gọi System.loadLibrary("pjsulib") -- Tên của thư viện mới.so
  14. Nhận lỗi

    22-11 13:55:44.784: W/dalvikvm(11464): Không tìm thấy triển khai Lorg/pjsip/pjsua/pjsuaJNI gốc; 13:55:48.792: W/dalvikvm(11464): Ngoại lệ Ljava/lang/UnsatisfiedLinkError; bị ném khi khởi tạo Lorg/pjsip/pjsua/pjsuaJNI; 11-22 13:55:51.417: E/AndroidRuntime(11464): java. .Liên kết không hài lòngLỗi: Không tìm thấy phương thức gốc: org.pjsip.pjsua.pjsuaJNI.swig_module_init:()V11-22 13:55:51.417:E/AndroidRuntime(11464): tại org.pjsip.pjsua.pjsuaJNI.swig_module_init(phương thức gốc)11-20 hai 13:55:51.417: E/AndroidRuntime(11464): tại org.pjsip.pjsua.pjsuaJNI.(pjsuaJNI.java:1450)

Mọi trợ giúp đều sẽ tuyệt vời. Cảm ơn!

câu trả lời hay nhất

Có thể tìm thấy ví dụ về các dự án khám phá các cuộc gọi JNI từ Java và C đây .
Lỗi được đề cập trong câu hỏi (java.lang.UnsatisfiedLinkError: Không tìm thấy phương thức gốc: org.pjsip.pjsua.pjsuaJNI) đề cập đến một trong các vấn đề sau:

- Tên phương thức gốc sai hoặc/và các tham số/giá trị trả về của nó.Nếu bạn có quyền truy cập vào mã gốc của thư viện, bạn có thể sửa nó. Theo thông báo lỗi và những cân nhắc của JNI, phương thức gốc phải có tên Java_org_pjsip_pjsua_pjsuaJNI_init(JNIEnv *env, jobject obj, ..), trong đó env là con trỏ tới giao diện JVM, obj là con trỏ "this" và phần còn lại các tham số có thể được lấy từ gói org phương thức init java của lớp pjsuaJNI của .pjsip.pjsua. Các loại tham số đơn giản phải là jint, jstring, v.v. Giá trị trả về cũng phải chính xác. Hãy khắc phục tất cả điều này để cho phép sử dụng phương thức này trong lớp pjsuaJNI. Thông tin chi tiết có thể được tìm thấy trong tài liệu của Oracle Tài liệu Oracle cho Java 6 JNI (Java 7 nếu bạn đang sử dụng Android 4.4).

- Tên/chữ ký/tên phương thức java hoặc tên gói sai. Tình huống này gần như trái ngược với tình huống đầu tiên. Một lần nữa, theo tên lỗi được đề cập, phương thức phải là "init", tên lớp pjsuaJNI và gói org.pjsip.pjsua. Nếu ít nhất một trong số chúng sai thì ngoại lệ trên sẽ xảy ra. Chữ ký hoặc thông số cũng phải chính xác. Về ranh giới của lỗi này, nó có thể được coi là một tham số phương thức (cũng được thấy trong JNIEnv* và jobject gốc). Do đó, nó cũng phải được kiểm tra và sửa chữa khi cần thiết.
Trong trường hợp chữ ký java được gọi từ mã gốc, nó có thể được xem dưới dạng biểu diễn của một phương thức java có đối số là một chuỗi và có thể được xem bằng cách sử dụng lệnh javap -s *.class được áp dụng cho java *.class tài liệu. Chữ ký của phương thức có thể được nhìn thấy trong cảnh báo cuối cùng trong câu hỏi.

Để sử dụng cùng một phương pháp, thư viện pjsip phải được tải. System.loadLibrary()Trong một số phần tĩnh của các lớp Java.

Thật không may, sự cố này xảy ra trong thời gian chạy (sẽ tốt hơn nếu nó xảy ra trong quá trình biên dịch).

Về đăng ký tài khoản android - PJSip, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19305777/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress