android相机实现

时间:2011-10-20 05:33:32

标签: android camera

我将为我的Android应用程序实现相机功能。为此,我在互联网上搜索了很多,并找到了实现相机功能的2种方法

  1. 使用

    设计自己的相机类

    android.view.SurfaceHolder and android.view.SurfaceView

  2. 但这种做法对我来说确实很好,因为我必须处理许多会使我的代码变得复杂的事情。

    2.我可以使用意图来调用设备相机。现在再次在这里,我有2个选项

    i)使用MediaStore.EXTRA_OUTPUT而不使用MediaStore.EXTRA_OUTPUT

    如果我不使用MediaStore.EXTRA_OUTPUT,我会得到一个不是我的实际要求的缩略图。我需要比这更大的图像,所以如果我缩放这个缩略图,我会发现低质量的图像。

    如果我使用MediaStore.EXTRA_OUTPUT我会在某些设备上获取任何图片,例如三星,

    onActivityResult(int requestCode, int resultCode, Intent intent)

    我发现意图为空。在互联网上搜索了很多,我发现这是特定于设备的问题。我有三星Galaxy。在这方面我正面临着这个问题。

    我不希望我的代码成为特定于设备的代码。所以任何人都可以告诉我如何使我的代码通用。为了您的分析,我使用以下代码

    @Override
    public void onCreate(Bundle savedInstanceState) {
    
        try {
    
            super.onCreate(savedInstanceState);         
                    File root = new File(Environment
                            .getExternalStorageDirectory()
                            + File.separator + "myDir" + File.separator)
                    if(!root.exists()){
                        root.mkdirs();
                    }
                    sdImageMainDirectory = new File(root, "myPicName");
                startCameraActivity();
            }
        catch (Exception e) {
            finish();
            Toast.makeText(this, "Error occured. Please try again later.",
                    Toast.LENGTH_SHORT).show();
        }
    }
    Uri outputFileUri;
    protected void startCameraActivity() {
    
        outputFileUri = Uri.fromFile(sdImageMainDirectory);
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(intent, 0);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (resultCode) {
        case 0:
            finish();
            break;
    
        case -1:
    
            try {
                if(intent != null)
                StoreImage(this, Uri.parse(intent.toURI()),
                        sdImageMainDirectory);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
    
            Intent i = new Intent(this,Home.class);
            i.putExtra("url", outputFileUri);
            startActivity(i);
            finish();
        }
    
    }
    public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
        Bitmap bm = null;
        try {
            bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
            FileOutputStream out = new FileOutputStream(imageDir);
            bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
            bm.recycle();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }
    

1 个答案:

答案 0 :(得分:0)

请检查此链接:Capture image using Intent

此代码适用于我使用的所有三星设备(如Galaxy S,Galaxy Tab,Galaxy Pro)。