2011-10-20 8 views
2

私は私のアンドロイドapp.forこのためのカメラ機能を実装しようと思って、私はインターネット上で多くのことを検索しアンドロイドカメラ実装

を使用して、独自のカメラのクラスを設計

  1. カメラ機能を実装するための2方法を見つけました

    android.view.SurfaceHolder and android.view.SurfaceView

しかし、このアプローチは、私は私のコード複合体を作る多くのものの世話をする必要があり、こののように私にはよく見るん。

   私はデバイスカメラを呼び出す意図を使用できます。今、再びこの中で、私はMediaStore.EXTRA_OUTPUTを使用いけない場合、私は私ではありませんサムネイルを取得MediaStore.EXTRA_OUTPUT

を使用してMediaStore.EXTRA_OUTPUTを使用していない2オプション

                        i)を持っています実際の要件。私はこのサムネイルを拡大縮小すると、私は低品質の画像を見つけるので、これよりも大きな画像が必要です。

私はMediaStore.EXTRA_OUTPUTを使用している場合、私は意図がnullで見つける

onActivityResult(int requestCode, int resultCode, Intent intent)

のようにサムスンのようないくつかのデバイス上の任意の画像を得るくぼみ。インターネットでたくさんの検索をしたところ、これはデバイス固有の問題であることがわかりました。私は私と三星銀河を持っています。私はこの問題に直面しています。

私のコードをデバイス固有のコードにしたくないです。どのように私のコードを一般的にするかを教えてくれる人もいます。あなたの分析のために、私は次のコード

@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、ギャラクシータブ、ギャラクシープロのように)使用しているすべてのサムスンのデバイスで正常に動作します。

関連する問題