2012-06-17 13 views
28

Al momento di caricare la mia app sul mercato oggi, ho visto che è disponibile solo per i dispositivi con GPS, quindi questo esclude alcuni tablet.Manifest GPS: GPS in App è opzionale, desidera renderlo disponibile anche ai dispositivi GPS.

Il GPS nella mia app è opzionale. È possibile rilasciare una sola app per dispositivi con e senza GPS o devo fare una versione extra (non sarebbe un problema, però)?

Se è possibile, immagino ci sia un qualche tipo di metodo per verificare se (deviceHasGPS()) {...}. C'è uno?

Questa è la parte della mia manifesta:

<uses-permission android:name="android.permission.PREVENT_POWER_KEY" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 

Edit: Grazie per la risposta Raghav Sood!

Aggiungi per manifestare:

<uses-feature android:name="android.hardware.location.gps" 
       android:required="false" /> 

implementare le seguenti:

locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
boolean deviceHasGPS = false; 
    if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)) { 
     deviceHasGPS = true; 
    } 

di provarlo su un dispositivo con GPS, basta circondano le cose gps con if (deviceHasGPS) {...} quindi rimuovere nel manifesto:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

set deviceHasGPS per sempre false e vedere se la forza dell'app si chiude.

+0

Grazie, questo funziona, a patto che non si rimuovano i permessi di localizzazione, sono necessari per far funzionare l'app. – petter

+0

Si potrebbe anche aggiungere '' and ' 'poiché alcuni dispositivi non dispongono di alcun servizio di localizzazione. – petter

risposta

37

Aggiungere il seguente al vostro manifesto

<uses-feature android:name="android.hardware.location.gps" android:required="false" /> 

Questo vi dirà di Google Play che, mentre la vostra applicazione ha il GPS, è requisito assoluto non è vero. Tuttavia, dovresti gestire la mancanza di GPS nella tua app con garbo, invece di lasciarlo andare in crash.

Per verificare che il dispositivo disponga di GPS, è possibile chiamare LocationManager.getAllProviders() e verificare se LocationManager.GPS_PROVIDER è incluso nell'elenco.

+0

Risposte chiare, grazie mille! Untestet ma suona come funziona. – stefple

+0

Works. Modificato la domanda e aggiunto un suggerimento per testare su un dispositivo con GPS. – stefple

+0

Un bel post sul perché questo lavoro può essere trovato qui: https://endocode.com/blog/2014/02/04/android-permissions-features-and-google-play-store/ e l'elenco completo delle funzionalità implicite può essere trovato qui http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions – Trenton