【发布时间】:2020-10-27 09:31:58
【问题描述】:
当我开发文本扫描应用程序时,我遇到了一个问题,即当我尝试使用已冻结在我的华为手机上的相机快速扫描/识别文本时。但它适用于其他安卓设备 为什么?
这是 logcat 消息 省略时间和项目包名
I/CameraManagerGlobal: Connecting to camera service
I/HwPointEventFilter: do not support AFT because of no config
I/SendBroadcastPermission: action:huawei.intent.action.APS_TOUCH_ACTION_DOWN, mPermissionType:0
I/SendBroadcastPermission: action:huawei.intent.action.APS_TOUCH_ACTION_UP, mPermissionType:0
清单文件
<activity
android:name=".CameraActivity"
android:screenOrientation="portrait">
</activity>
这是我的 CameraActivity.java
省略导入和包名称
public class CameraActivity extends AppCompatActivity implements View.OnClickListener {
private CameraKitView cameraKitView;
private ImageView btn_capture, btn_flashlight;
private String flashMode = "";
private AlertDialog dialog;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Objects.requireNonNull(getSupportActionBar()).hide();
mContext = this;
cameraKitView = findViewById(R.id.camera);
btn_capture = findViewById(R.id.btn_capture);
btn_flashlight = findViewById(R.id.btn_flashlight);
cameraKitView.requestPermissions(this);
flashMode = SharedHelper.getKey(this, "flashMode");
if (flashMode.isEmpty() || flashMode.equals("off")) {
flashMode = "off";
flash("off");
}
flash(flashMode);
btn_flashlight.setOnClickListener(this);
btn_capture.setOnClickListener(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setTitle(R.string.processing);
builder.setView(R.layout.loading_dialoag);
dialog = builder.create();
}
public void flash(String mode) {
switch (mode) {
case "off":
cameraKitView.setFlash(CameraKit.FLASH_OFF);
btn_flashlight.setImageDrawable(getDrawable(R.drawable.ic_flash_off_white_24dp));
break;
case "on":
cameraKitView.setFlash(CameraKit.FLASH_ON);
btn_flashlight.setImageDrawable(getDrawable(R.drawable.ic_flash_on_white_24dp));
break;
case "auto":
cameraKitView.setFlash(CameraKit.FLASH_AUTO);
btn_flashlight.setImageDrawable(getDrawable(R.drawable.ic_flash_auto_white_24dp));
break;
}
}
@Override
protected void onStart() {
super.onStart();
cameraKitView.onStart();
}
@Override
protected void onResume() {
super.onResume();
cameraKitView.onResume();
}
@Override
protected void onPause() {
cameraKitView.onPause();
super.onPause();
}
@Override
protected void onStop() {
cameraKitView.onStop();
super.onStop();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(this, "You must allow permission to use the camera", Toast.LENGTH_SHORT).show();
finish();
}
cameraKitView.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void onClick(View view) {
if (view == btn_capture) {
cameraKitView.captureImage(new CameraKitView.ImageCallback() {
@Override
public void onImage(CameraKitView cameraKitView, final byte[] capturedImage) {
// capturedImage contains the image from the CameraKitView.
captureSound();
BitmapFactory.Options opts = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeByteArray(capturedImage, 0, capturedImage.length, opts);
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
imageProcessor(image);
dialog.show();
cameraKitView.onStop();
}
});
} else if (view == btn_flashlight) {
switch (flashMode) {
case "off":
flashMode = "on";
flash("on");
SharedHelper.putKey(this, "flashMode", "on");
break;
case "on":
flashMode = "auto";
flash("auto");
SharedHelper.putKey(this, "flashMode", "auto");
break;
case "auto":
flashMode = "off";
flash("off");
SharedHelper.putKey(this, "flashMode", "off");
break;
}
}
}
public void imageProcessor(FirebaseVisionImage image) {
FirebaseVisionDocumentTextRecognizer detector = FirebaseVision.getInstance()
.getCloudDocumentTextRecognizer();
detector.processImage(image)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionDocumentText>() {
@Override
public void onSuccess(FirebaseVisionDocumentText result) {
dialog.dismiss();
Intent intent = new Intent(CameraActivity.this, TextActivity.class);
intent.putExtra("result", result.getText());
startActivity(intent);
overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
finish();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
dialog.dismiss();
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("Processing Failed");
builder.setMessage(e.getLocalizedMessage());
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
cameraKitView.onStart();
cameraKitView.onResume();
}
}).show();
}
});
}
public void captureSound(){
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
switch( audio.getRingerMode() ){
case AudioManager.RINGER_MODE_NORMAL:
MediaActionSound sound = new MediaActionSound();
sound.play(MediaActionSound.SHUTTER_CLICK);
break;
case AudioManager.RINGER_MODE_SILENT:
break;
case AudioManager.RINGER_MODE_VIBRATE:
break;
}
}
}
【问题讨论】:
标签: android android-camera2 google-cloud-vision huawei-mobile-services huawei-developers