使用putExtra将上下文传递给服务

时间:2014-09-05 12:32:37

标签: java android android-intent service

如何将context传递给putExtra的服务?

问题是:android.os.Application无法转换为java.io.Serializable

如何解决这个问题?

// main activity
public void btnGetLocate() {
    Intent intent = new Intent(this, Sleeper.class); 
    intent.putExtra("context", (Serializable) getApplicationContext());
    startService(intent);
}

// another file
public class MyService extends IntentService {
    public Sleeper() {
        super("MyService"); 
    }

    protected void onHandleIntent(Intent intent) { 
        Context context = (Context) intent.getExtras().getSerializable("context"); // make Error, main problem
        MyClass mc = new MyClass(context);  
        ...
    }

    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "destroyed"), Toast.LENGTH_SHORT).show();  
    } 
}

3 个答案:

答案 0 :(得分:4)

你不能这样做,也不需要。 Service Context不仅Service,而且getApplicationContext()可以调用Application来获取{{1}}对象(如果这是您真正需要的)。不要传递额外的服务可以自己获得的东西。

答案 1 :(得分:0)

您不能这样做(使用上下文作为额外内容),因为此类 Application 不实现 Serializable 接口。

简单的方法是显示一个标题为“获取位置...”的对话框,并在当前活动中执行位置请求。然后,当您获得该位置时,请关闭该对话框。

您可以按照使用Google Play服务的Google tutorial来轻松获取位置

祝你好运!

答案 2 :(得分:0)

您应绑定/绑定Service - 在这种情况下,您将能够在Service中引用Activity对象。使用这些参考,设置/发送Context非常容易。

See here