简体   繁体   English

Android相机2

[英]Android camera2

I'm trying to create simple camera application. 我正在尝试创建简单的相机应用程序。 here is source code: 这是源代码:

package com.homeinc.basiccamera2.app;   
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;


public class MainActivity extends AppCompatActivity {

    public static final int CAPTURE_IMAGE_ACTIVITY_REQUST_CODE = 100;
    private static final int MEDIA_TYPE_IMAGE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public  void takePicture(View view){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUST_CODE);
    }

    private Uri getOutputMediaFileUri(int type) {
        File imagesFolder = new File(Environment.getExternalStoragePublicDirectory(
                                     Environment.DIRECTORY_PICTURES),"myPics");
        if (!imagesFolder.exists()){
            if (!imagesFolder.mkdirs()){
                Log.d("BasicCamera2","cant create dir");
            }
        }
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File image = new File(imagesFolder.getPath()+File.separator+"IMG_"+timeStamp+".jpg");
        Uri uriSavedImage = Uri.fromFile(image);
        return uriSavedImage;
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUST_CODE && data != null){
            if (resultCode == RESULT_OK){
                Toast.makeText(this, "saved: " + data.getAction(), Toast.LENGTH_LONG).show();
            }
            else if (resultCode == RESULT_CANCELED){
                // canceled
                Toast.makeText(this, "saved: " + data.getAction(), Toast.LENGTH_LONG).show();
            } else {
                // fail
                Toast.makeText(this, "cant save: " + data.getAction(), Toast.LENGTH_LONG).show();
            }
        }
    }
}

Look at onActivityResult method it has 3 parameters, and it should receive data from Intent in data param, but it always null. 看一下onActivityResult方法,它具有3个参数,并且应该在数据参数中从Intent接收数据,但始终为null。 Pleas tell me what I do wrong? 请告诉我我做错了什么?

I think something like this (you can just need to define the directory and file name) should do the trick for you. 我认为类似这样的事情(您只需要定义目录和文件名)就可以为您解决问题。 There is no need to use the Intent to obtain the picture as you give the location of the file. 在指定文件位置时,无需使用Intent获取图片。

private void takePicture() {
    File newdir = new File(getImageDir());
    newdir.mkdirs();

    String file = getFileName();
    File newfile = new File(file);
    try {
        newfile.createNewFile();
    } catch (IOException e) {}

    Uri outputFileUri = Uri.fromFile(newfile);

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

    startActivityForResult(cameraIntent, CAPTURE_IMAGE_ACTIVITY_REQUST_CODE);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUST_CODE && resultCode == RESULT_OK) {
        useFileName(getFileName());
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM