首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黑莓GPS测试演示

黑莓GPS测试演示
EN

Stack Overflow用户
提问于 2012-08-03 20:33:38
回答 2查看 485关注 0票数 0

你能帮我创建黑莓GPS示例演示吗?实际上,我被这么多的黑莓设备搞得一团糟,有些有GPS接收器,有些没有。

如果设备有GPS接收器,它将如何搜索当前设备位置?如果设备没有像BB8520这样的GPS怎么办?

请分享你对GPS在黑莓的理解,以及我如何通过GPS或不通过GPS来实现设备位置的经纬度。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-08-03 20:37:17

试试这个,这会检查gps的。如果gps可用,那么它将获得位置,否则,它将从网络中找到位置。

在您的类上调用这个类- handleGPS gps=new handleGPS();

代码语言:javascript
复制
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();
}

}
票数 1
EN

Stack Overflow用户

发布于 2012-08-03 20:40:49

This上一篇SO post应该会给你指明正确的方向。

至于其他方法,你可以使用Triangulation,你可以使用至少3个手机发射塔的信号强度来粗略估计你的位置。根据您需要的位置精度,三角测量很可能比GPS更快,但GPS的精度要高得多(三角测量的最佳误差范围约为100米)。

但是,请注意,如果您在建筑物内或没有清晰的天空视图,GPS很可能无法工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11795839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档