Autore Topic: Supporto per Nexus 7  (Letto 2269 volte)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Supporto per Nexus 7
« il: 02 Gennaio 2013, 17:45:50 CET »
+4
Posto questo snippet perchè mi è stato segnalato un problema relativo a questo device.
Può accadere che quando andate ad aggiungere la vostra app su google play il nexus7 risulti non compatibile.
Questo può verificarsi per due ragioni.

La prima è che avete filtrato i device per dpi. Il nexus7 infatti ha 213 dpi che corrispondono alla sigla tvdpi, sigla che purtroppo non si può impostare da eclipse. Per ovviare al problema dovete aggiungere una riga hardcoded dentro al tag compatible-screens nel manifest, così:

Codice (XML): [Seleziona]
<screen android:screenSize="large" android:screenDensity="213" />
Il secondo motivo (e questo stava bene nel thread odio google) è la feature camera.
Apparentemente la feature camera fa riferimento alla telecamera POSTERIORE e il nexus 7 ha solo quella ANTERIORE.

Come sapete per aprire una telecamera ci sono due funzioni: open senza parametri e open con un id. La open senza parametri prende la telecamera di POSTERIORE di default. Se chiamate questa open su un nexus 7 ottenete un bel NULL(a).  :-o
Non solo, questo significa che se usate la telecamera e lo dichiarate nel manifest il nexus 7 viene filtrato fuori e se un utente con il suddetto device cerca la vostra app, questa risulta NON COMPATIBILE.

Poichè solitamente ci sono centinaia di device supportati è possibile che qualche vostra app che usa la camera non sia compatibile col nexus 7 e nemmeno ve ne siete accorti.

Soluzione:

nel manifest dichiarate:

Codice (XML): [Seleziona]
<uses-feature android:name="android.hardware.camera" android:required="false"/>
Se non usate l'autofocus (questo vale in generale) rendete anche questo non richiesto perchè è una feature nascosta che viene implicitamente aggiunta dalla camera permission:

Codice (XML): [Seleziona]
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
A questo punto per prevenire crash evitate accuratamente di prendere la telecamera con la open senza parametri ma fate una cosa del genere:

Codice (Java): [Seleziona]
    public static Camera getCameraInstance(){
        CameraInfo myInfo = new CameraInfo();
                int cameraCount = Camera.getNumberOfCameras();
                int myBackCamID = -1;
                int myFrontCamID = -1;
                for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
                        Camera.getCameraInfo( camIdx, myInfo );
                if ( myInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT  )
                {
                        myFrontCamID = camIdx;
                }
                else if( myInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK )
                {
                        myBackCamID = camIdx;
                }
                }
                if( myBackCamID == -1 && myFrontCamID == -1 )
                        return null;
                else{
                        if( myBackCamID != -1 )
                        {
                                Camera c = null;
                        try {
                            c = Camera.open(myBackCamID);
                        } catch (Exception e){
                        }
                        return c;
                        }
                        else
                        {
                                Camera c = null;
                        try {
                            c = Camera.open(myFrontCamID);
                        } catch (Exception e){
                        }
                        return c;
                        }
                }
    }
Il codice riporta null se il device non ha telecamera, altrimenti riporta la telecamera posteriore (come la open senza niente) se presente. Se è presente solo la frontale riporta la frontale (come nel caso del nexus 7).

 ;-)

« Ultima modifica: 02 Gennaio 2013, 19:02:52 CET da undead »