我正在上传一张在Base64
中转换为String
IntentService
的大图片。我已经拆分了String,一次不发送所有部件。
在我的IntentService
中,我将这些部分上传到服务器。
这发生在后台。如果用户想知道上传过程的程度,我想在Navigation Drawer
中添加一个项目以启动显示进度的活动。
无论如何可以显示这一进展吗?
如果有人能告诉我怎么做,我会非常感激。
我读过一些BroadcastReceiver
。但是我不明白它是如何工作的,我真的不知道这对我的关注是否重要。
感谢您的帮助!
亲切的问候!
答案 0 :(得分:3)
当然,您可以使用广播接收器。还有另一种方法。您可以使用ResultReceiver
类来实现此目的。创建CustomResultReceiver类
public class CustomResultReceiver extends ResultReceiver {
private Receiver receiver;
public CustomResultReceiver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
public interface Receiver {
void onReceiveResult(int resultCode, Bundle resultData);
}
public void setReceiver(Receiver receiver) {
this.receiver = receiver;
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (receiver != null) {
receiver.onReceiveResult(resultCode, resultData);
}
}
}
在您的活动中,实施接收器
public class SomeActivity extends Activity implements CustomResultReceiver.Receiver {
public CustomResultReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReceiver = new CustomResultReceiver(new Handler());
mReceiver.setReceiver(this);
//pass the receiver to the service
intent.putExtra("SOME_TAG", mReceiver);
}
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
// here you can get the values from the bundle and display the progress accordingly
}
}
现在,在您的服务中,每当您想要向活动发送任何数据时,您都可以通过
进行简单的操作@Override
protected void onHandleIntent(Intent intent) {
ResultReceiver receiver = intent.getParcelableExtra("SOME_TAG");
Bundle b= new Bundle();
//put your progress value in the bundle
b.putString("SOME_DATA", dataValue);
receiver.send(RESULT_CODE, b);
}
答案 1 :(得分:1)
我建议您使用AsyncTask上传图像。在这里,您将获得onProgressUpdate()方法的好处。你需要做的是:
如果您不理解,请发布您的代码。我会帮你做的。