【问题标题】:Why App is Crashing while calling GPS?为什么应用程序在调用 GPS 时崩溃?
【发布时间】:2018-12-28 10:53:59
【问题描述】:
package com.example.simranjeet.myapplication43;

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class GpsLocation extends AppCompatActivity {
    Context context;
    private LocationManager locationManager;
    private LocationListener listener;


    void findloc(){
        locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

        listener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {

                Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(i);
            }
        };

        configure_button();
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 10:
                configure_button();
                break;
            default:
                break;
        }
    }

    void configure_button(){
        // first check for permissions
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET}
                        ,10);
            }
            return;
        }

        locationManager.requestLocationUpdates("gps", 500, 0, listener);
        // locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER,listener,null);
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
       Toast.makeText(context,"location finded",Toast.LENGTH_LONG ).show();
        locationManager.removeUpdates(listener);
        // Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    }
}

我从onCreate 方法调用findloc 方法为

s = new GpsLocation();
s.findloc();

每次我调用这个函数时它都会崩溃,但它运行良好 没有放在单独的班级。我已经添加了所有权限,它是 在 onCreate 方法下工作得很好,谁能告诉我为什么它突然崩溃了。

崩溃日志//我正在使用模拟器

进程:com.example.simranjeet.myapplication43,PID:12956 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.simranjeet.myapplication43/com.example.simranjeet.myapplication43.MainActivity}: java.lang.IllegalStateException:系统服务不可用于 onCreate() 之前的活动 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 原因:java.lang.IllegalStateException:系统服务在 onCreate() 之前对活动不可用 在 android.app.Activity.getSystemService(Activity.java:5253) 在 com.example.simranjeet.myapplication43.GpsLocation.findloc(GpsLocation.java:25) 在 com.example.simranjeet.myapplication43.MainActivity.onCreate(MainActivity.java:36) 在 android.app.Activity.performCreate(Activity.java:6237) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 07-20 13:01:03.413 3353-12581/com.google.android.gms.persistent E/NetworkScheduler:提供了无法识别的操作: android.intent.action.PACKAGE_REPLACED

【问题讨论】:

  • 可以分享崩溃日志吗?
  • 您不应该在 Android 中明确创建 Activity 实例。如果您的 GpsLocation 类旨在成为某种帮助类,则不要扩展 AppCompatActivity

标签: android android-studio locationlistener crash


【解决方案1】:

尝试使用。

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

改为

 locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

【讨论】:

  • 再次出现同样的错误,我也尝试传递上下文但它也不起作用
  • 不工作我也尝试过这个,方法是删除扩展 appcompactactivity locationManager = (LocationManager)context.getSystemService(context.LOCATION_SERVICE);
  • @Simranjeet 如果你使用 appContext 肯定是另一个错误。可以分享一下吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多