如何将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();
}
}
答案 0 :(得分:4)
你不能这样做,也不需要。 Service
Context
不仅Service
,而且getApplicationContext()
可以调用Application
来获取{{1}}对象(如果这是您真正需要的)。不要传递额外的服务可以自己获得的东西。
答案 1 :(得分:0)
您不能这样做(使用上下文作为额外内容),因为此类 Application 不实现 Serializable 接口。
简单的方法是显示一个标题为“获取位置...”的对话框,并在当前活动中执行位置请求。然后,当您获得该位置时,请关闭该对话框。
您可以按照使用Google Play服务的Google tutorial来轻松获取位置。
祝你好运!答案 2 :(得分:0)
您应绑定/绑定Service
- 在这种情况下,您将能够在Service
中引用Activity
对象。使用这些参考,设置/发送Context
非常容易。