Android - 从服务更新ProgressBar,是否可能?

时间:2017-03-21 11:43:03

标签: java android mobile

我正在尝试从服务更新进度条。我不知道这是否正确,但我必须这样做。在服务中,我正在尝试上传图片,它将返回通知栏的进度。现在,我想添加一个进度条作为指标,并在通知栏上删除通知。

这些是我用来调用ProgressBar的代码

LayoutInflater inflater = (LayoutInflater) getApplicationContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View v = inflater.inflate(R.layout.fragment_doc, null);

    progressBar = (ProgressBar) v.findViewById(R.id.imgProgressBar);

它不会返回任何错误,但是当我尝试使用

更新progressBar时
  

progressBar.setProgress(进度)

什么都没发生..我该怎么做,我的代码有什么问题吗?

将欣赏任何输入。感谢

3 个答案:

答案 0 :(得分:5)

更新你的进度条不正确... 您应该使用广播接收器根据服务更新您的活动或片段

从服务中你应该发送广播

 Intent broadcastIntent = new Intent();
        broadcastIntent.setAction(ACTION_NAME);       
        sendBroadcast(broadcastIntent);

For Activity或Framgent

private MyBroadRequestReceiver receiver;

on onCreate

IntentFilter filter = new IntentFilter(ACTION_NAME);
 receiver = new MyBroadRequestReceiver();
registerReceiver( receiver, filter);

 @Override
    public void onDestroy() {
        this.unregisterReceiver(receiver);
        super.onDestroy();
    }

并在您要更新进度条的活动或片段中

public class MyBroadRequestReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {

         //update your progressbar here

        }


    }

答案 1 :(得分:1)

如果您的活动正在运行,您可以使用interface作为相同的活动 -

第1步:在service -

中定义界面
public interface OnProgressUpdateListener {

    void onProgressUpdate(int progress);
}

第2步:为监听器创建setter -

private static OnProgressUpdateListener progressListener;
public static void setOnProgressChangedListener(OnProgressUpdateListener _listener) {
        progressListener = _listener;
}

第3步:在您的`活动中实施listener

MyService.setOnProgressChangedListener(this);
@Override
public void onProgressUpdate(int progress) {
    // Do update your progress...
}

PS,不要忘记将其设置为null ..因为它是static

@Override
public void onDestroy() {
    super.onDestroy();
    MyService.setOnProgressChangedListener(null);
}

答案 2 :(得分:1)

服务没有用户界面 所以,如果你想在服务和用户界面(活动)之间进行沟通

你应该使用BroadCast

在您的服务中,您可以添加此

Intent intent = new Intent("Actionname");
            intent.putExtra("....",.......);
            intent.putExtra(".",...);
            LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);

并在您的活动中

private class BroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
             if(intent.getAction().equalsIgnoreCase("reciverlocation"))
            {  // what you wane to do

}}

并且不要忘记在清单中添加Receiver