2011-10-20 95 views
2

,我要實現的拍照功能爲我的Android app.for這一點,我搜索了很多互聯網上,發現來實現拍照功能Android攝像頭實現

  1. 設計使用

    自己的相機類2路

    android.view.SurfaceHolder and android.view.SurfaceView

但這種方法看起來不錯,我在這方面,我必須採取的很多東西,這將使我的代碼複雜的護理。

    2.    我可以使用意圖調用設備攝像頭。現在又在此,我有2個選項使用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(); 
    } 

} 

回答

0

請檢查此鏈接:Capture image using Intent

此代碼工作正常在所有我已經使用了三星設備(如銀河S,Galaxy Tab的,銀河專業版)。