2011-12-21 15 views
7

android.content.Contextで定義されている定数はWINDOW_SERVICEと考えられていました。WINDOW_SERVICEは変数に解決できません

http://developer.android.com/reference/android/content/Context.html#WINDOW_SERVICE

Iは、次のコードセグメントで使用する場合、それは変数として解決できないというエラーをスローします。

Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

ここでは完全なコードです:

package com.commonsware.android.skeleton; 

import android.app.Activity; 
import android.content.Context; 
import android.hardware.Camera; 
import android.hardware.Camera.*; 
import android.os.Bundle; 
import android.view.Display; 
import android.view.Surface; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.FrameLayout; 
import java.io.IOException; 
import java.util.List; 

// ---------------------------------------------------------------------- 

public class SimpleBulbActivity extends Activity { 
    private Preview mPreview; 
    FrameLayout preview; 

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

     // Hide the window title. 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 
    } 

    protected void onResume() { 
     super.onResume(); 
     //Setup the FrameLayout with the Camera Preview Screen 
     mPreview = new Preview(this); 
     preview = (FrameLayout)findViewById(R.id.preview); 
     preview.addView(mPreview); 
    } 

} 

// ---------------------------------------------------------------------- 

class Preview extends SurfaceView implements SurfaceHolder.Callback { 
    SurfaceHolder mHolder; 
    Camera mCamera; 

    Preview(Context context) { 
     super(context); 

     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     // The Surface has been created, acquire the camera and tell it where 
     // to draw. 
     mCamera = Camera.open(); 
     try { 
      mCamera.setPreviewDisplay(holder); 
     } catch (IOException exception) { 
      mCamera.release(); 
      mCamera = null; 
      // TODO: add more exception handling logic here 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     // Surface will be destroyed when we return, so stop the preview. 
     // Because the CameraDevice object is not a shared resource, it's very 
     // important to release it when the activity is paused. 
     mCamera.stopPreview(); 
     mCamera.release(); 
     mCamera = null; 
    } 


    private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { 
     final double ASPECT_TOLERANCE = 0.05; 
     double targetRatio = (double) w/h; 
     if (sizes == null) return null; 

     Size optimalSize = null; 
     double minDiff = Double.MAX_VALUE; 

     int targetHeight = h; 

     // Try to find an size match aspect ratio and size 
     for (Size size : sizes) { 
      double ratio = (double) size.width/size.height; 
      if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
      if (Math.abs(size.height - targetHeight) < minDiff) { 
       optimalSize = size; 
       minDiff = Math.abs(size.height - targetHeight); 
      } 
     } 

     // Cannot find the one match the aspect ratio, ignore the requirement 
     if (optimalSize == null) { 
      minDiff = Double.MAX_VALUE; 
      for (Size size : sizes) { 
       if (Math.abs(size.height - targetHeight) < minDiff) { 
        optimalSize = size; 
        minDiff = Math.abs(size.height - targetHeight); 
       } 
      } 
     } 
     return optimalSize; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     // Now that the size is known, set up the camera parameters and begin 
     // the preview. 
     Camera.Parameters parameters = mCamera.getParameters(); 

     List<Size> sizes = parameters.getSupportedPreviewSizes(); 
     Size optimalSize = getOptimalPreviewSize(sizes, w, h); 
     parameters.setPreviewSize(optimalSize.width, optimalSize.height); 

     Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

     if(display.getRotation() == Surface.ROTATION_0) 
     { 
      parameters.setPreviewSize(h, w);       
      mCamera.setDisplayOrientation(90); 
     } 

     if(display.getRotation() == Surface.ROTATION_90) 
     { 
      parameters.setPreviewSize(w, h);       
     } 

     if(display.getRotation() == Surface.ROTATION_180) 
     { 
      parameters.setPreviewSize(h, w);    
     } 

     if(display.getRotation() == Surface.ROTATION_270) 
     { 
      parameters.setPreviewSize(w, h); 
      mCamera.setDisplayOrientation(180); 
     } 

     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
    } 

} 

答えて

14

Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
+1

オーケー素晴らしい...試してみてくださいそのエラーを取り除くが、とそれを置き換えてしまった: 'メソッドは、 getSystemService(String)は、私には意味をなさない型Previewのために定義されていません。 –

+0

私の現在のプロジェクトで使用するものではありませんが、ActivtiesとEclipseのいずれかでその行(逐語)を試してみましたが、エラーや警告は表示されませんでした。 – Squonk

+0

これは、プレビューというクラス内で使っているという事実に絞っています。あなたが私のコードを見ることができるように、私はその投稿を更新します。 –

関連する問題