2012-01-27 4 views
17

Sto cercando di utilizzare Zxing Library per lo sviluppo di uno scanner di codici a barre.Errore fotocamera in applicazione codice a barre Zxing

La mia attività è la seguente:

public class Scanner extends Activity { 

    private static final String PACKAGE = "com.test.scan"; 
    private static final String SCANNER = "com.google.zxing.client.android.SCAN"; 
    private static final String SCAN_FORMATS = "UPC_A,UPC_E,EAN_8,EAN_13,CODE_39,CODE_93,CODE_128"; 
    private static final String SCAN_MODE = "QR_CODE_MODE"; 
    public static final int REQUEST_CODE = 1; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     setContentView(R.layout.main); 

     Button ok; 
     ok = (Button) findViewById(R.id.b1); 
     ok.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       Intent scanIntent = new Intent(SCANNER); 
       scanIntent.setPackage(PACKAGE); 
       scanIntent.addCategory(Intent.CATEGORY_DEFAULT); 
       scanIntent.putExtra("SCAN_FORMATS", SCAN_FORMATS); 
       scanIntent.putExtra("SCAN_MODE", SCAN_MODE); 
       try { 
        startActivityForResult(scanIntent, REQUEST_CODE); 
       } catch (ActivityNotFoundException e) { 
        // TODO: Exception handling 
       } 
      } 

     }); 
    } 

anche file manifesto:

<activity android:name=".Scanner" 
      android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
      android:windowSoftInputMode="stateAlwaysHidden"> 
       <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

</activity> 

<activity android:name="com.google.zxing.client.android.CaptureActivity" 
       android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" 
       android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
       android:windowSoftInputMode="stateAlwaysHidden"> 
       <intent-filter> 
        <action  android:name="com.google.zxing.client.android.SCAN" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter> 
      </activity> 
      <activity android:name="com.google.zxing.client.android.PreferencesActivity" 
       android:label="@string/preferences_name"> 
      </activity> 
      <activity android:name="com.google.zxing.client.android.HelpActivity" 
       android:screenOrientation="user"> 
       <intent-filter> 
        <action android:name="android.intent.action.VIEW" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter> 
      </activity> 
      <activity android:name="com.google.zxing.client.android.share.ShareActivity" 
       android:label="@string/share_name" android:screenOrientation="user" 
       android:theme="@android:style/Theme.Light"> 
       <intent-filter> 
        <action android:name="com.google.zxing.client.android.SHARE" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter> 
      </activity> 
    <uses-permission android:name="android.permission.CAMERA" 

Ma sto ottenendo il seguente errore:

"Ci dispiace, la fotocamera Android è verificato un problema. Potrebbe essere necessario riavviare il dispositivo ".

Ho seguito alcuni blog.

Log:

Unexpected error initializating camera 
    01-27 10:40:48.281: WARN/CaptureActivity(1007): java.lang.RuntimeException: Fail to connect to camera service 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at android.hardware.Camera.native_setup(Native Method) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at android.hardware.Camera.<init>(Camera.java:185) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at android.hardware.Camera.open(Camera.java:165) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at com.google.zxing.client.android.camera.CameraManager.openDriver(CameraManager.java:126) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at com.google.zxing.client.android.CaptureActivity.initCamera(CaptureActivity.java:606) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at com.google.zxing.client.android.CaptureActivity.surfaceCreated(CaptureActivity.java:346) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at android.view.SurfaceView.updateWindow(SurfaceView.java:532) 
    01-27 10:40:48.281: WARN/CaptureActivity(1007):  at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339) 
+0

Un blog dettagliato: http://sforsuresh.in/cordova-sorry-android-camera-encountered-problem/ –

risposta

7

Questo significa che il dispositivo è tornato null da Camera.open() e non dovrebbe mai farlo. È considerato un bug del dispositivo. Non sono sicuro di come eseguiresti il ​​debug perché lo sta facendo, ma questa è la causa.

L'unica volta che ho visto questo è accaduto in modo coerente è su dispositivi Android 2.2 che hanno solo una fotocamera frontale. L'API per l'accesso a una fotocamera frontale è apparsa solo su Android 2.3 e il precedente metodo API Camera.open() può restituire solo una fotocamera posteriore. Quindi questi restituiscono null. Ed è un bug del dispositivo, in realtà, dal momento che è necessario eseguire Android 2.3 per consentire alle app di utilizzare una fotocamera frontale.

+0

Sean: l'app BarcodeScanner3.72 supporta Android 1.6? –

+0

Sì, supporta 1,5 pari. 4.0 richiederà 2.1. –

+0

@SeanOwen nel mio caso, ho un Samsung Galaxy S (Android 2.3.6) che ha una fotocamera anteriore e posteriore e ricevo questo avviso quando provo a usare lo scanner di codici a barre. C'è un modo per aggirarlo? Sto usando l'ultima versione di BarcodeScanner. Scaricato 2 giorni fa. Grazie. –

-2

Se si invoca fotocamera in emulatore di Android per Android 2.2 darà eccezione. Mentre funziona bene su un dispositivo.

+0

Sto usando il dispositivo galaxy asso. Ancora è lo stesso errore. – Smitha

15

permesso della fotocamera

<uses-permission android:name="android.permission.CAMERA" 

non è giusto posto. dovrebbe essere dopo il tag dell'applicazione.

+1

no .. anche questo non ha funzionato :-( – Smitha

+0

hai scheda SD nel telefono? Hai provato lo stesso codice su qualsiasi altro dispositivo? –

+0

sì. Ho sdcard nel mio dispositivo. Ho provato anche nella scheda galassia – Smitha

-2

Controlla il tuo codice, penso che il tuo codice provi ad aprire la telecamera più volte. Scarica google zxing codice sorgente scanner per codici a barre e poi provalo.

-1

Sono stato in grado di risolvere il problema semplicemente inserendo le autorizzazioni della telecamera nell'applicazione principale.

0

È possibile che l'amministratore del dispositivo abbia disabilitato l'accesso alla telecamera. Dovrebbe controllare se l'app della fotocamera Android può avviarsi o se si lamenta di un amministratore del dispositivo.

0

ho avuto lo stesso problema fisso con

SurfaceHolder surfaceHolder = surfaceView.getHolder(); 
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

Nota: questo sembra essere un problema di recente con il sistema operativo (Android V3.0 pre) come il codice è stato in precedenza lavorava.

2

Ho affrontato un problema simile. Durante il test su Android M, la telecamera richiede il permesso di runtime . Aggiungendo questa risposta solo per riferimento in modo da aiutare chiunque sia bloccato in uno scenario simile.

28

Per Android 6+, a causa del problema "permesso", Se hai ricevuto il messaggio "Mi dispiace, la fotocamera ha riscontrato un problema. Potrebbe essere necessario riavviare il dispositivo.", Vai su Impostazioni - App - trova "il tuo nome app "- seleziona Permessi e attiva" Fotocamera ".

+0

Questo mi ha sbloccato, grazie! Ma qual è il "problema dell'autorizzazione"? – Deleplace

+2

Le app progettate per Android 6.0 ora richiedono un'autorizzazione quando ne hanno bisogno. Ad esempio, invece di dare a una app l'accesso alla tua videocamera quando la installi, ti verrà richiesta la prima volta che l'app vuole accedere alla tua videocamera. –

+0

Questo è vero solo se l'app ha come target Android 6+. –