我创建了Service类。 我可以在任何我想要的地方运行它,但我总是需要来自MainMenuActivity.class的Context。 我尝试使用getApplicationContext和getBaseContext,但它们显示了另一个类。
感谢您的回答
public class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, MyService.class));
}
}
public class MyService extends Service {
private Handler handler = new Handler();
private MyLocationListener mylistener;
public void onCreate() {
handler.postDelayed(new runnable(), 10000);
}
private class runnable implements Runnable {
@Override
public void run() {
mylistener = new MyLocationListener();
}
}
}
public class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
}
}
[编辑] 当我使用getApplicationContext()或getBaseContext或MainActivity.this来getDefaultSharedPreferences时,它总是一样吗?
答案 0 :(得分:1)
解决方案:1
在这种情况下,您必须使用defaultSharedPreferences
。您可以通过以下方式访问默认的共享首选项实例:
PreferenceManager.getDefaultSharedPreferences(Context context):
示例:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
此首选项在所有活动和服务类中共享。
解决方案:2
您可以在应用程序类中创建sharedPreference实例,如:
公共类MyApplication扩展Application { public static SharedPreferences首选项;
@Override
public void onCreate() {
super.onCreate();
preferences = getSharedPreferences("Preferences", MODE_PRIVATE);
}
}
然后您可以将您的偏好设置为:
MyApplication.preferences.getString("key", "default");
答案 1 :(得分:0)
将context参数添加到服务类方法
public void myMethodInsideServiceClass(Context context){
//bluh bluh
}
这样你就可以像这样从活动类中调用
myMethodInsideServiceClass(this);
您也可以尝试
public class MyActivity extends Activity {
public static myActivity;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myActivity=this;
}
}
这样您就可以在整个应用程序中使用myActivity (我没有使用编辑器输入代码,抱歉语法错误)