2013-05-14 11 views
7

versione My Android è 4.2.1 e sto cercando di fare uso di TelephonyManager.getAllCellInfo() metodo. Nel mio file manifesto ho i ACCESS_COARSE_UPDATES, ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION permessi. Tuttavia, quel metodo restituisce null.getAllCellInfo restituisce null in Android 4.2.1

risposta

5

Il comando seguente elenca le autorizzazioni disponibili su un telefono:

adb shell pm list permissions -g 

Sul Nexus 4 (4.2.2) ACCESS_COARSE_UPDATES il permesso non è elencato.

UPDATE:

Quando si cerca però ramo principale del codice sorgente non v'è alcun riferimento a ACCESS_COARSE_UPDATES quindi questo sembra essere e l'errore nella documentazione. In effetti il ​​codice pertinente richiede solo ACCESS_COARSE_LOCATION e/o ACCESS_FINE_LOCATION.

Tracciare attraverso la seguente:

  • TelephonyManager
  • ITelephony
  • PhoneInterfaceManager
  • PhoneGlobals
  • PhoneFactory
  • GsmPhone
  • PhoneBase
  • ServiceStateTracker

In ServiceStateTracker:

/** 
* @return all available cell information or null if none. 
*/ 
public List<CellInfo> getAllCellInfo() { 
    return null; 
} 

Quindi sembra che in tutti i casi verrà restituito un valore null.

Here è un collegamento a un report difetto di corrente.

+0

Il mio telefono è anche Nexus e non elenca il permesso ACCESS_COARSE_UPDATES. Pensi che su alcuni telefoni con versione 4.2 diversa da Nexus getAllCellInfo() potrebbe funzionare? Hai avuto un cambio per controllarlo su qualche altro telefono? – mkd156

+0

Quindi, come ho capito, questo è un bug nell'API e non è possibile ottenere le informazioni sulla cella? Mi chiedo, non hanno intenzione di sistemare un bug importante? – mkd156

7

Da TelephonyManager.getAllCellInfo() javadoc:

Questo è preferibile rispetto all'utilizzo getCellLocation sebbene per vecchi dispositivi puo restituire null nel qual caso getCellLocation dovrebbe essere chiamato.

Some sources relazione che questo metodo è implementato solo sui dispositivi CDMA/LTE, e altri tipi di dispositivi (anche GSM/LTE) restituirà null. Dove implementato, restituirà solo celle LTE.

TelephonyManager.getCellLocation() restituirà solo GSM/UMTS o CDMA cellule. È limitato a una cella, quella con cui il dispositivo è attualmente registrato. Questa è la tua scommessa più sicura se sei sicuro che il tuo codice verrà eseguito solo su dispositivi GSM/UMTS o CDMA e se sei interessato solo alla cella con cui è attualmente registrato il dispositivo.

per ottenere informazioni su altre cellule circostanti, utilizzare TelephonyManager.getNeighboringCellInfo(). Tuttavia, è limitato alle celle GSM/UMTS. Inoltre, la sua implementazione dipende dal firmware della radio. La maggior parte dei dispositivi Samsung (e non pochi) restituirà una lista vuota.

Conclusione: ottenere informazioni su celle vicine su Android è un'attività piuttosto complicata al momento. Potrebbe essere necessario utilizzare una combinazione di tutti e tre i metodi per ottenere le informazioni desiderate, e anche in questo modo, alcune cose potrebbero essere inaccessibili.

-1

Gli stati API seguenti:

GetAllCellInfo è preferito rispetto all'utilizzo getCellLocation sebbene per vecchi dispositivi puo restituire null nel qual caso dovrebbe essere chiamato getCellLocation.

Problemi correlati