私の Android バージョンは 4.2.1 で、TelephonyManager.getAllCellInfo()
メソッドを利用しようとしています。私のマニフェスト ファイルには、、、権限ACCESS_COARSE_UPDATES
があります。ただし、そのメソッドは を返します。ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
null
3 に答える
TelephonyManager.getAllCellInfo()
javadocから:
これは getCellLocation を使用するよりも推奨されますが、古いデバイスでは null が返される場合があり、その場合は getCellLocation を呼び出す必要があります。
一部の情報源は、このメソッドは CDMA/LTE デバイスにのみ実装されており、他のタイプのデバイス (GSM/LTE デバイスを含む) は null を返すと報告しています。実装されている場合、LTE セルのみが返されます。
TelephonyManager.getCellLocation()
GSM/UMTS または CDMA セルのみを返します。デバイスが現在登録されている 1 つのセルに限定されます。コードが GSM/UMTS または CDMA デバイスでのみ実行されることが確実であり、デバイスが現在登録されているセルのみに関心がある場合は、これが最も安全な方法です。
周囲の他のセルに関する情報を取得するには、 を使用しますTelephonyManager.getNeighboringCellInfo()
。ただし、GSM/UMTS セルに限定されます。また、その実装は無線ファームウェアに依存します。ほとんどの Samsung デバイス (およびその他のかなりの数のデバイス) は、空のリストを返します。
結論: Android で近くのセルに関する情報を取得することは、現時点では非常に面倒です。必要な情報を取得するには、3 つの方法をすべて組み合わせて使用する必要がある場合があります。
次のコマンドは、電話機で使用できる権限を一覧表示します。
adb shell pm list permissions -g
Nexus 4 (4.2.2) では、ACCESS_COARSE_UPDATES権限はリストされていません。
アップデート:
ソース コードのマスター ブランチを調べると、ACCESS_COARSE_UPDATES への参照がないため、ドキュメントにエラーがあるようです。実際、関連するコードは ACCESS_COARSE_LOCATION および/または ACCESS_FINE_LOCATION のみを必要とします。
以下をトレースします。
- テレフォニーマネージャー
- Iテレフォニー
- PhoneInterfaceManager
- PhoneGlobals
- 電話工場
- GSMフォン
- PhoneBase
- ServiceStateTracker
ServiceStateTracker で:
/**
* @return all available cell information or null if none.
*/
public List<CellInfo> getAllCellInfo() {
return null;
}
したがって、すべての場合に null が返されるように見えます。
現在の不具合報告へのリンクです。