【发布时间】:2014-11-03 21:26:49
【问题描述】:
我需要做一些简单的事情:我必须从我的应用程序中制作一张照片,将其发送到服务器(在后台)并在发送后显示通知。一切正常,但现在我必须等待发送文件结束 - 之后相机活动将关闭。我不想等待,我想在拍照后立即回到我的主要活动(但上传仍会在线程中进行,并在完成时发送通知)。
问题:我不知道如何让我的主要活动知道,该线程已完成照片上传。
也许将上下文或处理程序传递给相机活动会有所帮助,但putExtra() 无法做到这一点。
有什么建议吗?
我的一些代码片段:
在MainActivity.java:
Intent intent = new Intent(this, Camera.class);
startActivityForResult(intent, Constants.REQUESTCODE_CAMERA);
在Camera.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
//(...)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent,TAKE_PHOTO);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//(...)
new SendFileToServer().execute();
// finish(); // I would like to finish Camera.java here, and get back to MainActivity, while SendFileToServer uploads file and send some notification later
}
protected class SendFileToServer extends AsyncTask<Void, Void, String>{
@Override
protected String doInBackground(Void... params){
//(...) // here is sending of file to server, it works
}
@Override
protected void onPostExecute(String result) {
//(...) // code below doesn't work, because I didn't pass "context", I don't know how, or it's just impossible
MainActivity mainActivity = (MainActivity) context;
mainActivity.sendFileName(filename);
}
}
【问题讨论】:
-
请附上您的上传代码。您添加了 AsyncTask 标记,因此我假设您在 AsyncTask 中进行联网。您可以覆盖 AsyncTask 的 onPostExecute 方法,该方法在任务完成时被调用,并在 UI 线程上运行,因此您可以在那里进行任何视图更改。
标签: android multithreading android-intent android-activity android-asynctask