Android上下文问题 - 广播接收器(警报管理器)应使用哪些上下文?

时间:2013-12-12 09:00:45

标签: java android

广播接收器(警报管理器)应使用哪种上下文?

我尝试在服务中成功使用此代码,但是当我尝试在AlarmService中运行它时,我在getApplicationContext()和myLocation.getLocation(this,locationResult)中遇到错误;

我已经尝试传递在服务中工作的上下文消除了错误,但程序在运行时会崩溃。

LocationResult locationResult = new LocationResult(){
            @Override
            public void gotLocation(Location location){
                Toast.makeText(getApplicationContext(), "Latitude: "+location.getLatitude()+"\n Longitude: "+location.getLongitude() , Toast.LENGTH_SHORT).show();
            }
        };
        MyLocation myLocation = new MyLocation();
        myLocation.getLocation(this, locationResult);

错误:

祝酒词:

getApplicationContext()方法未定义新类型MyLocation.LocationResult(){}

MyLocation类型中的方法getLocation(Context,MyLocation.LocationResult)不适用于参数(Alarm,MyLocation.LocationResult)

2 个答案:

答案 0 :(得分:1)

您可能将此功能保留在MainActivity以外的单独类文件中。

你可以通过

来解决这个问题
public static Context context = getApplicationContext();
定义成员变量时,在Mainactivity类中

。然后,您可以在locationresult类的toast消息中使用上下文,如下所示

  Toast.makeText(MainActivity.context, "Latitude: "+location.getLatitude()+"\n Longitude: "+location.getLongitude() , Toast.LENGTH_SHORT).show();

编辑:

1)更好的方法是将上下文作为参数从初始化您的位置类的Activity传递。

2)如果您使用的是当前方法,请在显示toast消息之前为上下文添加空值检查,以消除空异常的可能性。

答案 1 :(得分:1)

应该有类似的内容:

public class YourApp extends Application {
        private static YourApp sInstance;
        public YourApp() {
            super();
            sInstance = this;
        } 
        public static YourApp getInstance() {
        return sInstance;
       }
}

然后从您的代码中随时可以

YourApp.getInstance() - >这是您的应用程序上下文。

这是正确的方法。