Android studio. Черный экран на камере
Перестала работать камера. Использую слегка подредактированный код HelloSceneformActivity из Arcore примера. Когда запускаю, вместо изображения камеры я вижу черный экран. Проверил остальные ARCore приложения, и там такая же проблема. Перезапуск телефона решает проблему только на один запуск, если попробовать включить приложение второй раз, то снова появляется черный экран.
import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.core.Point;
import com.google.ar.core.Pose;
import com.google.ar.core.Session;
import com.google.ar.core.TrackingState;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.FrameTime;
import com.google.ar.sceneform.Node;
import com.google.ar.sceneform.SceneView;
import com.google.ar.sceneform.math.Vector3;
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 {
String Tag = "MY";
private static final String TAG = MainActivity.class.getSimpleName();
private static final double MIN_OPENGL_VERSION = 3.0;
private ArFragment arFragment;
private ModelRenderable andyRenderable;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(Tag, "СТарт");
super.onCreate(savedInstanceState);
Log.d(Tag, "Проверка");
if (!checkIsSupportedDeviceOrFinish(this)) {
return;
}
Log.d(Tag, "Класс хмс присваиваем");
setContentView(R.layout.activity_main);
arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
Log.d(Tag, "Билдер начинается");
ModelRenderable.builder()
.setSource(this, R.raw.andy)
.build()
.thenAccept(renderable -> andyRenderable = 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 (andyRenderable == null) {
Log.d(Tag, "Никак");
return;
}
Log.d(Tag, "HitResoult - "+ hitResult + ", Plane: - "+ plane + "MotionEvent - "+ motionEvent);
Log.d(Tag, "гет хитпоз"+ hitResult.getHitPose());
Log.d(Tag, "постройка объекта");
// Create the Anchor.
Anchor anchor = hitResult.createAnchor();
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
Log.d(Tag, "getPose - "+ anchor.getPose());
Session session = arFragment.getArSceneView().getSession();
float[] position = {0, 0, -1};
float[] rotation = {0, 0, 0, 1};
Anchor anchor1 = session.createAnchor(new Pose(position, rotation));
//Vector3 cameraPos = arFragment.getArSceneView().getScene().getCamera().getWorldPosition();
//Vector3 cameraForward = arFragment.getArSceneView().getScene().getCamera().getForward();
//Vector3 position = Vector3.add(cameraPos, cameraForward.scaled(1.0f));
// Create an ARCore Anchor at the position.
//Pose pose = Pose.makeTranslation(position.x, position.y, position.z);
//Anchor anchor1 = arFragment.getArSceneView().getSession().createAnchor(pose);
AnchorNode mAnchorNode = new AnchorNode(anchor1);
mAnchorNode.setParent(arFragment.getArSceneView().getScene());
Node node = new Node();
node.setRenderable(andyRenderable);
node.setParent(mAnchorNode);
// Create the transformable andy and add it to the anchor.
//TransformableNode andy = new TransformableNode(arFragment.getTransformationSystem());
//andy.setParent(anchorNode);
//andy.setRenderable(andyRenderable);
//andy.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;
}
}
Если сравнивать что пишет при работающей камере и не работающей, то в неработающей пишет:
E/native: android_data_source.cc:492 Failed to populate image metadata for CPU image. camera_stream_id={camera_id = "0", stream_index = 0}, status=generic::unavailable: IMU-camera offset for camera not initialized. camera_id=0
В интернете пишут, что это якобы камера занята, но фоновый приложений у меня нет.
ran работающей камеры:
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/native: hit_test.cc:381 generic::internal: No point hit.
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/native: hit_test.cc:381 generic::internal: No point hit.
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/native: hit_test.cc:381 generic::internal: No point hit.
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
ran неработающей камеры:
E/native: android_data_source.cc:492 Failed to populate image metadata for CPU image. camera_stream_id={camera_id = "0", stream_index = 0}, status=generic::unavailable: IMU-camera offset for camera not initialized. camera_id=0
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/native: android_data_source.cc:492 Failed to populate image metadata for CPU image. camera_stream_id={camera_id = "0", stream_index = 0}, status=generic::unavailable: IMU-camera offset for camera not initialized. camera_id=0
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578
E/native: android_data_source.cc:492 Failed to populate image metadata for CPU image. camera_stream_id={camera_id = "0", stream_index = 0}, status=generic::unavailable: IMU-camera offset for camera not initialized. camera_id=0
E/ACameraMetadata: getConstEntry: cannot find metadata tag 65578