2013-05-14 14 views

Odpowiedz

5

Następujące polecenie wymienia uprawnienia dostępne na telefon:

adb shell pm list permissions -g 

Na Nexus 4 (4.2.2) ACCESS_COARSE_UPDATES uprawnienie nie jest na liście.

UPDATE:

Patrząc jednak oddział mistrz kodzie źródłowym nie ma odniesienia do ACCESS_COARSE_UPDATES więc wydaje się, że i błędów w dokumentacji. W rzeczywistości odpowiedni kod wymaga tylko ACCESS_COARSE_LOCATION i/lub ACCESS_FINE_LOCATION.

zakaźnych poprzez następujący:

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

W ServiceStateTracker:

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

Tak to wygląda we wszystkich przypadkach będzie to zwróci null.

Here to link do bieżącego raportu o usterce.

+0

Mój telefon jest również Nexusem i nie zawiera uprawnień ACCESS_COARSE_UPDATES. Czy myślisz, że na niektórych telefonach z wersją 4.2 innych niż Nexus getAllCellInfo() może działać? Czy masz jakąś zmianę, aby sprawdzić to na innym telefonie? – mkd156

+0

Jak rozumiem, jest to błąd w API i nie można uzyskać informacji o komórce? Zastanawiam się, czy oni nie mają planów naprawy, to ważny błąd? – mkd156

7

Od TelephonyManager.getAllCellInfo() javadoc:

ta jest korzystniejsza niż przy użyciu getCellLocation chociaż dla starszych urządzeń może to zwróci null w tym przypadku getCellLocation powinien być nazywany.

Some sources raport, że metoda ta jest realizowana tylko na urządzeniach CDMA/LTE oraz inne rodzaje urządzeń (w tym GSM/LTE) zwróci wartość null. Jeśli zostanie zaimplementowany, zwróci tylko komórki LTE.

TelephonyManager.getCellLocation() spowoduje zwrócenie tylko komórek GSM/UMTS lub CDMA. Ogranicza się do jednej komórki, tej, z którą urządzenie jest aktualnie zarejestrowane. Jest to najbezpieczniejszy zakład, jeśli jesteś pewien, że twój kod będzie działał tylko na urządzeniach GSM/UMTS lub CDMA, a jeśli jesteś zainteresowany tylko komórką, z którą urządzenie jest aktualnie zarejestrowane.

Aby uzyskać informacje o innych otaczających komórkach, należy użyć TelephonyManager.getNeighboringCellInfo(). Jest on jednak ograniczony do komórek GSM/UMTS. Jego implementacja zależy również od oprogramowania radiowego. Większość urządzeń Samsung (i całkiem sporo innych) zwróci pustą listę.

Wniosek: uzyskanie informacji o pobliskich komórkach w systemie Android jest obecnie bardzo nieuporządkowane. Może być konieczne użycie kombinacji wszystkich trzech metod, aby uzyskać pożądane informacje, a nawet w ten sposób niektóre rzeczy mogą być niedostępne.

-1

Państwa API następujące:

GetAllCellInfo jest korzystniejsze niż przy użyciu getCellLocation chociaż dla starszych urządzeń może powrócić null w takim przypadku należy getCellLocation nazwie.

Powiązane problemy