前景提要
HDC调试需求开发(15万预算),能者速来!>>> 代码如下:现在的问题是,它一直在扫描,始终不执行handleDecode()方法。 public class ScanCodeActivity extends Activity implements Callback { private CaptureActivityHandler handler ; private ViewfinderView viewfinderView ; private boolean hasSurface ; private Vector<BarcodeFormat> decodeFormats ; private String characterSet ; private InactivityTimer inactivityTimer ; private MediaPlayer mediaPlayer ; private boolean playBeep ; private static final float BEEP_VOLUME = 0.10f ; private boolean vibrate ; @Override public void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState) ; setContentView(R.layout. activity_scan_code ) ; ButterKnife. bind ( this ) ; //初始化 CameraManager CameraManager. init (getApplication()) ; viewfinderView = (ViewfinderView) findViewById(R.id. viewfinder_view ) ; hasSurface = false; inactivityTimer = new InactivityTimer( this ) ; } //返回 @OnClick ({R.id. back_btn , R.id. back_img }) void scanCodeBack () { this .finish() ; } @Override protected void onResume () { super .onResume() ; SurfaceView surfaceView = (SurfaceView) findViewById(R.id. preview_view ) ; SurfaceHolder surfaceHolder = surfaceView.getHolder() ; if ( hasSurface ) { initCamera(surfaceHolder) ; } else { surfaceHolder.addCallback( this ) ; surfaceHolder.setType(SurfaceHolder. SURFACE_TYPE_PUSH_BUFFERS ) ; } decodeFormats = null; characterSet = null; playBeep = true; AudioManager audioService = (AudioManager) getSystemService( AUDIO_SERVICE ) ; if (audioService.getRingerMode() != AudioManager. RINGER_MODE_NORMAL ) { playBeep = false; } initBeepSound() ; vibrate = true; } @Override protected void onPause () { super .onPause() ; if ( handler != null ) { handler .quitSynchronously() ; handler = null; } CameraManager. get ().closeDriver() ; } @Override protected void onDestroy () { inactivityTimer .shutdown() ; super .onDestroy() ; } private void initCamera (SurfaceHolder surfaceHolder) { try { CameraManager. get ().openDriver(surfaceHolder) ; } catch (IOException ioe) { return; } catch (RuntimeException e) { return; } if ( handler == null ) { handler = new CaptureActivityHandler( this, decodeFormats , characterSet ) ; } } @Override public void surfaceChanged (SurfaceHolder holder , int format , int width , int height) { } @Override public void surfaceCreated (SurfaceHolder holder) { if (! hasSurface ) { hasSurface = true; initCamera(holder) ; } } @Override public void surfaceDestroyed (SurfaceHolder holder) { hasSurface = false; } public ViewfinderView getViewfinderView () { return viewfinderView ; } public Handler getHandler () { return handler ; } public void drawViewfinder () { viewfinderView .drawViewfinder() ; } public void handleDecode (Result result , Bitmap barcode) { inactivityTimer .onActivity() ; playBeepSoundAndVibrate() ; String resultString = result.getText() ; Log. i ( "resultString=" , "" +resultString) ; if (resultString.equals( "" )) { Toast. makeText (ScanCodeActivity. this, "扫码失败,请重试!" , Toast. LENGTH_SHORT ).show() ; } else { Intent resultIntent = new Intent() ; Bundle bundle = new Bundle() ; bundle.putString( "result" , resultString) ; bundle.putParcelable( "bitmap" , barcode) ; resultIntent.putExtras(bundle) ; this .setResult( RESULT_OK , resultIntent) ; } //ScanCodeActivity.this.finish(); } private void initBeepSound () { if ( playBeep && mediaPlayer == null ) { setVolumeControlStream(AudioManager. STREAM_MUSIC ) ; mediaPlayer = new MediaPlayer() ; mediaPlayer .setAudioStreamType(AudioManager. STREAM_MUSIC ) ; mediaPlayer .setOnCompletionListener( beepListener ) ; AssetFileDescriptor file = getResources().openRawResourceFd( R.raw. beep ) ; try { mediaPlayer .setDataSource(file.getFileDescriptor() , file.getStartOffset() , file.getLength()) ; file.close() ; mediaPlayer .setVolume( BEEP_VOLUME , BEEP_VOLUME ) ; mediaPlayer .prepare() ; } catch (IOException e) { mediaPlayer = null; } } } private static final long VIBRATE_DURATION = 200L ; private void playBeepSoundAndVibrate () { if ( playBeep && mediaPlayer != null ) { mediaPlayer .start() ; } if ( vibrate ) { Vibrator vibrator = (Vibrator) getSystemService( VIBRATOR_SERVICE ) ; vibrator.vibrate( VIBRATE_DURATION ) ; } } private final OnCompletionListener beepListener = new OnCompletionListener() { public void onCompletion (MediaPlayer mediaPlayer) { mediaPlayer.seekTo( 0 ) ; } } ; }