我正在尝试一个月来制作简单的相机捕捉但没有成功。我正在开发的这个应用程序几个月前工作很好,但因为我更新Android到版本7该应用程序停止正常工作。我想点击一个按钮,在捕获后激活相机(内置非api)以在imageview中显示图像(高质量)并将图像保存到图片文件夹。之后将图像发送到服务器。在我的应用程序的现有版本中,我捕获图像,在imageview中显示保存的图像并通过json发送到服务器。现在活动结果为空,imageview为空:-(请帮助
旧代码很有效率
public void onClick(View v) {
switch (v.getId()) {
case R.id.cancel_btn:
finish();
break;
case R.id.camera_btn:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
Uri u = data.getData();
Log.d("u", String.valueOf(u));
theImageUriStr = String.valueOf(u);
Log.d("theImageUriStr", String.valueOf(theImageUriStr));
mImageView = (ImageView) findViewById(R.id.mImageView);
ALBUM_ART_URI = Uri.parse(String.valueOf(theImageUriStr));
Picasso.with(AddNewDish.this).load(ALBUM_ART_URI).into(mImageView);
}
else{
Log.d("mmmm", String.valueOf(resultCode));
}
}
我从Log.d获得的结果和theImageUriStr为空
答案 0 :(得分:7)
2017年,
Android中唯一逼真的摄像头方法是革命性的图书馆
它改变了Android开发中的所有内容 -
没有其他可行的方法。
谷歌(实际上是他们的日本办事处)终于自己写了一些让Android摄像头变成实际软件的东西。那是:https://github.com/google/cameraview。那是一个神奇的图书馆,摄像机难度从10到5。flurgle库https://github.com/gogopop/CameraKit-Android是第一个最终解决所有问题并使相机像普通软件一样工作的大门。困难现在是1。
这样做可以在您的应用中放置实时相机
<com.flurgle.camerakit.CameraView
android:id="@+id/camera"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"/>
这样做拍照
cameraView.setCameraListener(new CameraListener() {
@Override
public void onPictureTaken(byte[] picture) {
super.onPictureTaken(picture);
Bitmap result = BitmapFactory.decodeByteArray(picture, 0, picture.length);
save the image...
});
一切都结束了。就是这样。
答案 1 :(得分:0)
如果您希望内置的相机应用程序拍照并将图像返回到您的应用程序,请按照以下步骤操作:
<uses-feature android:name="android.hardware.camera"
android:required="true" />
在您的活动中使用此功能来调用相机:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, 1);
}
}
使用此功能处理从相机接收的图像:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
//mImageView.setImageBitmap(imageBitmap);
}
}
干杯!