Zbar with Android : Scanner camera viewport remain inactive and black after showing the url in browser -


i need have qr scanner in project. use zbar doing task. did small change on example code given zbar git example job. need show scanned result in browser(if url) or in dialog(if normal information).

every thing working code given bellow except if try show url after scan qr code in browser. when come app browser camera viewport turns black , remain inactive. tried camera active scan qr code failed. tried reopen camera in onresume() function causes error , forcefully exited app. please me on issue.

    package com.myapp;     import net.sourceforge.zbar.config;     import net.sourceforge.zbar.image;     import net.sourceforge.zbar.imagescanner;     import net.sourceforge.zbar.symbol;     import net.sourceforge.zbar.symbolset;     import android.app.activity;     import android.app.alertdialog;     import android.content.dialoginterface;     import android.content.intent;     import android.content.pm.activityinfo;     import android.hardware.camera;     import android.hardware.camera.autofocuscallback;     import android.hardware.camera.previewcallback;     import android.hardware.camera.size;     import android.net.uri;     import android.os.bundle;     import android.os.handler;     import android.webkit.urlutil;     import android.widget.framelayout;      import com.myapp.camerapreview;     /* import zbar class files */      public class qrscanneractivity extends activity     {         private camera mcamera;         private camerapreview mpreview;         private handler autofocushandler;          imagescanner scanner;          private boolean barcodescanned = false;         private boolean previewing = true;          static {             system.loadlibrary("iconv");         }           @override         protected void oncreate(bundle savedinstancestate) {              super.oncreate(savedinstancestate);              setcontentview(r.layout.qr_scanner_main);              setrequestedorientation(activityinfo.screen_orientation_portrait);              autofocushandler = new handler();             mcamera = getcamerainstance();              /* instance barcode scanner */             scanner = new imagescanner();             scanner.setconfig(0, config.x_density, 3);             scanner.setconfig(0, config.y_density, 3);              mpreview = new camerapreview(this, mcamera, previewcb, autofocuscb);             framelayout preview = (framelayout)findviewbyid(r.id.camerapreview);             preview.addview(mpreview);         }          @override         protected void onpause() {             super.onpause();             releasecamera();             //finish();         }          /** safe way instance of camera object. */         public static camera getcamerainstance(){             camera c = null;             try {                 c = camera.open();             } catch (exception e){             }             return c;         }          private void releasecamera() {             //toast.maketext(qrscanneractivity.this, "paused state", toast.length_short).show();             if (mcamera != null) {                 previewing = false;                 mcamera.setpreviewcallback(null);                 mpreview.getholder().removecallback(mpreview);                 mcamera.release();                 mcamera = null;             }          }          private runnable doautofocus = new runnable() {                 public void run() {                     if (previewing)                         mcamera.autofocus(autofocuscb);                 }             };          previewcallback previewcb = new previewcallback() {                 public void onpreviewframe(byte[] data, camera camera) {                     camera.parameters parameters = camera.getparameters();                     size size = parameters.getpreviewsize();                      image barcode = new image(size.width, size.height, "y800");                     barcode.setdata(data);                      int result = scanner.scanimage(barcode);                     string qrscannerresult;                      if (result != 0) {                         previewing = false;                         mcamera.setpreviewcallback(null);                         mcamera.stoppreview();                          symbolset syms = scanner.getresults();                         (symbol sym : syms) {                             qrscannerresult = sym.getdata();                             showresultaction(qrscannerresult);                             barcodescanned = true;                          }                     }                 }             };          // mimic continuous auto-focusing         autofocuscallback autofocuscb = new autofocuscallback() {                 public void onautofocus(boolean success, camera camera) {                     autofocushandler.postdelayed(doautofocus, 1000);                 }             };          private void showresultaction(string qrscannerresult){                 if (urlutil.isvalidurl(qrscannerresult)) {                      if (barcodescanned) {                         barcodescanned = false;                         mcamera.setpreviewcallback(previewcb);                         mcamera.startpreview();                         previewing = true;                         mcamera.autofocus(autofocuscb);                     }                      intent = new intent(intent.action_view);                     i.setdata(uri.parse(qrscannerresult));                     startactivity(i);                      }else {                         new alertdialog.builder(this)                         .settitle("qr data")                         .setmessage(qrscannerresult)                         .setpositivebutton("ok", new dialoginterface.onclicklistener() {                             public void onclick(dialoginterface dialog, int which) {                                  if (barcodescanned) {                                     barcodescanned = false;                                     mcamera.setpreviewcallback(previewcb);                                     mcamera.startpreview();                                     previewing = true;                                     mcamera.autofocus(autofocuscb);                                 }                             }                          })                          .show();                     }          }     } 

thanks in advance. sakib

at last succeeded find out problem of code , got solution. when try reopen camera in onresume() method missed part. when create/open new camera in onresume(), framelayout still has previous camera. remove previous camera framelayout on onpause() method , recreate on onresume() method. solve problem , working nicely without error. here onpause() , onresume() method fix. hope might in future.

    public void onpause() {         super.onpause();         releasecamera();         framelayout preview = (framelayout)findviewbyid(r.id.camerapreview);         preview.removeview(mpreview);     }      public void onresume(){         super.onresume();          try {             if(mcamera==null){              //setrequestedorientation(activityinfo.screen_orientation_portrait);             autofocushandler = new handler();             mcamera = getcamerainstance();             this.getwindowmanager().getdefaultdisplay().getrotation();              scanner = new imagescanner();             scanner.setconfig(0, config.x_density, 3);             scanner.setconfig(0, config.y_density, 3);              mpreview = new camerapreview(this, mcamera, previewcb, autofocuscb);             framelayout preview = (framelayout)findviewbyid(r.id.camerapreview);             preview.addview(mpreview);             }         } catch (exception e) {             // todo auto-generated catch block          }     }      /** safe way instance of camera object. */     public static camera getcamerainstance(){         camera c = null;         try {             c = camera.open();         } catch (exception e){         }         return c;     }      private void releasecamera() {         //toast.maketext(qrscanneractivity.this, "paused state", toast.length_short).show();         if (mcamera != null) {             previewing = false;             mcamera.setpreviewcallback(null);             mpreview.getholder().removecallback(mpreview);             mcamera.release();             mcamera = null;             mpreview= null;         }      } 

thanks, sakib


Comments

Popular posts from this blog

javascript - DIV "hiding" when changing dropdown value -

Does Firefox offer AppleScript support to get URL of windows? -

android - How to install packaged app on Firefox for mobile? -