gpt4 book ai didi

android - CameraX - I/zygote : Rejecting re-init on previously-failed class java. lang.Class

转载 作者:太空狗 更新时间:2023-10-29 14:35:26 36 4
gpt4 key购买 nike

我正在通过提供的 getting started guide 基于 CameraX Jetpack 支持库开发一个简单的应用程序和一个 GitHub repo .获取错误

I/zygote: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: 
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;

当我设置示例 Activity (CameraActivity) 的布局时。在 API 级别 26 的虚拟和真实设备上测试示例代码。 CameraX 库的版本是 1.0.0-alpha03,这是最新的可用版本。

这是我的布局的代码:

<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageButton
android:id="@+id/btnCapture"
android:layout_width="72dp"
android:layout_height="72dp"
android:scaleType="fitCenter"
android:layout_margin="24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_camera_accent"
android:background="?selectableItemBackgroundBorderless" />

这是我的 Activity 的代码:

public class CameraActivity extends AppCompatActivity {

private TextureView textureView;
private ImageButton btnCapture;

private int REQUEST_CODE_CAMERA_WRITE_EXT = 10;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera); // this line throws the error

initComponents();
checkPermissions();
}

private void initComponents() {
textureView = findViewById(R.id.textureView);
btnCapture = findViewById(R.id.btnCapture);
}

private void checkPermissions() {
final String permissionCamera = Manifest.permission.CAMERA;
final String permissionWriteExtStorage = Manifest.permission.WRITE_EXTERNAL_STORAGE;
boolean isPermissionGranted = PermissionUtil.checkForPermission(this, permissionCamera);
if (!isPermissionGranted) {
boolean rationale = ActivityCompat.shouldShowRequestPermissionRationale(
CameraActivity.this, permissionCamera);
if (rationale) {
AlertDialog.Builder builder = new AlertDialog.Builder(CameraActivity.this);
builder.setTitle("Camera Permission");
builder.setMessage("In order to take the photo of your vein, you need to grant camera permission.");
builder.setIcon(R.drawable.ic_info_accent);

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(CameraActivity.this, new String[]{permissionCamera, permissionWriteExtStorage}, REQUEST_CODE_CAMERA_WRITE_EXT);
}
});

AlertDialog alertDialog = builder.create();
alertDialog.show();
} else
ActivityCompat.requestPermissions(CameraActivity.this, new String[]{permissionCamera, permissionWriteExtStorage}, REQUEST_CODE_CAMERA_WRITE_EXT);
} else
startCamera();
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE_CAMERA_WRITE_EXT) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
startCamera();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

private void startCamera() {
CameraX.unbindAll();

int aspRatioW = textureView.getWidth(); //get width of screen
int aspRatioH = textureView.getHeight(); //get height
Rational asp = new Rational(aspRatioW, aspRatioH); //aspect ratio
Size screen = new Size(aspRatioW, aspRatioH); //size of the screen

PreviewConfig pConfig = new PreviewConfig.Builder().setTargetAspectRatio(asp).setTargetResolution(screen).build();
Preview preview = new Preview(pConfig); //lets build it

preview.setOnPreviewOutputUpdateListener(
new Preview.OnPreviewOutputUpdateListener() {
//to update the surface texture we have to destroy it first then re-add it
@Override
public void onUpdated(Preview.PreviewOutput output) {
ViewGroup parent = (ViewGroup) textureView.getParent();
parent.removeView(textureView);
parent.addView(textureView, 0);

textureView.setSurfaceTexture(output.getSurfaceTexture());
updateTransform();
}
});


ImageCaptureConfig imgCConfig = new ImageCaptureConfig.Builder().setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
.setTargetRotation(getWindowManager().getDefaultDisplay().getRotation()).build();
final ImageCapture imgCap = new ImageCapture(imgCConfig);


btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ContextWrapper contextWrapper = new ContextWrapper(CameraActivity.this);
String path = contextWrapper.getFilesDir().getPath();
File file = new File(path + "/" + System.currentTimeMillis() + ".jpg");
imgCap.takePicture(file, new ImageCapture.OnImageSavedListener() {
@Override
public void onImageSaved(@NonNull File file) {
String msg = "Photo capture succeeded: " + file.getAbsolutePath();
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
}

@Override
public void onError(@NonNull ImageCapture.UseCaseError useCaseError, @NonNull String message, @Nullable Throwable cause) {
String msg = "Photo capture failed: " + message;
Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
if (cause != null) {
cause.printStackTrace();
}
}
});
}
});

/* image analyser */

ImageAnalysisConfig imgAConfig = new ImageAnalysisConfig.Builder().setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE).build();
ImageAnalysis analysis = new ImageAnalysis(imgAConfig);

analysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image, int rotationDegrees) {
//y'all can add code to analyse stuff here idek go wild.
}
});

//bind to lifecycle:
CameraX.bindToLifecycle((LifecycleOwner) this, analysis, imgCap, preview);
}

private void updateTransform() {
//compensates the changes in orientation for the viewfinder, bc the rest of the layout stays in portrait mode.
//methinks :thonk:
Matrix mx = new Matrix();
float w = textureView.getMeasuredWidth();
float h = textureView.getMeasuredHeight();

float cX = w / 2f; //calc centre of the viewfinder
float cY = h / 2f;

int rotationDgr;
int rotation = (int) textureView.getRotation(); //cast to int bc switches don't like floats

switch (rotation) { //correct output to account for display rotation
case Surface.ROTATION_0:
rotationDgr = 0;
break;
case Surface.ROTATION_90:
rotationDgr = 90;
break;
case Surface.ROTATION_180:
rotationDgr = 180;
break;
case Surface.ROTATION_270:
rotationDgr = 270;
break;
default:
return;
}

mx.postRotate((float) rotationDgr, cX, cY);
textureView.setTransform(mx); //apply transformations to textureview
}
}

最佳答案

为我解决了这个问题。

build.gradle(应用级别)

//添加依赖

implementation 'androidx.core:core:1.5.0-alpha04'

关于android - CameraX - I/zygote : Rejecting re-init on previously-failed class java. lang.Class<androidx.core.view.ViewCompat$2>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029521/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com