0

Blackberry GPS サンプル デモの作成を手伝ってもらえますか? 実際、私は Blackberry の非常に多くのデバイスをいじっており、GPS 受信機があるものとないものがあります。

デバイスに GPS 受信機がある場合、現在のデバイスの位置をどのように検索しますか? デバイスに BB 8520 のような GPS がない場合はどうなりますか?

Blackberry の GPS についての理解と、GPS を使用するかどうかにかかわらず、デバイスの位置の緯度と経度を取得する方法を教えてください。

ありがとうございました

4

2 に答える 2

1

この以前の SO 投稿は、正しい方向を示しているはずです。

他の方法に関しては、三角測量を使用できます。この方法では、少なくとも 3 つのセル タワーからの信号強度を使用して、現在地の大まかな推定値を取得できます。必要な位置の精度にもよりますが、三角測量は GPS よりも高速である可能性が高くなりますが、GPS のほうがはるかに正確です (三角測量の最良のケースの誤差範囲は約 100m です)。

ただし、建物の中にいる場合や空がよく見えない場合は、GPS が機能しない可能性が高いことに注意してください。

于 2012-08-03T12:40:48.670 に答える
1

これを試してください、これはGPSをチェックします。GPS が利用できる場合は、場所を取得します。それ以外の場合は、ネットワークから場所を見つけます。

あなたのクラスでこのクラスを呼び出します -handleGPS gps=new handleGPS();

public class handleGPS{
    static GPSThread gpsThread;
   public static double latitude=0;
   public static double longitude=0;

    public handleGPS(){
        gpsThread = new GPSThread();
        gpsThread.start();
    }

private static class GPSThread extends Thread{
    public void run() {
        Criteria myCriteria = new Criteria();
        myCriteria.setCostAllowed(false);
        int m_bbHandle = CodeModuleManager.getModuleHandle("net_rim_bb_lbs");

        if(m_bbHandle>0){
            try {

                int cellID = GPRSInfo.getCellInfo().getCellId();
                int lac = GPRSInfo.getCellInfo().getLAC();


                String urlString2 = "http://www.google.com/glm/mmap";

                // Open a connection to Google Maps API 
                ConnectionFactory connFact = new ConnectionFactory();
                ConnectionDescriptor connDesc;
                connDesc = connFact.getConnection(urlString2);

                HttpConnection httpConn2;
                httpConn2 = (HttpConnection)connDesc.getConnection();
                httpConn2.setRequestMethod("POST");

                // Write some custom data to Google Maps API 
                OutputStream outputStream2 = httpConn2.openOutputStream();//getOutputStream();
                WriteDataGoogleMaps(outputStream2, cellID, lac);

                // Get the response  
                InputStream inputStream2 = httpConn2.openInputStream();//getInputStream();
                DataInputStream dataInputStream2 = new DataInputStream(inputStream2);

                // Interpret the response obtained 
                dataInputStream2.readShort();
                dataInputStream2.readByte();

                int code = dataInputStream2.readInt();
                //Dialog.alert(code+"");

                if (code == 0) {
                    latitude= dataInputStream2.readInt() / 1000000D;
                    longitude=dataInputStream2.readInt() / 1000000D;

                    //Dialog.alert(latitude+"-----"+longitude);  

                    dataInputStream2.readInt();
                    dataInputStream2.readInt();
                    dataInputStream2.readUTF();

                } else {
                    System.out.println("Error obtaining Cell Id ");
                }
                outputStream2.close();
                inputStream2.close();
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }



           }
        else{
             try {
                 LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria);

                 try {
                     Location myLocation = myLocationProvider.getLocation(300);
                     latitude  = myLocation.getQualifiedCoordinates().getLatitude();
                     longitude = myLocation.getQualifiedCoordinates().getLongitude();
                    if(latitude==0 && longitude==0){
                        try {

                            int cellID = GPRSInfo.getCellInfo().getCellId();
                            int lac = GPRSInfo.getCellInfo().getLAC();


                            String urlString2 = "http://www.google.com/glm/mmap";

                            // Open a connection to Google Maps API 
                            ConnectionFactory connFact = new ConnectionFactory();
                            ConnectionDescriptor connDesc;
                            connDesc = connFact.getConnection(urlString2);

                            HttpConnection httpConn2;
                            httpConn2 = (HttpConnection)connDesc.getConnection();
                            httpConn2.setRequestMethod("POST");

                            // Write some custom data to Google Maps API 
                            OutputStream outputStream2 = httpConn2.openOutputStream();//getOutputStream();
                            WriteDataGoogleMaps(outputStream2, cellID, lac);

                            // Get the response  
                            InputStream inputStream2 = httpConn2.openInputStream();//getInputStream();
                            DataInputStream dataInputStream2 = new DataInputStream(inputStream2);

                            // Interpret the response obtained 
                            dataInputStream2.readShort();
                            dataInputStream2.readByte();

                            int code = dataInputStream2.readInt();
                            //Dialog.alert(code+"");

                            if (code == 0) {
                                latitude= dataInputStream2.readInt() / 1000000D;
                                longitude=dataInputStream2.readInt() / 1000000D;

                                //Dialog.alert(latitude+"-----"+longitude);  

                                dataInputStream2.readInt();
                                dataInputStream2.readInt();
                                dataInputStream2.readUTF();

                            } else {
                                System.out.println("Error obtaining Cell Id ");
                            }
                            outputStream2.close();
                            inputStream2.close();
                        } catch (Exception e) {
                            System.out.println("Error: " + e.getMessage());
                        }

                    }

                 }
                 catch ( InterruptedException iex ) {
                     return;
                 }
                 catch ( LocationException lex ) {
                     return;
                 }
             }catch ( LocationException lex ) {
                 return;
              }
        }
        return;
    }
}


private static void WriteDataGoogleMaps(OutputStream out, int cellID, int lac)
throws IOException {
    DataOutputStream dataOutputStream = new DataOutputStream(out);
    dataOutputStream.writeShort(21);
    dataOutputStream.writeLong(0);
    dataOutputStream.writeUTF("en");
    dataOutputStream.writeUTF("Android");
    dataOutputStream.writeUTF("1.0");
    dataOutputStream.writeUTF("Web");
    dataOutputStream.writeByte(27);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(3);
    dataOutputStream.writeUTF("");

    dataOutputStream.writeInt(cellID);
    dataOutputStream.writeInt(lac);

    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.flush();
}

}
于 2012-08-03T12:37:17.323 に答える