当退出活动时,ARCore将停止追踪平面,并且在下次启动时必须重新创建平面。要解决这个问题,可以在活动的onPause()
方法中保存当前检测到的平面,并在onResume()
方法中恢复它们。
以下是一个简单的示例代码:
public class MainActivity extends AppCompatActivity {
private ARSession arSession;
private Collection detectedPlanes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化ARSession
arSession = new ARSession(this);
}
@Override
protected void onResume() {
super.onResume();
// 恢复ARSession
arSession.resume();
// 恢复之前保存的平面
if (detectedPlanes != null) {
for (Plane plane : detectedPlanes) {
arSession.getAllTrackables(Plane.class).add(plane);
}
}
}
@Override
protected void onPause() {
super.onPause();
// 暂停ARSession
arSession.pause();
// 保存当前检测到的平面
detectedPlanes = arSession.getAllTrackables(Plane.class);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 关闭ARSession
arSession.close();
}
}
在上面的示例中,我们在onPause()
方法中保存了当前检测到的平面,使用arSession.getAllTrackables(Plane.class)
获取所有检测到的平面。然后,在onResume()
方法中,我们将这些平面重新添加到ARSession中,以便在恢复时继续追踪它们。
请注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑来处理平面的保存和恢复。