Методы класса Android Location Manager не работают: невозможно разрешить виртуальный метод

Когда вызываются методы из класса диспетчера местоположения Android API, продолжают появляться следующие предупреждения. Я использую последнюю версию Android Studio 2.1, а целевая ОС - Android 4.0.3 или выше. Так что в этом плохого? Заранее спасибо!

  • I / dalvikvm: не удалось найти метод android.content.Context.getSystemService, на который ссылается метод .MainActivity $ GPSService.access $ super

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 532: Landroid / content / Context; .getSystemService
    (Ljava / lang / Class;) Ljava / lang / Object;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x0035 I / dalvikvm: не удалось найти метод android.content.Context.getColorStateList, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 514: Landroid / content / Context; .getColorStateList (I) Landroid / content / res / ColorStateList;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x004f I / dalvikvm: не удалось найти метод android.content.ContextWrapper.getCodeCacheDir, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 585: Landroid / content / ContextWrapper; .getCodeCacheDir () Ljava / io / File;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x00e1

  • I / dalvikvm: не удалось найти метод android.content.ContextWrapper.getNoBackupFilesDir, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 597: Landroid / content / ContextWrapper; .getNoBackupFilesDir () Ljava / io / File;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x01f4

  • I / dalvikvm: не удалось найти метод android.content.Context.getDrawable, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 516: Landroid / content / Context; .getDrawable (I) Landroid / graphics / drawable / Drawable;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x0317

  • I / dalvikvm: не удалось найти метод android.content.ContextWrapper.getSystemServiceName, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 607: Landroid / content / ContextWrapper; .getSystemServiceName (Ljava / lang / Class;) Ljava / lang / String;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x03c6

  • I / dalvikvm: не удалось найти метод android.content.ContextWrapper.getExternalMediaDirs, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 593: Landroid / content / ContextWrapper; .getExternalMediaDirs () [Ljava / io / File;

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x040b I / dalvikvm: не удалось найти метод android.content.Context.getColor, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 513: Landroid / content / Context; .getColor (I) I

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x0534

  • I / dalvikvm: не удалось найти метод android.content.ContextWrapper.checkSelfPermission, на который ссылается метод

  • W / dalvikvm: VFY: невозможно разрешить виртуальный метод 561: Landroid / content / ContextWrapper; .checkSelfPermission (Ljava / lang / String;) I

  • D / dalvikvm: VFY: замена кода операции 0x6f на 0x06d2


public static class GPSService extends Service implements android.location.LocationListener{

    MainActivity ma = new MainActivity();

    private ScheduledExecutorService scheduleTaskExecutor;
    private ScheduledFuture scheduledFuture=null;

    private Context sContext = GPSService.this;

    private String deviceId;
    //= loadStr(getContext(), "deviceId");

    final static String TAG = "GPSService";

    // flag for GPS status
    boolean isGPSEnabled = false;

    // flag for network status
    boolean isNetworkEnabled = false;

    // flag for GPS status
    boolean canGetLocation = false;

    Location location; // location
    double latitude; // latitude
    double longitude; // longitude


    // Declaring a Location Manager
    protected LocationManager locationManager;


    public GPSService() {
        super();
    }


    public Context getContext() {
        return sContext;
    }


    public Location getLocation() {
        try {




            /*
            locationManager = (LocationManager) sContext
                    .getSystemService(LOCATION_SERVICE);*/

            // getting GPS status

            /*
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status
            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;

                // First get location from Network Provider
                if (isNetworkEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            2000,
                            10, this);
                    Log.d("Network", "Network");

                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                2000,
                                10, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }else {
                    showSettingsAlert();
                }
            }*/

        }catch (SecurityException e){
            e.printStackTrace();

        }catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }

    public void stopUsingGPS(){

        try{
            if(locationManager != null){
                locationManager.removeUpdates(GPSService.this);
            }
        }catch (SecurityException e){
            e.printStackTrace();
        }
    }

    public double getLatitude(){
        if(location != null){
            latitude = location.getLatitude();
        }

        return latitude;
    }

    public double getLongitude(){
        if(location != null){
            longitude = location.getLongitude();
        }
        return longitude;
    }


    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    public void showSettingsAlert(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(sContext);

        alertDialog.setTitle("GPS");

        alertDialog.setMessage("GPS setting");

        alertDialog.setPositiveButton("setting", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                sContext.startActivity(intent);
            }
        });

        alertDialog.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        alertDialog.show();
    }

    //--------------------------------------------------------------

    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onLocationChanged(Location location) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    //------------------------------------------------------------

    @Override
    public void onCreate() {

        super.onCreate();
        Log.d("service","on create");
        //getLocation();

        try {
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 2000, 10, this);

        }catch(SecurityException e){
            e.printStackTrace();
        }
        catch(Exception e){
            e.printStackTrace();
        }

    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }


    @Override
    public int onStartCommand(final Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        Log.d("service","on start cmd");


        Bundle extras = intent.getExtras();
        if(extras == null){
            this.deviceId=null;
            Log.d("Service passed id","null");}
        else
        {
            this.deviceId = (String) extras.get("deviceId");
            Log.d("passed id",deviceId);
        }

        scheduleTaskExecutor= Executors.newScheduledThreadPool(5);
        scheduledFuture = scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
            public void run() {

                Log.d("inside on Start Cmd","running thread");

                try{
                location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                } catch(SecurityException e){
                    e.printStackTrace();
                }


            }
            }, 0, 10, TimeUnit.SECONDS);


        return START_NOT_STICKY;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (scheduledFuture!=null){
            scheduledFuture.cancel(false);
            Log.d("service" , "on destroy scheduled future");
        }
        if (locationManager!=null)
            stopUsingGPS();

        Log.d("service" , "on destroy");

    }

    }

person Anndexi9    schedule 11.08.2016    source источник
comment
Можете ли вы также отформатировать ошибку?   -  person rakesh kashyap    schedule 11.08.2016


Ответы (1)


Извините, наконец-то у меня получилось. Это произошло из-за моих глупых ошибок. Методы диспетчера местоположения должны быть сгруппированы следующим образом.

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            locationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 2000, 10, this);
            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
person Anndexi9    schedule 12.08.2016
comment
Извините, вы еще не обновили Api местоположения Google: developer.android.com/training/ location / index.html - person Chintan Soni; 12.08.2016
comment
Я тоже могу использовать Google API. Я должен придерживаться старого API, так как для API Google нужна лицензия - person Anndexi9; 12.08.2016