广播接收器(警报管理器)应使用哪种上下文?
我尝试在服务中成功使用此代码,但是当我尝试在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)
答案 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() - >这是您的应用程序上下文。
这是正确的方法。