如何在Android中的IntentService中上传数据时显示进度

时间:2016-03-09 10:03:32

标签: android android-intentservice

我正在上传一张在Base64中转换为String IntentService的大图片。我已经拆分了String,一次不发送所有部件。

在我的IntentService中,我将这些部分上传到服务器。 这发生在后台。如果用户想知道上传过程的程度,我想在Navigation Drawer中添加一个项目以启动显示进度的活动。

无论如何可以显示这一进展吗?

如果有人能告诉我怎么做,我会非常感激。

我读过一些BroadcastReceiver。但是我不明白它是如何工作的,我真的不知道这对我的关注是否重要。

感谢您的帮助!

亲切的问候!

2 个答案:

答案 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()方法的好处。你需要做的是:

  1. 创建一个具有方法的接口,例如onUploadingUpdate。
  2. 在您的活动中实施该界面。
  3. 创建用于上传图像文件的AsyncTask类。
  4. 使用其构造函数在您的活动中调用此AsyncTask。
  5. 在AsyncTask的onProgressUpdate()方法中调用接口的方法。这将为您提供活动进展。
  6. 在“活动”中,使用此进度更新导航栏中的进度。
  7. 如果您不理解,请发布您的代码。我会帮你做的。