java - 如何将相机预览放在扩展 InputMethodService 的类中?
问题描述
我正在创建一个自定义键盘,并且我在键盘内放置了一个相机的预览视图。但我似乎无法将其绑定到生命周期或获取相机源。我的键盘视图服务如下:
public class MainActivity extends InputMethodService
{
private LinearLayout keyboardView;
InputMethodManager imm;
PreviewView mPreviewView;
Button capture;
@SuppressLint("InflateParams")
@Override
public View onCreateInputView()
{
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
LayoutInflater inflater=getLayoutInflater();
mPreviewView=(PreviewView)inflater.inflate(R.layout.keyboard_view, null).findViewById(R.id.camera);
capture=(Button)inflater.inflate((R.layout.keyboard_view), null).findViewById(R.id.button);
keyboardView = (LinearLayout) inflater.inflate(R.layout.keyboard_view, null);
startCamera();
return keyboardView;
}
//endregion
private void startCamera() {
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(new Runnable() {
@Override
public void run() {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
bindPreview(cameraProvider);
} catch (ExecutionException | InterruptedException e) {
// No errors need to be handled for this Future.
// This should never be reached.
}
}
}, ContextCompat.getMainExecutor(getApplicationContext()));
}
void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {
Preview preview = new Preview.Builder()
.build();
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();
ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build();
ImageCapture.Builder builder = new ImageCapture.Builder();
//Vendor-Extensions (The CameraX extensions dependency in build.gradle)
HdrImageCaptureExtender hdrImageCaptureExtender = HdrImageCaptureExtender.create(builder);
// Query if extension is available (optional).
if (hdrImageCaptureExtender.isExtensionAvailable(cameraSelector)) {
// Enable the extension if available.
hdrImageCaptureExtender.enableExtension(cameraSelector);
}
final ImageCapture imageCapture = builder
.build();
mPreviewView.setScaleType(PreviewView.ScaleType.FILL_CENTER);
preview.setSurfaceProvider(mPreviewView.getSurfaceProvider());
Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageAnalysis, imageCapture);
capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap image = mPreviewView.getBitmap();
//Do something with the bitmap
}
});
}
有什么想法可以在其中实现 Camera Preview View 甚至调用 Camera Capture 意图吗?两者中的任何一个都可以,直到它将位图无误地返回给我。
解决方案
推荐阅读
- spring-boot - 不为映射器类注入模拟数据时的 NPE(弹簧启动)
- javascript - 字符串给定值的方形数组
- flutter - 获取类型“Null”不是“Future”类型的子类型
' 在使用 mockito 的颤振单元测试中进行类型转换 - python - 如何在python中将单词更改为实际符号?
- python - Django.db.models.deletion related_objects 需要 3 个位置参数
- php - 如何在 PHP 中为 Null 变量值分配 0
- c# - 如何对 IIS 服务器中的网页进行密码保护?
- asp.net-web-api - 获取 ASP .Net Core WebAPI 中的所有身份角色
- ios - 致命异常:NSInternalInconsistencyException 无法出列同类视图:UICollectionElementKindCell
- java - 在 ImageView 中显示 Facebook 个人资料图像的问题