2

我正在使用 pjsua2 库构建一个应用程序。库附带的示例应用程序运行良好。但是在我的应用程序中,当我尝试使用以下代码拨打电话时,

    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 设备中,它工作正常。有人可以对这个问题有所了解吗?

4

5 回答 5

4

在来自 Marshmallow 的 Android 中,我们需要获取权限。

我使用下面的代码来检查并从用户那里获取权限。

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();
        }
    }
于 2017-06-01T10:20:20.520 回答
2

可以定义构建 PJSIP 的 Android SDK 目标。你应该在你的文件中APP_ABI指定。之前要检查的其他事项是和。在构建之前仔细阅读这里的内容。:=ALLApplication.mkNDKarmeabiPJSUA2

于 2017-03-16T09:06:26.043 回答
0

在 Android Manifest 文件中声明音频权限,然后向用户询问录制音频权限。

于 2020-12-17T05:39:30.873 回答
0

当我将 targetSdkVersion 从 25 设置为 19 时,调用开始在 Kitkat 和 Marshmallow 中工作。我不知道确切的原因。哪位知道的,请贴出答案。

于 2017-02-17T08:52:18.460 回答
0

我遇到了同样的问题,因为我没有RECORD_AUDIO在运行时请求许可。

检查有关权限的文档。

于 2017-05-12T19:44:46.997 回答