Android 位置管理器在调用时使应用程序崩溃

标签 android locationmanager locationlistener

我写了一段代码,在用户每次点击按钮时获取设备的当前位置。但是当我调用监听器时,应用程序崩溃了。谁能告诉我我做错了什么?提前致谢。

public void onStartService() 
{
    addListenerLocation();
}

@SuppressLint("NewApi")
private void addListenerLocation() 
{
    mLocationManager = (LocationManager)
            getSystemService(Context.LOCATION_SERVICE);
    LocationListener mLocationListener = new LocationListener()
    {

        public void onLocationChanged(Location location) 
        {
            currentLat = location.getLatitude();
            InstanciaObjetos.setPEDLAT(currentLat);
            currentLon = location.getLongitude();
            InstanciaObjetos.setPEDLON(currentLon);
        }
        public void onStatusChanged(String provider, int status, Bundle extras) 
        {
            //TODO -- Barney says what should happen
        }
        public void onProviderEnabled(String provider) 
        {
            Location lastKnownLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if(lastKnownLocation!=null)
            {
                currentLat = lastKnownLocation.getLatitude();
                currentLon = lastKnownLocation.getLongitude();
            }

        }
        public void onProviderDisabled(String provider) 
        {

        }
    };
    mLocationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
}

要启动服务,我只需调用 onStartService()。还有什么我需要做的吗?

我刚刚附加了 logcat。现在我意识到需要做什么(我猜)。

09-21 23:17:41.209 8861-8861/br.com.appvendasfs E/AndroidRuntime: FATAL EXCEPTION: main
Process: br.com.appvendasfs, PID: 8861
java.lang.IllegalStateException: Could not execute method for android:onClick
  at android.view.View$DeclaredOnClickListener.onClick(View.java:4452)
  at android.view.View.performClick(View.java:5198)
  at android.view.View$PerformClick.run(View.java:21147)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
  at java.lang.reflect.Method.invoke(Native Method)
  at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
  at android.view.View.performClick(View.java:5198) 
  at android.view.View$PerformClick.run(View.java:21147) 
  at android.os.Handler.handleCallback(Handler.java:739) 
  at android.os.Handler.dispatchMessage(Handler.java:95) 
  at android.os.Looper.loop(Looper.java:148) 
  at android.app.ActivityThread.main(ActivityThread.java:5417) 
  at java.lang.reflect.Method.invoke(Native Method) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
  at android.app.Activity.getSystemService(Activity.java:5253)
  at appVendasFS.DAO.PedidosDAO.addListenerLocation(PedidosDAO.java:47)
  at appVendasFS.DAO.PedidosDAO.onStartService(PedidosDAO.java:40)
  at appVendasFS.DAO.PedidosDAO.Inserir(PedidosDAO.java:97)
  at appVendasFS.UI.TelaVenda.Inserir_Pedido(TelaVenda.java:813)
  at appVendasFS.UI.TelaVenda.onClick_botao(TelaVenda.java:593)
  at java.lang.reflect.Method.invoke(Native Method) 
  at android.view.View$DeclaredOnClickListener.onClick(View.java:4447) 
  at android.view.View.performClick(View.java:5198) 
  at android.view.View$PerformClick.run(View.java:21147) 
  at android.os.Handler.handleCallback(Handler.java:739) 
  at android.os.Handler.dispatchMessage(Handler.java:95) 
  at android.os.Looper.loop(Looper.java:148) 
  at android.app.ActivityThread.main(ActivityThread.java:5417) 
  at java.lang.reflect.Method.invoke(Native Method) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

最佳答案

改为在服务的 onCreate() 方法中调用 addListenerLocation();

关于Android 位置管理器在调用时使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39574790/

相关文章:

java - 在android应用程序中使用JAVA IO读取文件

android - 安装 HAXM 时不支持虚拟化技术

使用 CLLocationManager 的 Swift 3 信标监控

java - 在不使用 gps 或 internet 的情况下获取用户的当前位置名称,但在 android 中使用 Network_Provider

android - 为什么我的 LocationListener 变为空?

android - 旋转后ImageView会重置为原始状态吗?

android - 发布数据 AsyncTask 不会执行 android

android - 从 LocationManager 取消订阅 LocationListener

Android 定期获取位置并使用服务发布到服务器

Android OnlocationChanged 停止被调用