【问题标题】:My location manager made my application crash?我的位置管理器让我的应用程序崩溃?
【发布时间】:2026-02-10 04:40:01
【问题描述】:

我是 android 的新手,我在使用 LocationManager 时遇到了问题。
我尝试对几乎所有内容发表评论,并且该应用程序正在显示地图。这意味着我已经从 google api 获得了一个密钥,其他任何东西都可以使用。
然后我想获取我当前的位置。

我尝试取消注释这些

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

我从我的设备收到强制关闭消息..

这是我的活动

 import android.content.Context;
 import android.location.Criteria;
 import android.location.Location;
 import android.location.LocationManager;

 import android.os.Bundle;
 import android.support.v4.app.FragmentActivity;

 import com.google.android.gms.maps.CameraUpdateFactory;
 import com.google.android.gms.maps.GoogleMap;
 import com.google.android.gms.maps.model.LatLng;


 public class MainActivity extends FragmentActivity {
  private GoogleMap mMap;
  LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  public Criteria criteria = new Criteria();
  public String provider = locationManager.getBestProvider(criteria,true);
  public Location myLocation = locationManager.getLastKnownLocation(provider);
  public Double latid = myLocation.getLatitude();
  public Double longi = myLocation.getLongitude();
  public LatLng Coba = new LatLng(latid,longi);
  protected Context context;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mMap.setMyLocationEnabled(true);
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(Coba, 16));

        }    
}

Logcat?

12-28 16:01:38.830: E/Launcher(268): setWindowOpaque() 12-28 16:01:42.630: E/UinboxLogger(3310): [UinboxReceiver] onReceive() >> 上下文是 >android.app.ReceiverRestrictedContext@40523808 12-28 16:01:44.010:E/AndroidRuntime(3337):致命异常:主要 12-28 16:01:44.010: E/AndroidRuntime(3337): java.lang.RuntimeException: 无法实例化活动 ComponentInfo{com.example.hellomap/com.example.hellomap.MainActivity}: java.lang.IllegalStateException: System在 onCreate() 之前对活动不可用的服务 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.os.Handler.dispatchMessage(Handler.java:99) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.os.Looper.loop(Looper.java:130) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.ActivityThread.main(ActivityThread.java:3687) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 java.lang.reflect.Method.invokeNative(Native Method) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 java.lang.reflect.Method.invoke(Method.java:507) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 12-28 16:01:44.010: E/AndroidRuntime(3337): at dalvik.system.NativeStart.main(Native Method) 12-28 16:01:44.010:E/AndroidRuntime(3337):原因:java.lang.IllegalStateException:系统服务在 onCreate() 之前对活动不可用 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.Activity.getSystemService(Activity.java:3536) 12-28 16:01:44.010: E/AndroidRuntime(3337): at com.example.hellomap.MainActivity.(MainActivity.java:30) 12-28 16:01:44.010: E/AndroidRuntime(3337): at java.lang.Class.newInstanceImpl(Native Method) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 java.lang.Class.newInstance(Class.java:1409) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.Instrumentation.newActivity(Instrumentation.java:1021) 12-28 16:01:44.010: E/AndroidRuntime(3337): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565) 12-28 16:01:44.010: E/AndroidRuntime(3337): ... 11 更多 12-28 16:01:44.020: E/(171): Dumpstate > /data/log/dumpstate_app_error 12-28 16:01:49.609: E/Launcher(268): setWindowOpaque() 12-28 16:01:49.679:E/Launcher(268):MTP-LAUNCHER:媒体扫描尚未完成。

【问题讨论】:

  • 请提供崩溃日志。
  • 请发布 logcat 和 xml ..
  • @Abdullah Shoaib :我尝试在这里获取崩溃日志..
  • @Abdullah Shoaib:12-28 15:51:46.400:E/AndroidRuntime(2900):java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.example.hellomap/com.example。 hellomap.MainActivity}:java.lang.IllegalStateException:系统服务在onCreate()之前对Activity不可用

标签: android google-maps android-fragments android-location


【解决方案1】:

在xml中使用

<fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/crntlocation"
        class="com.google.android.gms.maps.SupportMapFragment" />

活动中

SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            googleMap = fm.getMap();
            googleMap.setMyLocationEnabled(true);
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

and 

// 创建一个条件对象来检索提供者

Criteria criteria = new Criteria();
            String provider = locationManager.getBestProvider(criteria, true);
            Location location = locationManager.getLastKnownLocation(provider);

【讨论】:

    【解决方案2】:

    我认为这是因为你试图发起

          LocationManager locationManager = (LocationManager)
    getSystemService(Context.LOCATION_SERVICE);
    

    在 onCreate 方法被调用之前。

    //在onCreate()中初始化这些组件

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
      public String provider = locationManager.getBestProvider(criteria,true);
      public Location myLocation = locationManager.getLastKnownLocation(provider);
      public Double latid = myLocation.getLatitude();
      public Double longi = myLocation.getLongitude();
      public LatLng Coba = new LatLng(latid,longi);
    

    您的 mMap 可以返回 null,使用 Try & catch 块。

    【讨论】:

    • 当我把它放在 onCreate 方法中时它仍然显示一些错误
    • 了解如何使用 Logcat 查找错误,请发布 Logcat stacktrack。
    最近更新 更多