【问题标题】:AR app does not work shows error "Failed to create AR session"AR 应用程序不工作显示错误“无法创建 AR 会话”
【发布时间】:2020-04-01 12:22:25
【问题描述】:

这是我的主要代码

package com.example.ar;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.widget.Toast;

import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.ux.ArFragment;
import com.google.ar.sceneform.ux.TransformableNode;

public class MainActivity extends AppCompatActivity
{
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final double MIN_OPENGL_VERSION = 3.0;
    ArFragment arFragment;
    ModelRenderable lampPostRenderable;
    @Override
    @SuppressWarnings({"AndroidApiChecker", "FutureReturnValueIgnored"})

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!checkIsSupportedDeviceOrFinish(this))
        {
            return;
        }
        setContentView(R.layout.activity_main);
        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
        ModelRenderable.builder().setSource(this, Uri.parse("lamppost.sfb")).build()
                .thenAccept(renderable -> lampPostRenderable = renderable)
                .exceptionally(throwable ->
                {
                    Toast toast = Toast.makeText(this, "Unable to load andy renderable",
                            Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
                    return null;
                }
                );
        arFragment.setOnTapArPlaneListener((HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
            if (lampPostRenderable == null){
                return;  }
            Anchor anchor = hitresult.createAnchor();
            AnchorNode anchorNode = new AnchorNode(anchor);
            anchorNode.setParent(arFragment.getArSceneView().getScene());
            TransformableNode lamp = new TransformableNode(arFragment.getTransformationSystem());
            lamp.setParent(anchorNode);
            lamp.setRenderable(lampPostRenderable);
            lamp.select();
        });
    }

    public static boolean checkIsSupportedDeviceOrFinish(final Activity activity)
    {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
        {
            Log.e(TAG, "Sceneform requires Android N or later");
            Toast.makeText(activity, "Sceneform requires Android N or later", Toast.LENGTH_LONG).show();
            activity.finish();
            return false;
        }
    String openGlVersionString =
            ((ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE))
                    .getDeviceConfigurationInfo().getGlEsVersion();
    if (Double.parseDouble(openGlVersionString) < MIN_OPENGL_VERSION)
    {
        Log.e(TAG, "Sceneform requires OpenGL ES 3.0 later");
        Toast.makeText(activity, "Sceneform requires OpenGL ES 3.0 or later", Toast.LENGTH_LONG).show();
        activity.finish();
        return false;
    }
        return true;
    }
}

我也加入了

 <meta-data
        android:name="com.google.ar.core"
        android:value="required" />

在 Android 清单文件中。

Gradle 模块:app 有

 implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0'

并且 gradle 项目有

 classpath 'com.google.ar.sceneform:plugin:1.5.0'

在依赖项中。

我的 sampledata 文件夹有一个 obj 和一个名为 lamppost 的 mtl 文件。

打开应用程序时,错误显示为“无法创建 AR 会话” 黑屏和手持设备旋转的动画here's how it looks like

【问题讨论】:

    标签: android android-studio augmented-reality sceneform


    【解决方案1】:

    这是为我的 ar 应用程序编写的清单文件的示例。 您忘记设置使用权限 android.hardware.camera.ar​​ 这就是您收到此错误的原因。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.arguide">
     <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">
        <activity android:name=".Activities.AddEquipementActivity"></activity>
        <activity android:name=".Activities.ArActivity" />
        <activity android:name=".Activities.AdminMainActivity" />
        <activity android:name=".Activities.InterventionDetailsActivity" />
        <activity android:name=".Activities.AddGroupActivity" />
        <activity android:name=".Activities.RegisterPasswordActivity" />
        <activity android:name=".Activities.RegisterVerifEmailActivity" />
        <activity android:name=".Activities.Register2Activity" />
        <activity android:name=".Activities.MainActivity" />
        <activity android:name=".Activities.RegisterActivity" />
        <activity android:name=".Activities.SplashScreenActivity" />
        <activity android:name=".Activities.LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    
        <meta-data
            android:name="com.google.ar.core"
            android:value="required" />
      </application>
     <uses-feature
        android:name="android.hardware.camera.ar"
        android:required="true" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    </manifest>
    

    【讨论】:

    • 它有效,但我无法在示例数据中看到我正在使用的对象。相机正在打开,但我一直在用设备看到手部的动画。
    • 现在我看到的只是表面上的白点
    • 白点表示您的 ar 应用程序检测到一个表面,当您看到点时只需单击即可加载您的 ar 模型
    • 请投票给我的答案以启用评论
    • 我一直在点按,但似乎什么也没发生
    【解决方案2】:

    在我的例子中,我忘记在清单文件中包含以下代码

        <meta-data
                android:name="com.google.ar.core"
                android:value="required" />
    

    这是我的完整清单文件

    <?xml version="1.0" encoding="utf-8"?>
    

    <uses-feature
            android:name="android.hardware.camera"
            android:required="true" />
    
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    
    <uses-feature
            android:name="android.hardware.camera.ar"
            android:required="true" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    
    <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true" />
    
    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <meta-data
                android:name="com.google.ar.core"
                android:value="required" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    

    希望对您有所帮助!谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2014-04-02
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多