We've been getting reports of crashes on some devices when a user opens an Activity that calls the location manager's getLastKnownLocation
method. We've requested all the required permissions in our application manifest:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Here is the stack trace:
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
Here is the relevant method from 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;
}
We've been unable to reproduce this issue on any device we have on hand. Has anyone encountered this problem before?
seem to me like you could prevent it by using require feature
Check this out. Here I have implemented methods for find last known gps and last known network locations. https://github.com/thamaranga/GpsNew2/tree/master/GpsNew2
来源:https://stackoverflow.com/questions/16176862/securityexception-when-calling-getlastknownlocation