2016-09-17 3 views
0

私はチュートリアルのオンラインhereを見つけました。画像をキャプチャするために、両方とも非常によく似ています。なぜ私のカメラコードが機能していないのか理解しています。Androidカメラのプレビューが表示されない

私はAndroidで構文エラーが発生しませんが、希望の断片に行くと白い画面になりますが、カメラの表示はありません。なぜ私は両方のコード例を深く見てグーグル私の問題だが何も見つけられない。私のコードとの唯一の違いは、アクティビティではなくフラグメントです。誰か助けてくれますか?ここで

は私のコードです:ここでは

public class Image extends Fragment implements SurfaceHolder.Callback { 

private ImageView imageView; 
private SurfaceView mSurfaceView; 
private Bitmap capturedImage; 


//Camera 

private SurfaceHolder sHolder; 
private Camera mCamera; 
private Parameters parameters; 

/**********************************************/ 

public Image() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.image_activity, container, false); 

    imageView = (ImageView) view.findViewById(R.id.imageView); 
    mSurfaceView = (SurfaceView) view.findViewById(R.id.surfaceView); 

    //Get a surface 
    sHolder = mSurfaceView.getHolder(); 

    //add the callback interface methods defined below as the Surface View callbacks 
    sHolder.addCallback(this); 

    //tells Android that this surface will have its data constantly replaced 
    sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    return view; 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 

    // The Surface has been created, acquire the camera and tell it where 
    // to draw the preview. 

    mCamera = Camera.open(); 
    try { 
     mCamera.setPreviewDisplay(holder); 

    } catch (IOException exception) { 
     mCamera.release(); 
     mCamera = null; 
    } 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 


    //get camera parameters 
    parameters = mCamera.getParameters(); 

    parameters.setPreviewSize(352, 288); 
    //set camera parameters 
    mCamera.setParameters(parameters); 
    mCamera.startPreview(); 

    //sets what code should be executed after the picture is taken 
    Camera.PictureCallback mCall = new Camera.PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      //decode the data obtained by the camera into a Bitmap 
      capturedImage = BitmapFactory.decodeByteArray(data, 0, data.length); 
      String filename= Environment.getExternalStorageDirectory() 
        + File.separator + "testimage.jpg"; 
      FileOutputStream out = null; 
      try { 
       out = new FileOutputStream(filename); 
       capturedImage.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance 
       // PNG is a lossless format, the compression factor (100) is ignored 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        if (out != null) { 
         out.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      //set the iv_image 
      imageView.setImageBitmap(capturedImage); 
     } 
    }; 

    mCamera.takePicture(null, null, mCall); 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

    mCamera.stopPreview(); 
    mCamera.release(); 
    mCamera = null; 
    } 
} 

は私のXMLファイルです:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<SurfaceView 
    android:id="@+id/surfaceView" 
    android:layout_height="0dip" 
    android:layout_width="0dip"> 

</SurfaceView> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView"> 

</ImageView> 

</LinearLayout> 

アップデート1:ここでは

は私のマニフェストファイルで、私はこれを含めるのを忘れ:

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

私も有効にしましたアプリケーションのマシュマロの設定ではなく、まだ何も

アップデート2表示されません権限:ただAPI 17デバイスでそれを試してみましたが、何のプレビュー

+0

誰でもお手伝いできますか? Iveは私が知っているすべてを試しました – AndroidLearner

+0

このコードを文字通りコピーして新しいクラスに貼り付けました。誰かがこのplsをテストできますか? http://stackoverflow.com/documentation/android/4789/camera-and-gallery/12655/take-photo#t=201609161413543951207 – AndroidLearner

+0

いくつかの基本的なデバッグのヒント: 1)スタートアップの各段階にいくつかのロギングステートメントを追加するそれらがすべてあなたが期待する順序で実行されていることを確認してください。そうでなければ、手がかりがある。 2)あなたのアプリを起動したときのlogcat出力に質問が含まれています –

答えて

1

はまだありません は必ず必要なカメラを追加したしてくださいAndroidManifest.xmlファイルへのアクセス許可& marshmallowを使用している場合は、=>アプリケーション=>アプリケーションマネージャ=>あなたのアプリケーション=>許可を有効にするステップをもう一度チェックしてください。

+0

私の投稿を更新しました – AndroidLearner

1

あなたのコードはすべてあなた1つの可能性があります:setPreviewSize(352, 288) - そのサイズはサポートされていない可能性があります。

サポートされているプレビューサイズのリストを確認して選択するか、基本的に常に利用可能な320,240または640,480を使用する必要があります。

関連する問題