Android如何从特定类中获取上下文服务

时间:2016-01-12 10:52:08

标签: android android-service android-context

我创建了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时,它总是一样吗?

2 个答案:

答案 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 (我没有使用编辑器输入代码,抱歉语法错误)