尝试使用JSR-179时引发SecurityException

时间:2012-05-25 08:58:58

标签: java-me midp midp-2.0 jsr179

我希望通过此代码获取手机移动设备的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

那我该怎么办?

2 个答案:

答案 0 :(得分:1)

您正在尝试访问限制API的Location API。为此,您必须使用VerisignThawte等签名证书对移动应用程序进行签名。

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

您可以访问我有关签名证书的其他答案herehere

答案 1 :(得分:1)

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

JSR179规范在javax.microedition.location下定义了7个权限。根据您的代码需要选择所需的内容。

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

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