1

クラスのプロジェクトと論文の作業 - 具体的には getBaseStationLatitude() と getBaseStationLongitude() を使用して、CDMA セルから情報を取得しようとしています。返される値は MAX_VALUE (2147483647) です - 実際の緯度/経度を受け取っていません。getBaseStationID()、getNetworkID()、および getSystemID() が有効な ID を返しています。これを2つの別々のセルでテストしましたが、うまくいきませんでした。私のコードは以下に掲載されています。ACCESS_FINE_LOCATION と ACCESS_COURSE_LOCATION の両方がマニフェストに追加されます。テストは Droid、Android 2.2.2 で行われました。

質問 - 同じ問題に遭遇した人はいますか? コードに何か不足していますか? これらの値はどこで保存され、発行されますか (たとえば、これらの座標は基地局で割り当てられ、常にモバイル デバイスに送信されますか)?

コード:

package xXx.edu.com;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class CDMAData extends Activity implements OnClickListener{

    CdmaCellLocation location;
    int cellID, lat, lon, netID, sysID;
    private Context context;
    Button getDataBtn;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      context = (Context) this;
      setContentView(R.layout.cid);

      setConnections();
   }

   private void setConnections() {

       getDataBtn = (Button) this.findViewById(R.id.getID);
       getDataBtn.setOnClickListener(this);

   }

   public void onClick(View v) {

       TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
       location = (CdmaCellLocation) tm.getCellLocation();
       cellID = location.getBaseStationId();
       lat = location.getBaseStationLatitude();
       lon = location.getBaseStationLongitude();
       netID = location.getNetworkId();
       sysID = location.getSystemId();

       TextView myView1 = (TextView) findViewById(R.id.bsID);
       myView1.setText("" + cellID);

       TextView myView2 = (TextView) findViewById(R.id.bsLat);
       myView2.setText("" + lat);

       TextView myView3 = (TextView) findViewById(R.id.bsLon);
       myView3.setText("" + lon);

       TextView myView4 = (TextView) findViewById(R.id.netID);
       myView4.setText("" + netID);

       TextView myView5 = (TextView) findViewById(R.id.sysID);
       myView5.setText("" + sysID);

   }
}
4

3 に答える 3

1

TelephonyManagerから場所を取得する前に、「CellLocation.requestLocationUpdate()」メソッドを呼び出してみてください。これにより、プラットフォームはセルの場所を強制的に更新し、デバイスがCDMAネットワークに登録されている場合は有効な値を提供するはずです。

CellLocation.requestLocationUpdate();
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
location = (CdmaCellLocation) tm.getCellLocation();
cellID = location.getBaseStationId();
....

このメソッドのドキュメント:http: //developer.android.com/reference/android/telephony/CellLocation.html#requestLocationUpdate()

于 2011-12-30T19:13:18.383 に答える
1

理由は次のとおりです。

緯度は、3GPP2 C.S0005-A v6.0 で指定されている 10 進数です。単位は 0.25 秒で、範囲は -1296000 ~ 1296000 で、両方の値を含みます (-90 ~ +90 度の範囲に対応)。 . Integer.MAX_VALUE は無効な値と見なされます。

経度は、3GPP2 C.S0005-A v6.0 で指定されている 10 進数です。単位は 0.25 秒で、範囲は -2592000 から 2592000 までです (両方の値を含みます) (-180 度から +180 度の範囲に対応)。Integer.MAX_VALUE は無効な値と見なされます。

言う:

緯度 = L (Android cdma API によって返される整数)

緯度 = (( L * 90)/1296000))

これで、度分と秒に簡単に変換できます: 以下は、それを行うための URL です (次のリンクのいずれかが機能するはずです): http://zonalandeducation.com/mmts/trigonometryRealms/degMinSec/degMinSec.htm

http://www.fcc.gov/mb/audio/bikel/DDDMSS-decimal.html

于 2011-04-03T00:48:55.923 に答える