在我的应用程序

时间:2016-04-16 22:56:35

标签: android camera android-camera

我之前从未试图在我的某个项目中拍照,所以我为可能提出一个愚蠢的问题而道歉。基本上,我使用以下代码尝试拍照,然后将其保存在临时文件中。我没有收到任何错误,但没有发生任何事情。我发现代码的最后部分中的IOException被抛出。如果你知道为什么会这样,我真的很感谢你的帮助。谢谢! 使用的权限:

<uses-feature android:name="android.hardware.camera"
                              android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

代码:  

 import android.content.Intent;
    import android.net.Uri;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;

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

    public class MainActivity extends AppCompatActivity {
        static final int REQUEST_IMAGE_CAPTURE = 1;
        private static final String TAG = "MainActivity";
        String mCurrentPhotoPath;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button takePicButton = (Button)findViewById(R.id.takePicButton);
            takePicButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dispatchTakePictureIntent();
                }
            });
        }

        private File createImageFile() throws IOException {
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

            String imageFileName = "JPEG_" + timeStamp + "_";
            File storageDir = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES);
            File image = File.createTempFile(
                    imageFileName,  /* prefix */
                    ".jpg",         /* suffix */
                    storageDir      /* directory */
            );

            mCurrentPhotoPath = "file:" + image.getAbsolutePath();
            return image;
        }
        static final int REQUEST_TAKE_PHOTO = 1;

        private void dispatchTakePictureIntent() {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                } catch (IOException ex) {
                    Log.i(TAG, "Searchable, Catch error ocurred");

                }
                if (photoFile != null) {
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(photoFile));
                    startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

好的,您使用的是Android 6.0或更高版本作为目标。从Android 6.0开始,我们有运行时权限,这意味着仅仅在AndroidManifest.xml中添加存储权限是不够的。

有关更多信息,请参阅以下链接: http://developer.android.com/training/permissions/requesting.html

它易于实施,您需要上面的链接。

BR米兰