Blackberry GPS Test Demo

2019-09-15 00:56发布

Can you please help me to create Blackberry GPS Sample Demo? Actually I am messed with so many devices of Blackberry and some has GPS receiver and others don't have.

If the device has GPS receiver how it will search for the current device location? and what if the device does not have GPS like BB 8520 ?

Please share your understandings about GPS in Blackberry and how can I achieve Latitude and Longitude of Device Location whether by GPS or not.

Thank you

2条回答
趁早两清
2楼-- · 2019-09-15 01:39

try this , this will check the gps. If gps is available, then it will get the location, else, it will find the location from the network.

call this class on your class - 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();
}

}
查看更多
混吃等死
3楼-- · 2019-09-15 01:44

This previous SO post should point you in the right direction.

Regarding other methods, you can use Triangulation, in which you can use the signal strength from at least 3 cell towers to obtain a rough estimate of your location. Depending on how accurate you need the location, Triangulation will most likely be faster than GPS, but GPS will be significantly much more accurate (triangulation tends to have a best case margin of error of about 100m).

Note however, that if you are inside a building or do not have a clear view of the sky, the GPS will most likely not work.

查看更多
登录 后发表回答