如何在非活动类(LocationManager)中使用getSystemService?

我无法将主要的Activity OnCreate方法中的任务卸载到另一个类上来进行繁重的工作。


当我尝试从非Activity类调用getSystemService时,将引发异常。


任何帮助将不胜感激 :)


lmt.java:


package com.atClass.lmt;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

import android.location.Location;


public class lmt extends Activity {

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);


        fyl lfyl = new fyl();

        Location location = lfyl.getLocation();

        String latLongString = lfyl.updateWithNewLocation(location);


        TextView myLocationText = (TextView)findViewById(R.id.myLocationText);

        myLocationText.setText("Your current position is:\n" + latLongString);

    }

}

fyl.java


package com.atClass.lmt;


import android.app.Activity;

import android.os.Bundle;

import android.location.Location;

import android.location.LocationManager;

import android.os.Bundle;

import android.widget.TextView;

import android.content.Context;


public class fyl {

    public Location getLocation(){

        LocationManager locationManager;

        String context = Context.LOCATION_SERVICE;

        locationManager = (LocationManager)getSystemService(context);


        String provider = LocationManager.GPS_PROVIDER;

        Location location = locationManager.getLastKnownLocation(provider);


        return location;

    }


    public String updateWithNewLocation(Location location) {

        String latLongString;


        if (location != null){

            double lat = location.getLatitude();

            double lng = location.getLongitude();

            latLongString = "Lat:" + lat + "\nLong:" + lng;

        }else{

            latLongString = "No Location";

        }


        return latLongString;

    }

}


慕工程0101907
浏览 984回答 3
3回答

鸿蒙传说

您需要将上下文传递给fyl类。一种解决方案是为您的fyl类创建一个类似这样的构造函数:public class fyl { Context mContext; public fyl(Context mContext) {       this.mContext = mContext; } public Location getLocation() {       --       locationManager = (LocationManager)mContext.getSystemService(context);       -- }}因此,在您的活动类中,在onCreate函数中创建fyl对象,如下所示:package com.atClass.lmt;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;import android.location.Location;public class lmt extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        fyl lfyl = new fyl(this); //Here the context is passing         Location location = lfyl.getLocation();        String latLongString = lfyl.updateWithNewLocation(location);        TextView myLocationText = (TextView)findViewById(R.id.myLocationText);        myLocationText.setText("Your current position is:\n" + latLongString);    }}

森林海

您可以这样做:getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);

米琪卡哇伊

解决这个问题的一种方法是为实例创建一个静态类。我在AS3中经常使用它,在Android开发中也为我工作得很好。配置文件public final class Config {    public static MyApp context = null;}MyApp.javapublic class MyApp extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Config.context = this;    }    ...}然后,您可以访问上下文或通过使用 Config.contextLocationManager locationManager;String context = Context.LOCATION_SERVICE;locationManager = Config.context.getSystemService(context);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android