Метод хоста CloudAnchor() устарел. Как использовать новый метод хоста CloudAnchorAsync()?Android

Форум для тех, кто программирует под Android
Anonymous
Метод хоста CloudAnchor() устарел. Как использовать новый метод хоста CloudAnchorAsync()?

Сообщение Anonymous »

Я разработал приложение Ar и использую методы hostCloudAnchor() иsolveCloudAnchor() для работы с облачными привязками в своем приложении. Теперь Google упомянул, что мы должны перейти на новую точку привязки ArCoreAPI до сентября 2023 года.

Старая конечная точка облачного API ARCore Cloud Anchor устарела и не будет поддерживаться после 31 августа 2023 г. Если ваше приложение использует этот API, вам необходимо как можно скорее обновить его, чтобы использовать новую конечную точку облака ARCore API.

Итак, я планирую переместить новый ArCoreAPI и использовать методы hostCloudAnchorAsync() и методыsolveCloudAnchorAsync(), но не могу четко понять использование этих методов и не могу найти последние примеры Cloud Anchor.
Вот как я пока создаю облачные привязки с помощью устаревших методов.
public class CloudAnchorActivity extends AppCompatActivity implements
BaseArFragment.OnSessionConfigurationListener {

private ArFragment anchorArFragment;

private enum AppCloudAnchorState{
NONE,
HOSTING,
HOSTED
}
private AppCloudAnchorState appCloudAnchorState = AppCloudAnchorState.NONE;
private Anchor anchor;
private boolean isPlaced;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_cloud_anchor);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});

anchorArFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.cloudAnchorArFragment);
anchorArFragment.setOnSessionConfigurationListener(this);

anchorArFragment.setOnTapArPlaneListener((hitResult, plane, motionEvent) -> {
if (!isPlaced) {
anchor = anchorArFragment.getArSceneView().getSession().hostCloudAnchor(hitResult.createAnchor());
appCloudAnchorState = AppCloudAnchorState.HOSTING;
Toast.makeText(this, "Hosting Cloud Anchor...", Toast.LENGTH_SHORT).show();
createModel(anchor);

isPlaced = true;
}
});

anchorArFragment.getArSceneView().getScene().addOnUpdateListener(frameTime -> {
if (appCloudAnchorState != AppCloudAnchorState.HOSTING)
return;
Anchor.CloudAnchorState cloudAnchorState = anchor.getCloudAnchorState();

if (cloudAnchorState.isError()){
Toast.makeText(this, cloudAnchorState.toString(), Toast.LENGTH_SHORT).show();
} else if (cloudAnchorState == Anchor.CloudAnchorState.SUCCESS) {
appCloudAnchorState = AppCloudAnchorState.HOSTED;
String cloudAnchorId = anchor.getCloudAnchorId();
Toast.makeText(this, "Anchor Hosted Successfully, Anchor Id: "+cloudAnchorId, Toast.LENGTH_SHORT).show();

}

});

}

private void createModel(Anchor anchor) {
ModelRenderable.builder()
.setSource(this, R.raw.andy)
.setIsFilamentGltf(true)
.setAsyncLoadEnabled(true)
.build()
.thenAccept(modelRenderable -> placeModel(anchor,modelRenderable))
.exceptionally(throwable -> {
Toast.makeText(
this, "Unable to load model Andy", Toast.LENGTH_LONG).show();
return null;
});
}

private void placeModel(Anchor anchor, ModelRenderable modelRenderable) {
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setRenderable(modelRenderable);
anchorArFragment.getArSceneView().getScene().addChild(anchorNode);
}

@Override
public void onSessionConfiguration(Session session, Config config) {
config.setCloudAnchorMode(Config.CloudAnchorMode.ENABLED);
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... orasync-me

Вернуться в «Android»