1

Я создаю приложение, используя библиотеку pjsua2. Пример приложения с библиотекой работает нормально. Но в мое приложение, когда я пытаюсь сделать вызов, используя код, приведенный ниже,PJSUA2 не может позвонить из Android 6.0.1

if (currentCall != null) {return;} 
    String buddy_uri = "sip:" + number + "@" + domain; 
    MyCall call = new MyCall(account, -1); 
    CallOpParam prm = new CallOpParam(true); 
    try { 
     call.makeCall(buddy_uri, prm); 
    } catch (Exception e) { 
     call.delete(); 
     return; 
    } 
    currentCall = call; 

Я получаю ниже исключение,

java.lang.Exception: Title:  pjsua_call_make_call(acc.getId(), 
&pj_dst_uri, param.p_opt, this, param.p_msg_data, &id) 
Code:  420003 
Description: Audio subsystem not initialized (PJMEDIA_EAUD_INIT) 
Location: ../src/pjsua2/call.cpp:490 

Эта ошибка проявляется только в Зефир, в KitKat устройстве, его рабочий штраф. Может ли кто-нибудь пролить свет на этот вопрос?

ответ

0

Когда я сделал свой targetSdkVersion на 19 с 25, звонок начал работать как в Киткате, так и в Зефире. Я не знаю точной причины. Любой, кто знает, пожалуйста, напишите ответ.

2

Можно определить, для чего Android SDK нацелен на создание PJSIP. Вы должны указать APP_ABI как :=ALL в вашем файле Application.mk. Другие вещи, которые вы хотите проверить, - NDK и armeabi. Внимательно прочитайте эти вещи here, прежде чем строить PJSUA2.

0

У меня была такая же проблема, потому что я не запрашивал разрешения RECORD_AUDIO во время выполнения.

Отметьте documentation относительно разрешений.

3

В Android от Marshmallow нам нужно получить разрешения.

Я использовал приведенный ниже код, чтобы проверить и получить разрешения от пользователя.

private static final int REQUEST_PERMISSIONS = 100; 
    private static final String PERMISSIONS_REQUIRED[] = new String[]{ 

      Manifest.permission.READ_CONTACTS,Manifest.permission.RECORD_AUDIO 

    }; 

    private boolean checkPermission(String permissions[]) { 
     for (String permission : permissions) { 
      if (ContextCompat.checkSelfPermission(getApplicationContext(), permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
     return true; 
    } 

    private void checkPermissions() { 
     boolean permissionsGranted = checkPermission(PERMISSIONS_REQUIRED); 
     if (permissionsGranted) { 
      Toast.makeText(this, "You've granted all required permissions!", Toast.LENGTH_SHORT).show(); 
     } else { 
      boolean showRationale = true; 
      for (String permission : PERMISSIONS_REQUIRED) { 
       showRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, permission); 
       if (!showRationale) { 
        break; 
       } 
      } 

      String dialogMsg = showRationale ? "We need some permissions to run this APP!" : "You've declined the required permissions, please grant them from your phone settings"; 

      new AlertDialog.Builder(this) 
        .setTitle("Permissions Required") 
        .setMessage(dialogMsg) 
        .setCancelable(false) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          ActivityCompat.requestPermissions(mActivity, PERMISSIONS_REQUIRED, REQUEST_PERMISSIONS); 
         } 
        }).create().show(); 
     } 
    }