2013-05-14 5 views
7

私のAndroidバージョンは4.2.1で、TelephonyManager.getAllCellInfo()メソッドを利用しようとしています。私のマニフェストファイルには、ACCESS_COARSE_UPDATES,ACCESS_COARSE_LOCATION,ACCESS_FINE_LOCATIONの権限があります。ただし、このメソッドはnullを返します。ネクサス4(4.2.2)許可がリストされていないACCESS_COARSE_UPDATESでgetAllCellInfoはandroidでnullを返します4.2.1

adb shell pm list permissions -g 

答えて

5

次のコマンドを実行すると、携帯電話上で利用可能なアクセス許可を示しています。

UPDATE:

ソースコードのマスターブランチかかわら見たときので、これはドキュメントであることと、エラーに見えるACCESS_COARSE_UPDATESへの参照がありません。実際には、関連するコードはACCESS_COARSE_LOCATIONおよび/またはACCESS_FINE_LOCATIONしか必要としません。以下を通じてトレース

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

:すべてのケースでは、それがnullを返しますよう

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

だから、見えます。

Hereは、現在の欠陥レポートへのリンクです。 TelephonyManager.getAllCellInfo()のjavadocから

+0

私の電話機もNexusであり、ACCESS_COARSE_UPDATES権限は表示されません。 Nexus getAllCellInfo()以外のバージョンの携帯電話では動作するかもしれないと思いますか?あなたは他の電話でそれを確認するための変更をしましたか? – mkd156

+0

私はこれがAPIのバグであると理解しており、細胞情報を得ることはできません。私は彼らが重要なバグを修正する計画を持っていないのだろうか? – mkd156

7

:古いデバイスのために、これはgetCellLocationが呼び出されるべき場合にはnullを返すかもしれないが

。これはgetCellLocationを使用してより好ましいです。

Some sourcesこの方法はCDMA/LTEデバイスにのみ実装されていることを報告し、(GSM/LTEのものを含む)他のタイプのデバイスは、nullが返されます。実装されている場合は、LTEセルのみが返されます。

TelephonyManager.getCellLocation()は、GSM/UMTSまたはCDMAセルのみを返します。デバイスが現在登録されている1つのセルに制限されます。これは、コードがGSM/UMTSまたはCDMAデバイス上でのみ実行されていることが確かで、デバイスが現在登録されているセルだけに興味がある場合は、最も安全な方法です。

他の周囲のセルに関する情報を取得するには、TelephonyManager.getNeighboringCellInfo()を使用してください。しかし、GSM/UMTSセルに限定されている。また、その実装は無線ファームウェアに依存します。ほとんどのSamsungデバイス(とかなりの他のデバイス)は空のリストを返します。

結論:Androidの近くのセルに関する情報を取得することは、現時点ではかなり面倒なビジネスです。必要な情報を得るために3つの方法を組み合わせて使用​​する必要があります。その場合でも、一部のものにはアクセスできない可能性があります。以下

-1

API状態は:

GetAllCellInfo古いデバイスのために、これはgetCellLocationが呼び出されるべき場合にnullを返すかもしれないがgetCellLocationを使用よりも好ましいです。

関連する問題