8

私の Android バージョンは 4.2.1 で、TelephonyManager.getAllCellInfo()メソッドを利用しようとしています。私のマニフェスト ファイルには、、、権限ACCESS_COARSE_UPDATESがあります。ただし、そのメソッドは を返します。ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATIONnull

4

3 に答える 3

8

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 つの方法をすべて組み合わせて使用​​する必要がある場合があります。

于 2013-09-08T20:19:26.327 に答える
5

次のコマンドは、電話機で使用できる権限を一覧表示します。

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 が返されるように見えます。

現在の不具合報告へのリンクです。

于 2013-05-17T19:20:25.270 に答える