【问题标题】:vuforia sdk + android failed to initialize Vuforia with permission exceptionvuforia sdk + android 初始化 Vuforia 失败,权限异常
【发布时间】:2016-09-08 08:55:39
【问题描述】:

运行程序后应用程序因初始化失败而崩溃 Vuforia 权限异常

安卓版本为<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />

仅使用前置摄像头在设备 4.1.1(api 级别 16)上进行测试。

清单文件中包含的权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-feature android:glEsVersion="0x00020000" />

SampleApplicationSessionInitVuforiaTask 任务出现异常,返回的Vuforia.init() 值为-1。

不知道我错过了什么。

包含的库是 armae​​bi-v7a/libVuforia.so、android-support-v4、jpct_ae、Vuforia

【问题讨论】:

  • 我在使用 unity 在 android 中构建 AR 应用程序时遇到了同样的错误,实际上我已经创建了一个 android 插件并更改了 android 清单文件并忘记添加相机使用权限,因为 unity 合并了你的与创建冲突的原始清单创建清单文件,添加相机权限解决我的问题。 “我是在使用 android studio 的 android monitor 后才知道这个问题的”。

标签: android permissions augmented-reality vuforia jpct


【解决方案1】:

我也遇到过同样的问题。如果您看到该示例附带已编译的 SdKversion 22,因为在较新的版本中,用户必须明确授予相机权限。我的项目通过向我的 android 应用程序添加一些代码来使用 API 25。就我而言,当用户单击 FloatingActionButton 时,我在打开 vuforia 活动之前要求获得相机权限:

FloatingActionButton flb=(FloatingActionButton)findViewById(R.id.floatingActionButton2);
    flb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

                ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
            }
            else
            {
                Intent myIntent = new Intent(MainActivity.this, VideoPlayback.class);
                startActivity(myIntent);
            }

        }
    });

VideoPlayback 是使用来自 vuforia 的 AR 的活动,包含在高级示例中。在这种情况下,您必须收听 onRequestPermissionsResult,因为我们必须检查用户的回答。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    // Begin monitoring for Aruba Beacon-based Campaign events
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == 0) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            Intent myIntent = new Intent(MainActivity.this, VideoPlayback.class);
            startActivity(myIntent);
        }
    }


}

在 onRequestPermissionsResult 中,我们检查答案是否是肯定的,如果是,我们打开活动。

我希望它也对你有用。

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    相关资源
    最近更新 更多