调用getLastKnownLocation时出现SecurityException异常

10

我们收到了一些设备崩溃的报告,当用户打开一个调用位置管理器的getLastKnownLocation方法的活动时发生。我们在应用程序清单中请求了所有必需的权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

以下是堆栈跟踪信息:

java.lang.RuntimeException: Unable to resume activity {com.projectname/com.projectname.ui.AtmFinderActivity}: java.lang.SecurityException: invalid package name: com.google.android.gms
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.access$600(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
        at android.os.Handler.dispatchMessage(Handler.java)
        at android.os.Looper.loop(Looper.java)
        at android.app.ActivityThread.main(ActivityThread.java)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.SecurityException: invalid package name: com.google.android.gms
        at android.os.Parcel.readException(Parcel.java)
        at android.os.Parcel.readException(Parcel.java)
        at android.location.ILocationManager$Stub$Proxy.getLastLocation(ILocationManager.java)
        at android.location.LocationManager.getLastKnownLocation(LocationManager.java)
        at android.privacy.surrogate.PrivacyLocationManager.getLastKnownLocation(PrivacyLocationManager.java)
        at com.projectname.util.LocationUtils.getLastKnownLocation(SourceFile:48)
        at com.projectname.ui.AtmFinderFragment.initMapIfNeeded(SourceFile:401)
        at com.projectname.ui.AtmFinderFragment.onGooglePlayServicesAvailable(SourceFile:187)
        at com.projectname.maps.GoogleMapServicesUtil.getGooglePlayServicesStatus(SourceFile:40)
        at com.projectname.ui.AtmFinderFragment.onResume(SourceFile:149)
        at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:917)
        at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1080)
        at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1062)
        at android.support.v4.app.FragmentManagerImpl.dispatchResume(SourceFile:1820)
        at android.support.v4.app.FragmentActivity.onPostResume(SourceFile:412)
        at com.actionbarsherlock.app.SherlockFragmentActivity.onPostResume(SourceFile:69)
        at android.app.Activity.performResume(Activity.java)
        ... 13 more

这里是LocationUtils相关的方法:
public static Location getLastKnownLocation(Context context) {
    if (context != null) {
        LocationManager lm = (LocationManager) context.getSystemService(
                Context.LOCATION_SERVICE);

        // Get our last known location
        Location location = lm.getLastKnownLocation(
                LocationManager.NETWORK_PROVIDER);
        if (location == null) {
            location = lm.getLastKnownLocation(
                    LocationManager.GPS_PROVIDER);
        }
        return location;
    }
    return null;
}

我们手头的设备都无法重现这个问题。有人遇到过这个问题吗?


3
这只是猜测,但我认为可能是定制 ROM 与 Google Play 服务出了一些问题。建议进一步了解你遇到问题的设备情况,包括设备型号、运行的 Android 版本以及是否使用了某种定制 ROM 或其他干扰 Google Play 的自定义设置。 - Charlie Collins
1
我们也遇到了这个问题,看起来是由于自定义ROM引起的。 - Ian G. Clifton
@Oam 谢谢,但我们已经指定了该权限。您还会注意到堆栈跟踪引用了“无效的包名称:com.google.android.gms”,并没有提到权限错误。 - twaddington
1
@twaddington 当我们的应用程序首次推出时,有人通过支持电子邮件表示,在他的自定义4.2.2 ROM上每次启动应用程序都会崩溃。 崩溃的时间和频率与该用户相符,而且您看到的就是那个崩溃。不幸的是,该用户没有回复电子邮件以获取进一步的详细信息 :( - Ian G. Clifton
显示剩余3条评论
2个回答

0

0

对我来说,似乎你可以通过使用需要的功能来防止它发生


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接