2011-11-21 186 views
0

我正在處理這段代碼,並且在我的第一個.java文件中,我用箭頭得到了一個錯誤,它說,jpegcallback無法解析,但它在那裏明確定義。我一直在計算結束時間},並且在最後一行發現錯誤,說沒有足夠的數據,我是否在計數?我似乎無法找到我的程序中的錯誤,在eclipse中它說我的jpegcallback無法解決?

package com.example; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.hardware.Camera.ShutterCallback; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.speech.*; 


public class CameraDemo extends Activity { 
private static final String TAG = "CameraDemo"; 
Camera camera; 
Preview preview; 
Button buttonClick; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    preview = new Preview(this); 
    ((FrameLayout) findViewById(R.id.preview)).addView(preview); 

    buttonClick = (Button) findViewById(R.id.buttonClick); 
    buttonClick.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
--------->    preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); 
     } 
    }); 

    Log.d(TAG, "onCreate'd"); 
} 


ShutterCallback shutterCallback = new ShutterCallback() 
{ 
    public void onShutter() 
    { 
     Log.d(TAG, "onShutter'd"); 
    } 
}; 

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback() 
{ 
    public void onPictureTaken(byte[] data, Camera camera) 
    { 
     Log.d(TAG, "onPictureTaken - raw"); 
    } 

/** Handles data for jpeg picture */ 
PictureCallback jpegCallback = new PictureCallback() 
{ 
    public void onPictureTaken(byte[] data, Camera camera) 
    { 
     FileOutputStream outStream = null; 
     try 
     { 
       // write to local sandbox file system 
//   
      outStream = CameraDemo.this.openFileOutput  (String.format  ("%  d.jpg", System.currentTimeMillis()), 0);  
      // Or write to sdcard 
      outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis())); 
      outStream.write(data); 
      outStream.close(); 
      Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
     } 
     Log.d(TAG, "onPictureTaken - jpeg"); 
    } 

    @Override 
    protected void 
      onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       List<String> heard = 
         data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
       for (int i = 0; i < heard.size(); i++) 
       { 
        Log.d(TAG, i + ": " + heard.get(i)); 
       } 
       receiveWhatWasHeard(heard); 
      } 
      else 
      { 
//fail 
      } 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
}; 

protected void receiveWhatWasHeard(List<String> heard) 
{ 
    WordDictionary command = new WordDictionary("Add"); 
    for (String said : heard) 
    { 
     if (command.isIn(said.split("\\s"))) 
     { 
      Log.d(TAG, "heard add"); 
     } 
    } 
} 


public class WordDictionary 
{ 
    private Set<String> words; 

    public WordDictionary(String... wordsIn) 
    { 
     this(Arrays.asList(wordsIn)); 
    } 

    public WordDictionary(List<String> wordsIn) 
    { 
     words = new LinkedHashSet<String>(wordsIn); 
    } 

    public Set<String> getWords() 
    { 
     return words; 
    } 

    public boolean isIn(String word) 
    { 
     return words.contains(word); 
    } 

    public boolean isIn(String [] wordsIn) 
    { 
     boolean wordIn = false; 
     for (String word : wordsIn) 
     { 
      if (isIn(word)) 
      { 
       wordIn = true; 
       break; 
      } 
     } 
     return wordIn; 
     } 
} 

preview.java 

package com.example; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.hardware.Camera; 
import android.hardware.Camera.PreviewCallback; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 


class Preview extends SurfaceView implements SurfaceHolder.Callback { 
private static final String TAG = "Preview"; 

SurfaceHolder mHolder; 
public Camera camera; 

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. 
    camera = Camera.open(); 
    try { 
     camera.setPreviewDisplay(holder); 


     camera.setPreviewCallback(new PreviewCallback() { 

      public void onPreviewFrame(byte[] data, Camera arg1) { 
       FileOutputStream outStream = null; 
       try { 
        outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis())); 
        outStream.write(data); 
        outStream.close(); 
        Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
       } 
        Preview.this.invalidate(); 
      } 
     }); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

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. 
    camera.stopPreview(); 
    camera = null; 
} 

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 = camera.getParameters(); 
    parameters.setPreviewSize(w, h); 
    camera.setParameters(parameters); 
    camera.startPreview(); 
} 

@Override 
public void draw(Canvas canvas) { 
     super.draw(canvas); 
     Paint p= new Paint(Color.RED); 
     Log.d(TAG,"draw"); 
     canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p); 
} 
} 
main.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" android:id="@+id/layout"> 
<TextView android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:text="VoCam" 
    android:textSize="24sp" /> 

<FrameLayout android:id="@+id/preview" 
    android:layout_weight="1" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
</FrameLayout> 

<Button android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:id="@+id/buttonClick" 
    android:text="Listening" android:layout_gravity="center"></Button> 

</LinearLayout> 

manifest.xml 
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example" android:versionCode="1" android:versionName="1.0"> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".CameraDemo" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 
<uses-sdk android:minSdkVersion="7" /> 

<uses-permission android:name="android.permission.CAMERA" /> 
</manifest> 
+0

什麼是jpegCallback這裏。 –

+0

請發佈例外日誌 – Jack

回答

0

它看起來像你不必在一個rawCallBack右括號,這麼樣吧「消耗」 JPEG回調(SEE插入支承HERE LINE)

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback() 
{ 
    public void onPictureTaken(byte[] data, Camera camera) 
    { 
     Log.d(TAG, "onPictureTaken - raw"); 
    } 
}; <-------------INSERT BRACE HERE 
/** Handles data for jpeg picture */ 
PictureCallback jpegCallback = new PictureCallback() 
{ 
    public void onPictureTaken(byte[] data, Camera camera) 
    { 
     FileOutputStream outStream = null; 
     try 
     { 
       // write to local sandbox file system 
//   
      outStream = CameraDemo.this.openFileOutput  (String.format  ("%  d.jpg", System.currentTimeMillis()), 0);  
      // Or write to sdcard 
0

在聲明中PictureCallback rawCallBack,看起來你在onPictureTaken方法後面缺少一個右括號(})。

0

你想關閉}這裏:

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 
    Log.d(TAG, "onPictureTaken - raw"); 
    } 
} //---------------------in this line :)!--------------- 
相關問題