hasSystemFeature (PackageManager.FEATURE_CAMERA) restituisce true per il dispositivo senza camera

Ho un'applicazione che utilizza funzionalità della camera, ma parte della sua funzionalità può anche essere eseguita senza la function della camera. Così ho messo questo nel mio manifesto.

<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false"/> 

e nel mio codice controlla se il dispositivo dispone di una camera o non lo utilizza

  • Fai un autoscroll di scrollView con il trascinamento in Android
  • Usa la camera USB per l'applicazione Android
  • Imansible get la connessione con la cliencanvas di connessione con Google Maps
  • Come devo calcolare l'azimuth, il pitch, l'orientamento quando il mio dispositivo Android non è piatto?
  • caricamento di dati in visualizzazione di text in android
  • Avere le pagine verticalmente scorrenti in ViewPager
  •  final boolean deviceHasCameraFlag = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); 

    Ora sto provando il mio codice su una tavoletta che esegue Android 4.0 (ICS) e non ha alcuna camera. Ma ancora ho il valore vero per il deviceHasCameraFlag . È strano o mi manca qualcosa.

    Ho provato cose diverse e ho anche provato la stessa cosa sulla function Bluetooth come Tablet non ha ancora la funzionalità Bluetooth. Funziona bene per Bluetooth ma mi dà la verità per la camera.

  • Animazione di tabs di flip tra le attività
  • Visualizzazione della manopola personalizzata per il controllo del volume?
  • Condividi la window di dialogo Facebook su Android
  • Pacchetti Android separati
  • Taglib per Android
  • Retrofit 2 non invia dati quando ProGuard è abilitato
  • 5 Solutions collect form web for “hasSystemFeature (PackageManager.FEATURE_CAMERA) restituisce true per il dispositivo senza camera”

    Quale dispositivo è? La risposta che si ottiene è un bug, e 4.0 è molto vecchio al giorno d'oggi. Molte tavolette che ancora eseguono questa versione non sono state create correttamente, sia hardware che software che presentano problemi multipli.

    Indipendentemente da ciò, dovresti essere sempre disposto a gestire i guasti in Camera.open() o Camera.open(0) : ad esempio, in alcuni casi un altro software sul dispositivo non rilascerà la camera con grazia.

    Quindi, nel tuo caso hai un falso positivo, si tenta di aprire la camera, non riesce, e continui come se non ci sia la camera sul dispositivo, anche se PackageManager pensa che PackageManager.FEATURE_CAMERA sia disponibile.

    Anche se ho accettato la risposta di Alex, voglio ancora mettere questo insieme come quello che può essere la soluzione migliore in questa condizione.

    Quello che ho trovato è stato in caso di alcuni dispositivi standard android inferiori

     pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) 

    restituisce true anche se la camera non esiste e che sembra essere un bug di periferica che non è controllato.

    Quindi, each volta che c'è spazio per controllare se esiste una camera per un dispositivo o non la pratica migliore è qualcosa che sto mettendo sotto (la best practice secondo la mia conoscenza se c'è qualcosa di più interessante e migliore soluzione che questo è il benvenuto a mettere qui in questo post)

     int numberOfCameras = Camera.getNumberOfCameras(); context = this; PackageManager pm = context.getPackageManager(); final boolean deviceHasCameraFlag = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); if( !deviceHasCameraFlag || numberOfCameras==0 ) { Log.e(TAG, "Device has no camera" + numberOfCameras); Toast.makeText(getApplicationContext(), "Device has no camera", Toast.LENGTH_SHORT).show(); captureButton.setEnabled(false); } else { Log.e(TAG, "Device has camera" + deviceHasCameraFlag + numberOfCameras); } 

    In questo sto controllando entrambi il numero delle macchine fotografiche, così come il dispositivo ha function della camera boolean, quindi in each caso non avrebbe fallito la mia condizione.

    Nel mio caso avevo questo codice:

     public boolean hasCameraSupport() { boolean hasSupport = false; if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) { //<- this constant caused problems hasSupport = true; } return hasSupport; } 

    e continuava a restituire false su un dispositivo Genymotion con Android 4.1.1 (API 16). Una volta che ho cambiato il costante PackageManager.FEATURE_CAMERA_ANY su PackageManager.FEATURE_CAMERA , i miei problemi sono andati via. Suppongo che non tutti i dispositivi / livelli API supportno PackageManager.FEATURE_CAMERA_ANY .

    Lo ho provato a provare questo sicuramente functionrà ….

      import android.hardware.Camera; int numCameras = Camera.getNumberOfCameras(); if (numCameras > 0) { System.out.println("camera"); } else { System.out.println("No Camera"); } 

    Prova questo codice:

     private boolean isDeviceSupportCamera() { if (getApplicationContext().getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA)) { // this device has a camera return true; } else { // no camera on this device return false; } } 

    Ancora non funziona allora per favore fathemes sapere

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.