1

我想通过以下代码获取手机longitudelatitude手机:

    public void commandAction(Command com, Displayable d) {
        if (com == position)
        {
            try
            {
                Criteria cr = new Criteria();
                cr.setHorizontalAccuracy(500);
                LocationProvider lp = LocationProvider.getInstance(cr);
                // get the location, one minute timeout
                Location l = lp.getLocation(60);
                Coordinates coords = l.getQualifiedCoordinates();
                if (coords != null)
                {
                    double longitude = coords.getLongitude();
                    double latitude = coords.getLatitude();
                    String sLong = String.valueOf(longitude);
                    String sLat = String.valueOf(latitude);
                    Tlongitude.setString(sLong);
                    Tlatitude.setString(sLat);
                }
            } catch (LocationException ex) {
                Tlongitude.setString("LocationException");
                Tlatitude.setString("LocationException");
            } catch (InterruptedException ex) {
                Tlongitude.setString("InterruptedException");
                Tlatitude.setString("InterruptedException");
            }
        }
    }

问题是,当单击“位置”命令时,会显示系统警报:java.lang.SecurityException : Application not authorized to access the restricted API

所以我该怎么做?

4

2 回答 2

1

您正在尝试访问一个位置 API,这是一个受限 API。为此,您必须使用VerisignThawte等签名证书对您的移动应用程序进行签名。

证书的费用约为 20K 印度卢比。

您可以在此处此处访问我关于签名证书的其他答案。

于 2012-05-25T09:37:47.977 回答
1

将相关权限添加到您的应用程序并使用相应安全域中的证书对其进行签名。

JSR179 规范在javax.microedition.location. 根据您需要代码执行的操作来选择您需要的那些。

如果位置功能组位于您要在其上运行代码的手机的受信任的第三方安全域中,则 Lucifer 的解决方案(Verisign 或 Thawte)将有所帮助。不过,手机的移动网络运营商或制造商可能已决定将位置信息放在他们的安全域中。

https://stackoverflow.com/q/1716755包含 MIDP 安全模型的简要说明。

于 2012-05-25T09:59:06.203 回答