2011-12-21 9 views
7

पर हल नहीं किया जा सकता है, मैंने सोचा था कि WINDOW_SERVICE को android.content.Context में निरंतर परिभाषित किया जाना चाहिए था।WINDOW_SERVICE को एक चर

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

जब मैं कोड की निम्न खंड में इसका इस्तेमाल करते हैं यह कहा कि यह एक चर के रूप में नहीं सुलझाया जा सकता है एक त्रुटि फेंकता है।

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 (स्ट्रिंग) प्रकार पूर्वावलोकन के लिए अपरिभाषित है जो मुझे कोई समझ नहीं आता है। –

+0

ऐसा कुछ नहीं है जिसका मेरे पास मेरे वर्तमान प्रोजेक्ट में उपयोग किया गया है, लेकिन मैंने अपनी सक्रियताओं में से एक में उस पंक्ति (क्रियात्मक) की कोशिश की है और ग्रहण ने बिना किसी त्रुटि या चेतावनियों के इसे बनाया है। – Squonk

+0

ठीक है मैंने इसे इस तथ्य से कम कर दिया है कि मैं इसे पूर्वावलोकन नामक कक्षा के भीतर उपयोग कर रहा हूं। मैं पोस्ट अपडेट करूँगा ताकि आप मेरे कोड को देख सकें। –

संबंधित मुद्दे