Blackberry GPS Test Demo

做~自己de王妃 提交于 2019-12-25 08:40:49

问题


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


回答1:


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();
}

}



回答2:


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.



来源:https://stackoverflow.com/questions/11795839/blackberry-gps-test-demo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!